schema-art.js 7.0 KB

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