schema-art.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. var Schema = require('mongoose').Schema;
  2. const config = require('../config/app');
  3. let artSchema = new Schema({
  4. open: { type: Boolean, default: false, index: true, desc: '是否开放' }, // 针对网站新增的字段,控制内容逐步开放
  5. status: { type: Number, required: true, index: true, orderable: true, default: 1000, desc: '状态' },
  6. pageId: { type: Schema.Types.ObjectId, required: true, desc: 'Page Id' }, //old modes.Page._id
  7. user: { type: Schema.Types.ObjectId, ref: 'User', required: true, index: true, desc: '作者' },
  8. org: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '线稿原图' },
  9. rawOrg: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '初始线稿原图' },
  10. raw: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '矢量线稿', },
  11. rawColored: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '原始上色效果图' },
  12. page: { type: Schema.Types.ObjectId, ref: 'ArtBin', required: true, desc: '像素线稿', },
  13. pageVersion: { type: Number, default: 1, desc: '底稿版本', },
  14. rawMap: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '初始Map', },
  15. colorUser: { type: Schema.Types.ObjectId, ref: 'User', index: true, desc: '填色人', },
  16. areaCount: { type: Number, required: true, orderable: true, desc: '区块数' },
  17. coloredAreaCount: { type: Number, default: 0, desc: '填色区块数' },
  18. colorCount: { type: Number, default: 0, desc: '颜色数' },
  19. orderedColorCount: { type: Number, default: 0, desc: '已排序颜色数' },
  20. upstream: { type: Boolean, default: false, index: true, desc: '是否推送' },
  21. upstreamTime: { type: Date, index: true, desc: '推送时间', orderable: true, },
  22. upstreamBy: { type: Schema.Types.ObjectId, ref: 'User', index: true, desc: '推送人' },
  23. upstreamFrom: { type: String, index: true, desc: '推送来源' },
  24. work: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '上色效果', },
  25. map: { type: Schema.Types.ObjectId, ref: 'ArtBin', required: true, desc: 'Map图', },
  26. centers: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '填色区域中心点', },
  27. mapVersion: { type: Number, required: true, default: 1, desc: 'map版本', },
  28. workVersion: { type: Number, required: true, default: 1, desc: 'work版本', },
  29. centersVersion: { type: Number, required: true, default: 0, desc: '中心点版本', },
  30. hasSpecial: { type: Boolean, desc: '是否有special', default: false, index: true, },
  31. special: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: 'Special图', },
  32. specialHalf: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: 'Special图一半大小', },
  33. specialVersion: { type: Number, default: 0, desc: 'Special图版本', },
  34. specialOutline: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: 'Speical切线图', },
  35. specialThumb: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: 'Special上传缩略图' },
  36. useSpecialThumb: { type: Number, required: true, default: 0, desc: '当前Special缩略图' },
  37. mystery: { type: Boolean, default: false, index: true, desc: '神秘图', },
  38. ai: { type: Boolean, default: false, index: true, desc: '是否AI参考图', },
  39. aiPrompt: { type: String, desc: 'AI关键字' },
  40. aiImage: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: 'AI参考图', },
  41. width: { type: Number, required: true, index: true, desc: '宽' },
  42. height: { type: Number, index: true, required: true, desc: '高' },
  43. name: { type: String, required: true, desc: '作品名', searchable: true },
  44. // 暂时没有用到,预留网站seo
  45. desc: { type: String, desc: '作品描述', searchable: true }, // 考虑存json字符串,形如: {zh: '中国', en: 'China'}
  46. // 新增字段,与原来的name相区别
  47. title: { type: String, desc: '作品标题', searchable: true },
  48. use: { type: String, required: true, index: true, default: 'normal', lowercase: true, trim: true, desc: '用途', searchable: true },
  49. tags: { type: [String], index: true, lowercase: true, trim: true, desc: '标签', searchable: true },
  50. epgs: { type: [String], index: true, trim: true, desc: 'EPG', searchable: true }, // 绑定的epg列表, 初始由user表带过来, 后期可再编辑变更
  51. date: { type: Date, default: Date.now, index: true, desc: '上传时间', orderable: true, },
  52. lastMod: { type: Date, default: Date.now, index: true, desc: '修改时间', orderable: true, },
  53. timeSubmit: { type: Date, index: true, desc: '提测时间', }, //提测时间
  54. timeReady: { type: Date, index: true, desc: '通过时间', }, //通过时间
  55. refuseReason: { type: String, desc: '拒稿原因' },
  56. mark: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '标注' }, // 拒稿和打回修改共用
  57. markImg: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '标注图' }, // 拒稿和打回修改共用
  58. colorMap: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '填色表', },
  59. colorSum: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '颜色统计', },
  60. colorOrder: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '填色顺序', },
  61. orderAuto: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '自动顺序', },
  62. svgv1: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '全矢量化v1', },
  63. svgv2: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '全矢量化v2', },
  64. svgall: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '全矢量化all', },
  65. numberConfig: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '填色标签配置', },
  66. numberConfigv2: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '填色标签配置V2', },
  67. openglMap: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: 'opengl专属Map图', },
  68. config: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: 'config.json', }, // opengl配置
  69. lock: { type: Boolean, default: false, index: true, desc: '是否上锁', },
  70. publishVersion: { type: Number, default: 0, index: true, desc: '发布版本' },
  71. publishTime: { type: Date, index: true, desc: '发布时间', orderable: true, },
  72. publishBy: { type: Schema.Types.ObjectId, ref: 'User', index: true, desc: '发布者' },
  73. order: { type: Number, default: 0, index: true, },
  74. drop: { type: Boolean, default: false, index: true, desc: '标记删除' },
  75. dropReason: { type: String, desc: '删除原因', },
  76. dropBy: { type: Schema.Types.ObjectId, ref: 'User', index: true, desc: '谁标记删除的' },
  77. publishSchedule: { type: Schema.Types.ObjectId, ref: 'PublishSchedule', index: true, desc: '定时发布' },
  78. scheduleToEpg: { type: [String], default: [], desc: '上架计划' }, // 格式: epgId->columnId
  79. score: { type: Number, orderable: true, desc: '评分' }, // 总体评分0-5
  80. //数据库内不存储
  81. thumb: String,
  82. //zip: String,
  83. }, {
  84. strict: true,
  85. toJSON: {
  86. virtuals: true,
  87. transform: artTransform,
  88. },
  89. toObject: {
  90. virtuals: true,
  91. transform: artTransform,
  92. },
  93. });
  94. function artTransform(doc, ret) {
  95. //make thumb for art.
  96. ret.thumb = `${config.resHost}/thumbs/coloring-page/page/320/${doc.pageId}.png?t=${doc.lastMod.getTime()}`;
  97. if (doc.work && doc.hasSpecial) {
  98. ret.thumb = `${config.resHost}/thumbs/coloring-page/special/320/${doc._id}.png?t=${doc.lastMod.getTime()}`;
  99. } else if (doc.work) {
  100. ret.thumb = `${config.resHost}/thumbs/coloring-page/work/320/${doc._id}.png?t=${doc.lastMod.getTime()}`
  101. }
  102. ret.binHash = {
  103. "page": `${config.resHost}/thumbs/coloring-page/page/640/${doc._id}.png?t=${doc.lastMod.getTime()}`,
  104. "work": doc.work ? `${config.resHost}/thumbs/coloring-page/work/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  105. "special": doc.special ? `${config.resHost}/thumbs/coloring-page/special/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  106. "specialThumb": doc.specialThumb ? `${config.resHost}/thumbs/coloring-page/special_thumb/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  107. "specialOutline": doc.specialOutline ? `${config.resHost}/thumbs/coloring-page/special_outline/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  108. "aiImage": doc.aiImage ? `${config.resHost}/thumbs/coloring-page/ai_image/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  109. }
  110. }
  111. artSchema.index({
  112. order: -1,
  113. publishTime: -1
  114. });
  115. module.exports = artSchema;