summaryrefslogtreecommitdiff
path: root/src/payload/collections/Posts.ts
diff options
context:
space:
mode:
authorBertrand Yuan <bert.yuan@outlook.com>2025-12-16 00:12:49 +0800
committerBertrand Yuan <bert.yuan@outlook.com>2025-12-16 00:12:49 +0800
commit02ae938c238c9d18448d17a8ec92c0edd8c17463 (patch)
treedcd6a30505adb52522b20af2c0ac27f713403f10 /src/payload/collections/Posts.ts
parent48b07bc308a35734a6a7a305c8fdccbfa47de7d8 (diff)
feat(back-end): introduce payload
Payload is the next.js Headless CMS and App Framework, I would like to pick it up and modify it as it is MIT licensed. Many features in Payload is not applicable for our project. So, I modify it so that it is light and clear.
Diffstat (limited to 'src/payload/collections/Posts.ts')
-rw-r--r--src/payload/collections/Posts.ts93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/payload/collections/Posts.ts b/src/payload/collections/Posts.ts
new file mode 100644
index 0000000..6ecf898
--- /dev/null
+++ b/src/payload/collections/Posts.ts
@@ -0,0 +1,93 @@
+import type { CollectionConfig } from 'payload';
+
+export const Posts: CollectionConfig = {
+ slug: 'posts',
+ labels: {
+ singular: 'posts',
+ plural: 'posts',
+ },
+ admin: {
+ useAsTitle: 'title',
+ defaultColumns: ['title', 'status', 'publishedAt', 'updatedAt'],
+ },
+ access: {
+ read: () => true,
+ },
+ fields: [
+ {
+ name: 'title',
+ label: 'title',
+ type: 'text',
+ required: true,
+ },
+ {
+ name: 'slug',
+ label: 'slug',
+ type: 'text',
+ required: true,
+ unique: true,
+ admin: {
+ description: 'example:my-first-post',
+ },
+ },
+ {
+ name: 'description',
+ label: 'description',
+ type: 'textarea',
+ },
+ {
+ name: 'content',
+ label: 'content',
+ type: 'richText',
+ required: true,
+ },
+ {
+ name: 'featuredImage',
+ label: 'image',
+ type: 'upload',
+ relationTo: 'media',
+ },
+ {
+ name: 'author',
+ label: 'author',
+ type: 'text',
+ defaultValue: 'Admin',
+ },
+ {
+ name: 'tags',
+ label: 'tag',
+ type: 'array',
+ fields: [
+ {
+ name: 'tag',
+ label: 'tag',
+ type: 'text',
+ },
+ ],
+ },
+ {
+ name: 'status',
+ label: 'status',
+ type: 'select',
+ defaultValue: 'draft',
+ options: [
+ { label: 'draft', value: 'draft' },
+ { label: 'published', value: 'published' },
+ ],
+ admin: {
+ position: 'sidebar',
+ },
+ },
+ {
+ name: 'publishedAt',
+ label: 'publishedAt',
+ type: 'date',
+ admin: {
+ position: 'sidebar',
+ date: {
+ pickerAppearance: 'dayAndTime',
+ },
+ },
+ },
+ ],
+};