category.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. let randomColor = require('randomcolor')
  2. module.exports = (sequelize, DataTypes) => {
  3. let Category = sequelize.define('Category', {
  4. name: {
  5. type: DataTypes.STRING,
  6. unique: true,
  7. set (val) {
  8. let underscored = val.trim().replace(/\s/g, '_').toUpperCase()
  9. this.setDataValue('name', val)
  10. this.setDataValue('value', underscored)
  11. }
  12. },
  13. value: {
  14. type: DataTypes.STRING,
  15. unique: true
  16. },
  17. color: {
  18. type: DataTypes.STRING,
  19. defaultValue () {
  20. return randomColor({ luminosity: 'bright' })
  21. }
  22. }
  23. }, {
  24. classMethods: {
  25. associate (models) {
  26. Category.hasMany(models.Thread)
  27. },
  28. includeOptions (order, threadLimit, where, from) {
  29. let models = sequelize.models
  30. let options = {
  31. model: models.Thread,
  32. where: {
  33. id: { $gt: from || -1 },
  34. userId: where.userId
  35. },
  36. include: [
  37. models.Category,
  38. { model: models.User, attributes: ['username', 'createdAt', 'id', 'color'] },
  39. {
  40. model: models.Post, limit: 1, order: [['id', order]], include:
  41. [{ model: models.User, attributes: ['username', 'id'] }]
  42. }
  43. ]
  44. }
  45. if(threadLimit) options.limit = threadLimit
  46. return [options]
  47. }
  48. }
  49. })
  50. return Category
  51. }