From c6e271b26e64d30f022343e79e2583469f19ca4e Mon Sep 17 00:00:00 2001 From: consultoria-as Date: Sun, 22 Feb 2026 03:36:47 +0000 Subject: [PATCH] feat: define Game, Documentary, Chapter content types in Strapi Co-Authored-By: Claude Opus 4.6 --- .../chapter/content-types/chapter/schema.json | 58 +++++++++++++ .../src/api/chapter/controllers/chapter.ts | 2 + apps/cms/src/api/chapter/routes/chapter.ts | 2 + apps/cms/src/api/chapter/services/chapter.ts | 2 + .../content-types/documentary/schema.json | 48 +++++++++++ .../documentary/controllers/documentary.ts | 2 + .../src/api/documentary/routes/documentary.ts | 2 + .../api/documentary/services/documentary.ts | 2 + .../api/game/content-types/game/schema.json | 84 +++++++++++++++++++ apps/cms/src/api/game/controllers/game.ts | 2 + apps/cms/src/api/game/routes/game.ts | 2 + apps/cms/src/api/game/services/game.ts | 2 + 12 files changed, 208 insertions(+) create mode 100644 apps/cms/src/api/chapter/content-types/chapter/schema.json create mode 100644 apps/cms/src/api/chapter/controllers/chapter.ts create mode 100644 apps/cms/src/api/chapter/routes/chapter.ts create mode 100644 apps/cms/src/api/chapter/services/chapter.ts create mode 100644 apps/cms/src/api/documentary/content-types/documentary/schema.json create mode 100644 apps/cms/src/api/documentary/controllers/documentary.ts create mode 100644 apps/cms/src/api/documentary/routes/documentary.ts create mode 100644 apps/cms/src/api/documentary/services/documentary.ts create mode 100644 apps/cms/src/api/game/content-types/game/schema.json create mode 100644 apps/cms/src/api/game/controllers/game.ts create mode 100644 apps/cms/src/api/game/routes/game.ts create mode 100644 apps/cms/src/api/game/services/game.ts diff --git a/apps/cms/src/api/chapter/content-types/chapter/schema.json b/apps/cms/src/api/chapter/content-types/chapter/schema.json new file mode 100644 index 0000000..a144dc5 --- /dev/null +++ b/apps/cms/src/api/chapter/content-types/chapter/schema.json @@ -0,0 +1,58 @@ +{ + "kind": "collectionType", + "collectionName": "chapters", + "info": { + "singularName": "chapter", + "pluralName": "chapters", + "displayName": "Chapter", + "description": "A chapter of a documentary" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "attributes": { + "title": { + "type": "string", + "required": true, + "pluginOptions": { + "i18n": { "localized": true } + } + }, + "content": { + "type": "richtext", + "required": true, + "pluginOptions": { + "i18n": { "localized": true } + } + }, + "audioFile": { + "type": "media", + "multiple": false, + "allowedTypes": ["audios"] + }, + "audioDuration": { + "type": "integer" + }, + "order": { + "type": "integer", + "required": true, + "default": 0 + }, + "coverImage": { + "type": "media", + "multiple": false, + "allowedTypes": ["images"] + }, + "documentary": { + "type": "relation", + "relation": "manyToOne", + "target": "api::documentary.documentary", + "inversedBy": "chapters" + } + } +} diff --git a/apps/cms/src/api/chapter/controllers/chapter.ts b/apps/cms/src/api/chapter/controllers/chapter.ts new file mode 100644 index 0000000..41b1907 --- /dev/null +++ b/apps/cms/src/api/chapter/controllers/chapter.ts @@ -0,0 +1,2 @@ +import { factories } from "@strapi/strapi"; +export default factories.createCoreController("api::chapter.chapter"); diff --git a/apps/cms/src/api/chapter/routes/chapter.ts b/apps/cms/src/api/chapter/routes/chapter.ts new file mode 100644 index 0000000..02a2615 --- /dev/null +++ b/apps/cms/src/api/chapter/routes/chapter.ts @@ -0,0 +1,2 @@ +import { factories } from "@strapi/strapi"; +export default factories.createCoreRouter("api::chapter.chapter"); diff --git a/apps/cms/src/api/chapter/services/chapter.ts b/apps/cms/src/api/chapter/services/chapter.ts new file mode 100644 index 0000000..756f275 --- /dev/null +++ b/apps/cms/src/api/chapter/services/chapter.ts @@ -0,0 +1,2 @@ +import { factories } from "@strapi/strapi"; +export default factories.createCoreService("api::chapter.chapter"); diff --git a/apps/cms/src/api/documentary/content-types/documentary/schema.json b/apps/cms/src/api/documentary/content-types/documentary/schema.json new file mode 100644 index 0000000..1eeca44 --- /dev/null +++ b/apps/cms/src/api/documentary/content-types/documentary/schema.json @@ -0,0 +1,48 @@ +{ + "kind": "collectionType", + "collectionName": "documentaries", + "info": { + "singularName": "documentary", + "pluralName": "documentaries", + "displayName": "Documentary", + "description": "Interactive documentary for a game" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "attributes": { + "title": { + "type": "string", + "required": true, + "pluginOptions": { + "i18n": { "localized": true } + } + }, + "description": { + "type": "text", + "pluginOptions": { + "i18n": { "localized": true } + } + }, + "game": { + "type": "relation", + "relation": "oneToOne", + "target": "api::game.game", + "mappedBy": "documentary" + }, + "chapters": { + "type": "relation", + "relation": "oneToMany", + "target": "api::chapter.chapter", + "mappedBy": "documentary" + }, + "publishedAt": { + "type": "datetime" + } + } +} diff --git a/apps/cms/src/api/documentary/controllers/documentary.ts b/apps/cms/src/api/documentary/controllers/documentary.ts new file mode 100644 index 0000000..6b68907 --- /dev/null +++ b/apps/cms/src/api/documentary/controllers/documentary.ts @@ -0,0 +1,2 @@ +import { factories } from "@strapi/strapi"; +export default factories.createCoreController("api::documentary.documentary"); diff --git a/apps/cms/src/api/documentary/routes/documentary.ts b/apps/cms/src/api/documentary/routes/documentary.ts new file mode 100644 index 0000000..4596998 --- /dev/null +++ b/apps/cms/src/api/documentary/routes/documentary.ts @@ -0,0 +1,2 @@ +import { factories } from "@strapi/strapi"; +export default factories.createCoreRouter("api::documentary.documentary"); diff --git a/apps/cms/src/api/documentary/services/documentary.ts b/apps/cms/src/api/documentary/services/documentary.ts new file mode 100644 index 0000000..d25867e --- /dev/null +++ b/apps/cms/src/api/documentary/services/documentary.ts @@ -0,0 +1,2 @@ +import { factories } from "@strapi/strapi"; +export default factories.createCoreService("api::documentary.documentary"); diff --git a/apps/cms/src/api/game/content-types/game/schema.json b/apps/cms/src/api/game/content-types/game/schema.json new file mode 100644 index 0000000..78f9a36 --- /dev/null +++ b/apps/cms/src/api/game/content-types/game/schema.json @@ -0,0 +1,84 @@ +{ + "kind": "collectionType", + "collectionName": "games", + "info": { + "singularName": "game", + "pluralName": "games", + "displayName": "Game", + "description": "A preserved online game" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "attributes": { + "title": { + "type": "string", + "required": true, + "pluginOptions": { + "i18n": { "localized": true } + } + }, + "slug": { + "type": "uid", + "targetField": "title", + "required": true + }, + "description": { + "type": "richtext", + "pluginOptions": { + "i18n": { "localized": true } + } + }, + "genre": { + "type": "enumeration", + "enum": ["MMORPG", "FPS", "Casual", "Strategy", "Sports", "Other"], + "required": true + }, + "releaseYear": { + "type": "integer", + "required": true + }, + "shutdownYear": { + "type": "integer", + "required": true + }, + "developer": { + "type": "string", + "required": true + }, + "publisher": { + "type": "string" + }, + "screenshots": { + "type": "media", + "multiple": true, + "allowedTypes": ["images"] + }, + "coverImage": { + "type": "media", + "multiple": false, + "required": true, + "allowedTypes": ["images"] + }, + "serverStatus": { + "type": "enumeration", + "enum": ["online", "maintenance", "coming_soon"], + "default": "coming_soon", + "required": true + }, + "serverLink": { + "type": "string" + }, + "documentary": { + "type": "relation", + "relation": "oneToOne", + "target": "api::documentary.documentary", + "inversedBy": "game" + } + } +} diff --git a/apps/cms/src/api/game/controllers/game.ts b/apps/cms/src/api/game/controllers/game.ts new file mode 100644 index 0000000..2682a57 --- /dev/null +++ b/apps/cms/src/api/game/controllers/game.ts @@ -0,0 +1,2 @@ +import { factories } from "@strapi/strapi"; +export default factories.createCoreController("api::game.game"); diff --git a/apps/cms/src/api/game/routes/game.ts b/apps/cms/src/api/game/routes/game.ts new file mode 100644 index 0000000..e2479da --- /dev/null +++ b/apps/cms/src/api/game/routes/game.ts @@ -0,0 +1,2 @@ +import { factories } from "@strapi/strapi"; +export default factories.createCoreRouter("api::game.game"); diff --git a/apps/cms/src/api/game/services/game.ts b/apps/cms/src/api/game/services/game.ts new file mode 100644 index 0000000..a544d3e --- /dev/null +++ b/apps/cms/src/api/game/services/game.ts @@ -0,0 +1,2 @@ +import { factories } from "@strapi/strapi"; +export default factories.createCoreService("api::game.game");