diff options
Diffstat (limited to 'src/collections')
| -rw-r--r-- | src/collections/Articles.ts | 99 | ||||
| -rw-r--r-- | src/collections/Media.ts | 34 | ||||
| -rw-r--r-- | src/collections/Services.ts | 51 | ||||
| -rw-r--r-- | src/collections/Testimonials.ts | 42 | ||||
| -rw-r--r-- | src/collections/Users.ts | 40 |
5 files changed, 266 insertions, 0 deletions
diff --git a/src/collections/Articles.ts b/src/collections/Articles.ts new file mode 100644 index 0000000..abe03ee --- /dev/null +++ b/src/collections/Articles.ts @@ -0,0 +1,99 @@ +import type { CollectionConfig } from "payload"; + +export const Articles: CollectionConfig = { + slug: "articles", + admin: { + useAsTitle: "title", + defaultColumns: ["title", "category", "status", "publishedAt"], + }, + access: { + read: ({ req: { user } }) => { + if (user) return true; + return { status: { equals: "published" } }; + }, + create: ({ req: { user } }) => + user?.role === "admin" || user?.role === "editor", + update: ({ req: { user } }) => + user?.role === "admin" || user?.role === "editor", + delete: ({ req: { user } }) => user?.role === "admin", + }, + fields: [ + { + name: "title", + type: "text", + required: true, + }, + { + name: "slug", + type: "text", + required: true, + unique: true, + admin: { + position: "sidebar", + }, + }, + { + name: "excerpt", + type: "textarea", + required: true, + maxLength: 300, + }, + { + name: "category", + type: "select", + required: true, + options: [ + { label: "OIDC / OAuth", value: "oidc-oauth" }, + { label: "Zero Trust", value: "zero-trust" }, + { label: "Active Directory", value: "active-directory" }, + { label: "Entra ID", value: "entra-id" }, + { label: "Keycloak", value: "keycloak" }, + { label: "Sécurité Générale", value: "security-general" }, + { label: "DevSecOps", value: "devsecops" }, + ], + }, + { + name: "content", + type: "richText", + required: true, + }, + { + name: "coverImage", + type: "upload", + relationTo: "media", + }, + { + name: "status", + type: "select", + required: true, + defaultValue: "draft", + options: [ + { label: "Brouillon", value: "draft" }, + { label: "Publié", value: "published" }, + ], + admin: { + position: "sidebar", + }, + }, + { + name: "publishedAt", + type: "date", + admin: { + position: "sidebar", + date: { + pickerAppearance: "dayAndTime", + }, + }, + }, + { + name: "tags", + type: "array", + fields: [ + { + name: "tag", + type: "text", + }, + ], + }, + ], +}; diff --git a/src/collections/Media.ts b/src/collections/Media.ts new file mode 100644 index 0000000..19cba0c --- /dev/null +++ b/src/collections/Media.ts @@ -0,0 +1,34 @@ +import type { CollectionConfig } from "payload"; + +export const Media: CollectionConfig = { + slug: "media", + admin: { + useAsTitle: "alt", + }, + access: { + read: () => true, + create: ({ req: { user } }) => !!user, + update: ({ req: { user } }) => !!user, + delete: ({ req: { user } }) => user?.role === "admin", + }, + upload: { + mimeTypes: ["image/*", "application/pdf"], + staticDir: "media", + imageSizes: [ + { name: "thumbnail", width: 300, height: 300, position: "centre" }, + { name: "card", width: 768, height: 432, position: "centre" }, + { name: "hero", width: 1920, height: 1080, position: "centre" }, + ], + }, + fields: [ + { + name: "alt", + type: "text", + required: true, + }, + { + name: "caption", + type: "text", + }, + ], +}; diff --git a/src/collections/Services.ts b/src/collections/Services.ts new file mode 100644 index 0000000..923e650 --- /dev/null +++ b/src/collections/Services.ts @@ -0,0 +1,51 @@ +import type { CollectionConfig } from "payload"; + +export const Services: CollectionConfig = { + slug: "services", + admin: { + useAsTitle: "title", + }, + access: { + read: () => true, + create: ({ req: { user } }) => user?.role === "admin", + update: ({ req: { user } }) => user?.role === "admin", + delete: ({ req: { user } }) => user?.role === "admin", + }, + fields: [ + { + name: "title", + type: "text", + required: true, + }, + { + name: "slug", + type: "text", + required: true, + unique: true, + }, + { + name: "description", + type: "textarea", + required: true, + }, + { + name: "icon", + type: "text", + admin: { + description: "Nom de l'icône Lucide (ex: shield, key, lock)", + }, + }, + { + name: "details", + type: "richText", + }, + { + name: "order", + type: "number", + defaultValue: 0, + admin: { + position: "sidebar", + }, + }, + ], +}; diff --git a/src/collections/Testimonials.ts b/src/collections/Testimonials.ts new file mode 100644 index 0000000..3c5d532 --- /dev/null +++ b/src/collections/Testimonials.ts @@ -0,0 +1,42 @@ +import type { CollectionConfig } from "payload"; + +export const Testimonials: CollectionConfig = { + slug: "testimonials", + admin: { + useAsTitle: "clientName", + }, + access: { + read: () => true, + create: ({ req: { user } }) => user?.role === "admin", + update: ({ req: { user } }) => user?.role === "admin", + delete: ({ req: { user } }) => user?.role === "admin", + }, + fields: [ + { + name: "clientName", + type: "text", + required: true, + }, + { + name: "company", + type: "text", + }, + { + name: "role", + type: "text", + }, + { + name: "quote", + type: "textarea", + required: true, + }, + { + name: "featured", + type: "checkbox", + defaultValue: false, + admin: { + position: "sidebar", + }, + }, + ], +}; diff --git a/src/collections/Users.ts b/src/collections/Users.ts new file mode 100644 index 0000000..e7489ac --- /dev/null +++ b/src/collections/Users.ts @@ -0,0 +1,40 @@ +import type { CollectionConfig } from "payload"; + +export const Users: CollectionConfig = { + slug: "users", + admin: { + useAsTitle: "email", + }, + auth: true, + access: { + read: ({ req: { user } }) => !!user, + create: ({ req: { user } }) => user?.role === "admin", + update: ({ req: { user }, id }) => + user?.role === "admin" || user?.id === id, + delete: ({ req: { user } }) => user?.role === "admin", + }, + fields: [ + { + name: "role", + type: "select", + required: true, + defaultValue: "viewer", + options: [ + { label: "Admin", value: "admin" }, + { label: "Editor", value: "editor" }, + { label: "Viewer", value: "viewer" }, + ], + access: { + update: ({ req: { user } }) => user?.role === "admin", + }, + }, + { + name: "firstName", + type: "text", + }, + { + name: "lastName", + type: "text", + }, + ], +}; |
