guoziyun преди 1 година
родител
ревизия
257088f2c0
променени са 4 файла, в които са добавени 57 реда и са изтрити 5 реда
  1. 23 0
      models/daily-factory.js
  2. 10 0
      models/schema-daily.js
  3. 20 3
      routes/index.js
  4. 4 2
      views/banner.ejs

+ 23 - 0
models/daily-factory.js

@@ -0,0 +1,23 @@
+const mongoose = require('./mongoose');
+const dailySchema = require('./schema-daily')
+
+class DailyFactory {
+  static models = {};
+
+  constructor() {
+  }
+
+  static async getModel(epgId) {
+    if (!epgId) return null;
+
+    let model = DailyFactory.models[epgId];
+    if (!model) {
+      model = mongoose.model(`Daily-${epgId}`, dailySchema);
+      DailyFactory.models[epgId] = model;
+    }
+    return model;
+  }
+
+}
+
+module.exports = DailyFactory;

+ 10 - 0
models/schema-daily.js

@@ -0,0 +1,10 @@
+var Schema = require('mongoose').Schema;
+
+let dailySchema = new Schema({
+  art: { type: Schema.Types.ObjectId, required: true, index: true, unique: true, ref: 'Art', desc: 'Art Id' },
+  artInfo: { type: Schema.Types.Mixed, defualt: {},  desc: 'Art Doc' }, // art详情嵌入在这里,用Mixed类型更灵活一点
+  dailyDate: { type: Date, index: true, required: true, desc: '每日图时间', orderable: true, },
+});
+
+module.exports = dailySchema;
+

+ 20 - 3
routes/index.js

@@ -9,6 +9,8 @@ const languages = require('../config/language');
 const translate = require('../config/translate');
 const meta = require('../config/meta');
 const utils = require('../libs/utils');
+const DailyFactory = require('../models/daily-factory');
+const datefns = require('date-fns');
 const { format } = require('date-fns');
 const { getListBuilder } = require('../libs/pager');
 
@@ -55,6 +57,22 @@ router.get('/:lang/', function (req, res, next) {
       res.cookie('lang', lang, { maxAge: 900000, httpOnly: true });
     }
 
+    let host = config.cdnHost ?? config.resHost;
+
+    // 今日daily图
+    let todayDoc;
+    let dailyModel = await DailyFactory.getModel('art');
+    let dailydocs = await dailyModel
+      .find({ dailyDate: { $lte: datefns.startOfTomorrow(Date.now()) } })
+      .sort({ dailyDate: 'desc' })
+      .limit(1)
+      .lean()
+      .exec();
+    if (dailydocs && dailydocs.length >= 1) {
+      todayDoc = dailydocs[0];
+      todayDoc.artInfo.thumb = `${host}/thumbs/coloring-page/page/480/${todayDoc.artInfo._id}.jpeg`;
+    }
+
     let baseSort = { publishTime: 'desc' };
 
     // 最新上线
@@ -98,9 +116,6 @@ router.get('/:lang/', function (req, res, next) {
       .lean()
       .exec();
 
-
-    let host = config.cdnHost ?? config.resHost;
-
     for (let doc of albums) {
       doc.icon = `${host}/res/coloring/album_icon/320/${doc._id}.jpeg`;
       doc.cover = `${host}/res/coloring/album_cover/320/${doc._id}.jpeg`;
@@ -148,6 +163,8 @@ router.get('/:lang/', function (req, res, next) {
     let data = {
       title: meta.homePageTile[lang],
       description: meta.homePageDescription[lang],
+      today: datefns.format(Date.now(), 'yyyy-MM-dd'),
+      daily: todayDoc,
       latest,
       recommend,
       special,

+ 4 - 2
views/banner.ejs

@@ -24,12 +24,14 @@
         <h1>
           <%= translate.daily[lang] %>
         </h1>
-        <div style="font-weight: bold; font-size: 20px; color: #aaa; padding-bottom: 20px;">2025/01/19</div>
+        <div style="font-weight: bold; font-size: 20px; color: #aaa; padding-bottom: 20px;">
+          <%= today%>
+        </div>
         <a href="/play/6783978993b021143d362277" class="carousel-play-btn">
           <%= translate.play[lang] %>
         </a>
       </div>
-      <img width="40%" src="https://pcoloring.com/thumbs/coloring-page/page/480/6783978993b021143d362277.jpeg"
+      <img width="40%" src="<%=daily.artInfo.thumb%>"
         alt="<%= translate.daily[lang] %> <%= translate.printableColoringPage[lang]%>"">
     </div>