thread.js 1.3 KB

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