schema-art.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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 meta description, 160个字符以内
  45. desc: { type: String, desc: '作品描述', }, // json字符串,形如: {zh: '中国', en: 'China'}
  46. // 新增字段,网站seo title,60个字符以内
  47. title: { type: String, desc: '作品标题', }, // json字符串,形如: {zh: '中国', en: 'China'}
  48. // 新增字段,小标题
  49. subtitle: { type: String, desc: '小标题', searchable: true }, // json字符串,形如: {zh: '中国', en: 'China'}
  50. // 文案描述, 200字左右
  51. copy: { type: String, desc: '文案描述', searchable: true }, // json字符串,形如: {zh: '中国', en: 'China'}
  52. use: { type: String, required: true, index: true, default: 'normal', lowercase: true, trim: true, desc: '用途', searchable: true },
  53. tags: { type: [String], index: true, lowercase: true, trim: true, desc: '标签', searchable: true },
  54. epgs: { type: [String], index: true, trim: true, desc: 'EPG', searchable: true }, // 绑定的epg列表, 初始由user表带过来, 后期可再编辑变更
  55. date: { type: Date, default: Date.now, index: true, desc: '上传时间', orderable: true, },
  56. lastMod: { type: Date, default: Date.now, index: true, desc: '修改时间', orderable: true, },
  57. timeSubmit: { type: Date, index: true, desc: '提测时间', }, //提测时间
  58. timeReady: { type: Date, index: true, desc: '通过时间', }, //通过时间
  59. refuseReason: { type: String, desc: '拒稿原因' },
  60. mark: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '标注' }, // 拒稿和打回修改共用
  61. markImg: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '标注图' }, // 拒稿和打回修改共用
  62. colorMap: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '填色表', },
  63. colorSum: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '颜色统计', },
  64. colorOrder: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '填色顺序', },
  65. orderAuto: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '自动顺序', },
  66. svgv1: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '全矢量化v1', },
  67. svgv2: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '全矢量化v2', },
  68. svgall: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '全矢量化all', },
  69. numberConfig: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '填色标签配置', },
  70. numberConfigv2: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: '填色标签配置V2', },
  71. openglMap: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: 'opengl专属Map图', },
  72. config: { type: Schema.Types.ObjectId, ref: 'ArtBin', desc: 'config.json', }, // opengl配置
  73. lock: { type: Boolean, default: false, index: true, desc: '是否上锁', },
  74. publishVersion: { type: Number, default: 0, index: true, desc: '发布版本' },
  75. publishTime: { type: Date, index: true, desc: '发布时间', orderable: true, },
  76. publishBy: { type: Schema.Types.ObjectId, ref: 'User', index: true, desc: '发布者' },
  77. order: { type: Number, default: 0, index: true, },
  78. drop: { type: Boolean, default: false, index: true, desc: '标记删除' },
  79. dropReason: { type: String, desc: '删除原因', },
  80. dropBy: { type: Schema.Types.ObjectId, ref: 'User', index: true, desc: '谁标记删除的' },
  81. publishSchedule: { type: Schema.Types.ObjectId, ref: 'PublishSchedule', index: true, desc: '定时发布' },
  82. scheduleToEpg: { type: [String], default: [], desc: '上架计划' }, // 格式: epgId->columnId
  83. score: { type: Number, orderable: true, desc: '评分' }, // 总体评分0-5
  84. //数据库内不存储
  85. thumb: String,
  86. //zip: String,
  87. }, {
  88. strict: true,
  89. toJSON: {
  90. virtuals: true,
  91. transform: artTransform,
  92. },
  93. toObject: {
  94. virtuals: true,
  95. transform: artTransform,
  96. },
  97. });
  98. function artTransform(doc, ret) {
  99. //make thumb for art.
  100. ret.thumb = `${config.resHost}/thumbs/coloring-page/page/320/${doc.pageId}.png?t=${doc.lastMod.getTime()}`;
  101. if (doc.work && doc.hasSpecial) {
  102. ret.thumb = `${config.resHost}/thumbs/coloring-page/special/320/${doc._id}.png?t=${doc.lastMod.getTime()}`;
  103. } else if (doc.work) {
  104. ret.thumb = `${config.resHost}/thumbs/coloring-page/work/320/${doc._id}.png?t=${doc.lastMod.getTime()}`
  105. }
  106. ret.binHash = {
  107. "page": `${config.resHost}/thumbs/coloring-page/page/640/${doc._id}.png?t=${doc.lastMod.getTime()}`,
  108. "work": doc.work ? `${config.resHost}/thumbs/coloring-page/work/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  109. "special": doc.special ? `${config.resHost}/thumbs/coloring-page/special/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  110. "specialThumb": doc.specialThumb ? `${config.resHost}/thumbs/coloring-page/special_thumb/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  111. "specialOutline": doc.specialOutline ? `${config.resHost}/thumbs/coloring-page/special_outline/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  112. "aiImage": doc.aiImage ? `${config.resHost}/thumbs/coloring-page/ai_image/640/${doc._id}.png?t=${doc.lastMod.getTime()}` : undefined,
  113. }
  114. }
  115. artSchema.index({
  116. order: -1,
  117. publishTime: -1
  118. });
  119. module.exports = artSchema;