thread.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. let slug = require('slug')
  2. module.exports = (sequelize, DataTypes) => {
  3. let Thread = sequelize.define('Thread', {
  4. name: {
  5. type: DataTypes.TEXT,
  6. set (val) {
  7. this.setDataValue('name', val)
  8. this.setDataValue('slug', slug(val).toLowerCase())
  9. }
  10. },
  11. slug: DataTypes.TEXT,
  12. postsCount: {
  13. type: DataTypes.INTEGER,
  14. defaultValue: 0
  15. }
  16. }, {
  17. classMethods: {
  18. associate (models) {
  19. Thread.belongsTo(models.User)
  20. Thread.belongsTo(models.Category)
  21. Thread.hasMany(models.Post)
  22. },
  23. includeOptions (lastId, limit, previousId) {
  24. let models = sequelize.models
  25. let where = {}
  26. let order = [['id', 'ASC']]
  27. if(lastId !== null) {
  28. where.id = { $gt: lastId }
  29. } else {
  30. where.id = { $lt: previousId }
  31. order = [['id', 'DESC']]
  32. }
  33. return [
  34. { model: models.User, attributes: ['username', 'createdAt', 'color', 'updatedAt', 'id'] },
  35. models.Category,
  36. {
  37. model: models.Post,
  38. where,
  39. order,
  40. limit: limit,
  41. include: [
  42. { model: models.Thread, attributes: ['slug'] },
  43. { model: models.User, attributes: ['username', 'createdAt', 'id', 'color'] },
  44. {
  45. model: models.Post, as: 'Replies', include:
  46. [{ model: models.User, attributes: ['username', 'id', 'color'] }]
  47. }
  48. ]
  49. }
  50. ]
  51. }
  52. }
  53. })
  54. return Thread
  55. }