فهرست منبع

Add blog API with router, controller, and service; update cron task for publishing drafts

kai-zong 8 ماه پیش
والد
کامیت
791bfd4447

+ 15 - 6
config/cron-tasks.ts

@@ -2,18 +2,27 @@ module.exports = {
   checkPublish: {
     task: async ({ strapi }) => {
       const now = new Date();
-      const entries = await strapi.documents('api::test-txt.test-txt').findMany({
-        filters: { publish_at: { $lte: now }, publishedAt: null },
+      const drafts = await strapi.documents('api::blog.blog').findMany({
+        filters: { 
+          publish_at: { $lte: now },
+          isNewVersion: true 
+        },
         status: 'draft',
       });
-      for (const entry of entries) {
-        await strapi.documents('api::test-txt.test-txt').publish({
-          documentId: entry.documentId,
+      for (const draft of drafts) {
+        console.log('Publishing entry:', draft.documentId);
+        await strapi.documents('api::blog.blog').update({
+          documentId: draft.documentId,
+          data: { isNewVersion: false },
+          status: 'draft',
+        });
+        await strapi.documents('api::blog.blog').publish({
+          documentId: draft.documentId,
         });
       }
     },
     options: {
-      rule: '* * * * *', // Runs every minute
+      rule: '* * * * *',
     },
   },
 };

+ 34 - 0
src/api/blog/content-types/blog/schema.json

@@ -0,0 +1,34 @@
+{
+  "kind": "collectionType",
+  "collectionName": "blogs",
+  "info": {
+    "singularName": "blog",
+    "pluralName": "blogs",
+    "displayName": "blog",
+    "description": ""
+  },
+  "options": {
+    "draftAndPublish": true
+  },
+  "attributes": {
+    "title": {
+      "type": "string"
+    },
+    "idk": {
+      "type": "blocks"
+    },
+    "publish_at": {
+      "type": "datetime"
+    },
+    "ckeditor": {
+      "type": "customField",
+      "options": {
+        "preset": "defaultHtml"
+      },
+      "customField": "plugin::ckeditor5.CKEditor"
+    },
+    "isNewVersion": {
+      "type": "boolean"
+    }
+  }
+}

+ 7 - 0
src/api/blog/controllers/blog.ts

@@ -0,0 +1,7 @@
+/**
+ * blog controller
+ */
+
+import { factories } from '@strapi/strapi'
+
+export default factories.createCoreController('api::blog.blog');

+ 7 - 0
src/api/blog/routes/blog.ts

@@ -0,0 +1,7 @@
+/**
+ * blog router
+ */
+
+import { factories } from '@strapi/strapi';
+
+export default factories.createCoreRouter('api::blog.blog');

+ 7 - 0
src/api/blog/services/blog.ts

@@ -0,0 +1,7 @@
+/**
+ * blog service
+ */
+
+import { factories } from '@strapi/strapi';
+
+export default factories.createCoreService('api::blog.blog');

+ 37 - 0
types/generated/contentTypes.d.ts

@@ -470,6 +470,42 @@ export interface ApiAuthorAuthor extends Struct.CollectionTypeSchema {
   };
 }
 
+export interface ApiBlogBlog extends Struct.CollectionTypeSchema {
+  collectionName: 'blogs';
+  info: {
+    description: '';
+    displayName: 'blog';
+    pluralName: 'blogs';
+    singularName: 'blog';
+  };
+  options: {
+    draftAndPublish: true;
+  };
+  attributes: {
+    ckeditor: Schema.Attribute.RichText &
+      Schema.Attribute.CustomField<
+        'plugin::ckeditor5.CKEditor',
+        {
+          preset: 'defaultHtml';
+        }
+      >;
+    createdAt: Schema.Attribute.DateTime;
+    createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
+      Schema.Attribute.Private;
+    idk: Schema.Attribute.Blocks;
+    isNewVersion: Schema.Attribute.Boolean;
+    locale: Schema.Attribute.String & Schema.Attribute.Private;
+    localizations: Schema.Attribute.Relation<'oneToMany', 'api::blog.blog'> &
+      Schema.Attribute.Private;
+    publish_at: Schema.Attribute.DateTime;
+    publishedAt: Schema.Attribute.DateTime;
+    title: Schema.Attribute.String;
+    updatedAt: Schema.Attribute.DateTime;
+    updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
+      Schema.Attribute.Private;
+  };
+}
+
 export interface ApiCategoryCategory extends Struct.CollectionTypeSchema {
   collectionName: 'categories';
   info: {
@@ -1082,6 +1118,7 @@ declare module '@strapi/strapi' {
       'api::about.about': ApiAboutAbout;
       'api::article.article': ApiArticleArticle;
       'api::author.author': ApiAuthorAuthor;
+      'api::blog.blog': ApiBlogBlog;
       'api::category.category': ApiCategoryCategory;
       'api::global.global': ApiGlobalGlobal;
       'api::test-txt.test-txt': ApiTestTxtTestTxt;