Jelajahi Sumber

增加内容控制

guoziyun 1 tahun lalu
induk
melakukan
1f5e95736d

+ 3 - 3
config/translate.js

@@ -425,9 +425,9 @@ let mayYouLike = {
 
 let worksCount = {
   zh: '作品数',
-  en: 'Works Count',
-  es: 'Cantidad de obras',
-  pt: 'Quantidade de obras',
+  en: 'Works',
+  es: 'Obras',
+  pt: 'Obras',
   ja: '作品の数',
 }
 

+ 1 - 0
models/schema-art.js

@@ -2,6 +2,7 @@ var Schema = require('mongoose').Schema;
 const config = require('../config/app');
 
 let artSchema = new Schema({
+  open: { type: Boolean, default: false, index: true, desc: '是否开放' }, // 针对网站新增的字段,控制内容逐步开放
 
   status: { type: Number, required: true, index: true, orderable: true, default: 1000, desc: '状态' },
   pageId: { type: Schema.Types.ObjectId, required: true, desc: 'Page Id' }, //old modes.Page._id

+ 12 - 12
routes/index.js

@@ -77,7 +77,7 @@ router.get('/:lang/', function (req, res, next) {
 
     // 最新上线
     let latest = await models.Art
-      .find({ status: 9000 })
+      .find({ open: true, status: 9000 })
       .select(artSelect)
       .sort(baseSort)
       .limit(12)
@@ -87,7 +87,7 @@ router.get('/:lang/', function (req, res, next) {
 
     // 热门精选
     let recommend = await models.Art
-      .find({ tags: 'data_good', status: 9000 })
+      .find({ open: true, tags: 'data_good', status: 9000 })
       .select(artSelect)
       .sort(baseSort)
       .limit(12)
@@ -97,7 +97,7 @@ router.get('/:lang/', function (req, res, next) {
 
     // special 专区
     let special = await models.Art
-      .find({ hasSpecial: true, status: 9000 })
+      .find({ open: true, hasSpecial: true, status: 9000 })
       .select(artSelect)
       .sort(baseSort)
       .limit(12)
@@ -127,7 +127,7 @@ router.get('/:lang/', function (req, res, next) {
     // 设计师
     let designers = await models.Art.aggregate([
       // 首先,过滤出 status = 9000 的文档
-      { $match: { status: 9000 } },
+      { $match: { open: true, status: 9000 } },
 
       // 首先,根据 user 字段进行分组,并计算每个 user 出现的次数
       { $group: { _id: '$user', count: { $sum: 1 } } },
@@ -199,7 +199,7 @@ router.get('/:lang/category/:tag?', function (req, res, next) {
       length: req.query.length,
       orderBy: 'publishTime',
       order: 'desc',
-      base: { status: 9000 },
+      base: { open: true, status: 9000 },
       filters: tag == 'latest' ? {} : { tags: tag },
     }
 
@@ -245,7 +245,7 @@ router.get('/:lang/tag/:tag?', function (req, res, next) {
       search: req.query.search,
       orderBy: 'publishTime',
       order: 'desc',
-      base: { status: 9000 },
+      base: { open: true, status: 9000 },
       filters: tag == 'latest' ? {} : { tags: tag },
     }
 
@@ -293,7 +293,7 @@ router.get('/:lang/search', function (req, res, next) {
       search: req.query.search,
       orderBy: 'publishTime',
       order: 'desc',
-      base: { status: 9000 },
+      base: { open: true, status: 9000 },
       filters: {},
     }
 
@@ -337,7 +337,7 @@ router.get('/:lang/special', function (req, res, next) {
       length: req.query.length,
       orderBy: 'publishTime',
       order: 'desc',
-      base: { status: 9000 },
+      base: { open: true, status: 9000 },
       filters: { hasSpecial: true },
     }
 
@@ -467,7 +467,7 @@ router.get('/:lang/designers', function (req, res, next) {
 
     let docs = await models.Art.aggregate([
       // 首先,过滤出 status = 9000 的文档
-      { $match: { status: 9000 } },
+      { $match: { open: true, status: 9000 } },
 
       // 首先,根据 user 字段进行分组,并计算每个 user 出现的次数
       { $group: { _id: '$user', count: { $sum: 1 } } },
@@ -545,7 +545,7 @@ router.get('/:lang/designer/:id', function (req, res, next) {
       search: req.query.search,
       orderBy: 'publishTime',
       order: 'desc',
-      base: { status: 9000 },
+      base: { open: true, status: 9000 },
       filters: { user: id },
     }
 
@@ -622,7 +622,7 @@ router.get('/:lang/coloring-page/:str', function (req, res, next) {
       search: req.query.search,
       orderBy: 'publishTime',
       order: 'desc',
-      base: { status: 9000 },
+      base: { open: true, status: 9000 },
       filters: { tags },
     }
 
@@ -686,7 +686,7 @@ router.get('/:lang/detail/:id', function (req, res, next) {
       search: req.query.search,
       orderBy: 'publishTime',
       order: 'desc',
-      base: { status: 9000 },
+      base: { open: true, status: 9000 },
       filters: { tags },
     }
 

+ 3 - 2
service/cron-jobs/index.js

@@ -1,8 +1,9 @@
 const cron = require('node-cron');
 
 const settings = [
-  ['sync', '0 0 * * *', require('../../sync/sync-service')],  // 每天同步一次
-  ['fetch-meta', '10 0 * * *', require('./fetch-meta')],  // 每天跑一次,ai自动生成标题和文案
+  ['sync', '0 8 * * *', require('../../sync/sync-service')],  // 每天早上8点同步一次
+  ['fetch-meta', '10 8 * * *', require('./fetch-meta')],  // 每天早上8点10分跑一次,跟在sync同步之后,ai自动生成标题和文案
+  ['open-art', '0 10 * * *', require('./open-art')],  // 每天早上10点跑一次,开放部分内容
 ]
 
 

+ 40 - 0
service/cron-jobs/open-art.js

@@ -0,0 +1,40 @@
+/**
+ * 每天运行一次,每次放开100条记录
+ */
+
+const models = require('../../models');
+
+const openCount = 100; // 每天开放的内容量
+
+async function run() {
+  let done = 0;
+  let duration = 0;
+  let hour, minute, second;
+  let start = Date.now();
+
+  let docs = await models.Art.find({ open: false }).sort({ lastMod: 1 }).limit(openCount);
+
+  let total = docs.length;
+  console.log('total:', total);
+
+  for (let doc of docs) {
+    doc.open = true;
+    await doc.save();
+
+    done++;
+    duration = (Date.now() - start) / 1000;
+    hour = (Math.floor(duration / 60 / 60)).toString().padStart(2, '0');
+    minute = (Math.floor(duration / 60) % 60).toString().padStart(2, '0');
+    second = (Math.floor(duration) % 60).toString().padStart(2, '0');
+
+    console.log('progress: ' + Math.floor((100 * done / total)) + '% used time: ' + hour + ':' + minute + ':' + second);
+
+  }
+}
+
+module.exports = { run }
+
+
+if (require.main == module) {
+  run();
+}

+ 0 - 67
test/language.html

@@ -1,67 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-  <meta charset="UTF-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <title>Custom Language Selector</title>
-  <style>
-    /* 简单的样式使下拉菜单看起来更好 */
-    .language-selector {
-      display: inline-block;
-      position: relative;
-    }
-
-    .language-selector select {
-      padding: 5px 10px;
-      border: 1px solid #ccc;
-      border-radius: 4px;
-      appearance: none;
-      -webkit-appearance: none;
-      /* Safari and Chrome */
-      -moz-appearance: none;
-      /* Firefox */
-    }
-
-    .language-selector::after {
-      content: '\25BC';
-      /* 下拉箭头 */
-      position: absolute;
-      top: 50%;
-      right: 10px;
-      transform: translateY(-50%);
-      pointer-events: none;
-    }
-  </style>
-</head>
-
-<body>
-  <h1>Select Your Language</h1>
-  <div class="language-selector">
-    <form id="languageForm" action="/set-language" method="post">
-      <select name="language_code" onchange="submitLanguageForm()">
-        <option value="en" selected>English</option>
-        <option value="zh-CN">中文 (简体)</option>
-        <option value="fr">Français</option>
-        <option value="es">Español</option>
-        <!-- 添加更多语言选项 -->
-      </select>
-      <!-- 隐藏的输入字段用于存储当前URI,可以通过JavaScript动态设置 -->
-      <input type="hidden" name="current_uri" id="currentUri" value="">
-    </form>
-  </div>
-
-  <script>
-    // 页面加载时设置当前URI
-    window.onload = function () {
-      document.getElementById('currentUri').value = window.location.href;
-    };
-
-    // 当用户选择语言时提交表单
-    function submitLanguageForm() {
-      document.getElementById('languageForm').submit();
-    }
-  </script>
-</body>
-
-</html>

File diff ditekan karena terlalu besar
+ 0 - 2377
test/meta.html


File diff ditekan karena terlalu besar
+ 0 - 421
test/meta2.html


+ 37 - 0
tools/init-art-open.js

@@ -0,0 +1,37 @@
+const models = require('../models');
+
+const firstOpenCount = 2000; // 初始开放2000个内容
+
+async function init() {
+  let done = 0;
+  let duration = 0;
+  let hour, minute, second;
+  let start = Date.now();
+
+  let docs = await models.Art.find().sort({ lastMod: 1 });
+
+  let total = docs.length;
+  console.log('total:', total);
+
+  for (let doc of docs) {
+    if (done >= firstOpenCount) doc.open = false;
+    else doc.open = true;
+    await doc.save();
+
+    done++;
+    duration = (Date.now() - start) / 1000;
+    hour = (Math.floor(duration / 60 / 60)).toString().padStart(2, '0');
+    minute = (Math.floor(duration / 60) % 60).toString().padStart(2, '0');
+    second = (Math.floor(duration) % 60).toString().padStart(2, '0');
+
+    console.log('progress: ' + Math.floor((100 * done / total)) + '% used time: ' + hour + ':' + minute + ':' + second);
+
+  }
+}
+
+module.exports = { init }
+
+
+if (require.main == module) {
+  init();
+}

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini