From 511357bf70730c21bb5b99d5168146854b8c1194 Mon Sep 17 00:00:00 2001 From: South Drifted Date: Mon, 27 Nov 2023 17:07:59 +0000 Subject: [PATCH] [add] Enrollment model & Multiple Text component --- package.json | 2 +- .../content-types/activity/schema.json | 22 ++++++- .../content-types/enrollment/schema.json | 36 +++++++++++ src/api/enrollment/controllers/enrollment.ts | 7 +++ src/api/enrollment/routes/enrollment.ts | 7 +++ src/api/enrollment/services/enrollment.ts | 7 +++ src/components/common/multiple-text.json | 18 ++++++ .../content-types/user/schema.json | 12 ++-- types/generated/components.d.ts | 18 +++++- types/generated/contentTypes.d.ts | 61 +++++++++++++++++++ 10 files changed, 180 insertions(+), 10 deletions(-) create mode 100644 src/api/enrollment/content-types/enrollment/schema.json create mode 100644 src/api/enrollment/controllers/enrollment.ts create mode 100644 src/api/enrollment/routes/enrollment.ts create mode 100644 src/api/enrollment/services/enrollment.ts create mode 100644 src/components/common/multiple-text.json diff --git a/package.json b/package.json index e26b4fc..fdf09c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ohp/web-server", - "version": "0.5.0", + "version": "0.6.0", "private": true, "engines": { "node": ">=18.0.0 <=20.x.x", diff --git a/src/api/activity/content-types/activity/schema.json b/src/api/activity/content-types/activity/schema.json index 2e7bffb..41de166 100644 --- a/src/api/activity/content-types/activity/schema.json +++ b/src/api/activity/content-types/activity/schema.json @@ -68,15 +68,15 @@ "customField": "plugin::ckeditor.CKEditor" }, "banners": { - "allowedTypes": ["images", "videos"], "type": "media", "multiple": true, + "required": true, + "allowedTypes": ["images", "videos"], "pluginOptions": { "i18n": { "localized": true } - }, - "required": true + } }, "status": { "pluginOptions": { @@ -164,6 +164,22 @@ }, "type": "datetime", "required": true + }, + "gitTemplates": { + "type": "component", + "repeatable": true, + "pluginOptions": { + "i18n": { + "localized": false + } + }, + "component": "common.multiple-text" + }, + "enrollments": { + "type": "relation", + "relation": "oneToMany", + "target": "api::enrollment.enrollment", + "mappedBy": "activity" } } } diff --git a/src/api/enrollment/content-types/enrollment/schema.json b/src/api/enrollment/content-types/enrollment/schema.json new file mode 100644 index 0000000..1cb0b4f --- /dev/null +++ b/src/api/enrollment/content-types/enrollment/schema.json @@ -0,0 +1,36 @@ +{ + "kind": "collectionType", + "collectionName": "enrollments", + "info": { + "singularName": "enrollment", + "pluralName": "enrollments", + "displayName": "Enrollment" + }, + "options": { + "draftAndPublish": false + }, + "pluginOptions": {}, + "attributes": { + "activity": { + "type": "relation", + "relation": "manyToOne", + "target": "api::activity.activity", + "inversedBy": "enrollments" + }, + "user": { + "type": "relation", + "relation": "manyToOne", + "target": "plugin::users-permissions.user", + "inversedBy": "enrollments" + }, + "status": { + "type": "enumeration", + "enum": ["none", "pendingApproval", "approved", "rejected"], + "default": "none", + "required": true + }, + "extensions": { + "type": "json" + } + } +} diff --git a/src/api/enrollment/controllers/enrollment.ts b/src/api/enrollment/controllers/enrollment.ts new file mode 100644 index 0000000..ec6e255 --- /dev/null +++ b/src/api/enrollment/controllers/enrollment.ts @@ -0,0 +1,7 @@ +/** + * enrollment controller + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreController('api::enrollment.enrollment'); diff --git a/src/api/enrollment/routes/enrollment.ts b/src/api/enrollment/routes/enrollment.ts new file mode 100644 index 0000000..b567c4f --- /dev/null +++ b/src/api/enrollment/routes/enrollment.ts @@ -0,0 +1,7 @@ +/** + * enrollment router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::enrollment.enrollment'); diff --git a/src/api/enrollment/services/enrollment.ts b/src/api/enrollment/services/enrollment.ts new file mode 100644 index 0000000..c0465e7 --- /dev/null +++ b/src/api/enrollment/services/enrollment.ts @@ -0,0 +1,7 @@ +/** + * enrollment service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::enrollment.enrollment'); diff --git a/src/components/common/multiple-text.json b/src/components/common/multiple-text.json new file mode 100644 index 0000000..54a0c46 --- /dev/null +++ b/src/components/common/multiple-text.json @@ -0,0 +1,18 @@ +{ + "collectionName": "components_common_multiple_texts", + "info": { + "displayName": "Multiple Text", + "icon": "bulletList" + }, + "options": {}, + "attributes": { + "name": { + "type": "string", + "required": true + }, + "icon": { + "type": "customField", + "customField": "plugin::react-icons.icon" + } + } +} diff --git a/src/extensions/users-permissions/content-types/user/schema.json b/src/extensions/users-permissions/content-types/user/schema.json index ce27adb..09088b4 100644 --- a/src/extensions/users-permissions/content-types/user/schema.json +++ b/src/extensions/users-permissions/content-types/user/schema.json @@ -67,11 +67,13 @@ }, "gender": { "type": "enumeration", - "enum": [ - "Female", - "Male", - "Other" - ] + "enum": ["Female", "Male", "Other"] + }, + "enrollments": { + "type": "relation", + "relation": "oneToMany", + "target": "api::enrollment.enrollment", + "mappedBy": "user" } } } diff --git a/types/generated/components.d.ts b/types/generated/components.d.ts index 0cd76b4..1eb6cd2 100644 --- a/types/generated/components.d.ts +++ b/types/generated/components.d.ts @@ -1,5 +1,21 @@ import type { Schema, Attribute } from '@strapi/strapi'; +export interface CommonMultipleText extends Schema.Component { + collectionName: 'components_common_multiple_texts'; + info: { + displayName: 'Multiple Text'; + icon: 'bulletList'; + }; + attributes: { + name: Attribute.String & Attribute.Required; + icon: Attribute.String & Attribute.CustomField<'plugin::react-icons.icon'>; + }; +} + declare module '@strapi/types' { - export module Shared {} + export module Shared { + export interface Components { + 'common.multiple-text': CommonMultipleText; + } + } } diff --git a/types/generated/contentTypes.d.ts b/types/generated/contentTypes.d.ts index 25b1cd2..081e883 100644 --- a/types/generated/contentTypes.d.ts +++ b/types/generated/contentTypes.d.ts @@ -500,6 +500,17 @@ export interface ApiActivityActivity extends Schema.CollectionType { localized: false; }; }>; + gitTemplates: Attribute.Component<'common.multiple-text', true> & + Attribute.SetPluginOptions<{ + i18n: { + localized: false; + }; + }>; + enrollments: Attribute.Relation< + 'api::activity.activity', + 'oneToMany', + 'api::enrollment.enrollment' + >; createdAt: Attribute.DateTime; updatedAt: Attribute.DateTime; publishedAt: Attribute.DateTime; @@ -524,6 +535,50 @@ export interface ApiActivityActivity extends Schema.CollectionType { }; } +export interface ApiEnrollmentEnrollment extends Schema.CollectionType { + collectionName: 'enrollments'; + info: { + singularName: 'enrollment'; + pluralName: 'enrollments'; + displayName: 'Enrollment'; + }; + options: { + draftAndPublish: false; + }; + attributes: { + activity: Attribute.Relation< + 'api::enrollment.enrollment', + 'manyToOne', + 'api::activity.activity' + >; + user: Attribute.Relation< + 'api::enrollment.enrollment', + 'manyToOne', + 'plugin::users-permissions.user' + >; + status: Attribute.Enumeration< + ['none', 'pendingApproval', 'approved', 'rejected'] + > & + Attribute.Required & + Attribute.DefaultTo<'none'>; + extensions: Attribute.JSON; + createdAt: Attribute.DateTime; + updatedAt: Attribute.DateTime; + createdBy: Attribute.Relation< + 'api::enrollment.enrollment', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + updatedBy: Attribute.Relation< + 'api::enrollment.enrollment', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + }; +} + export interface PluginUploadFile extends Schema.CollectionType { collectionName: 'files'; info: { @@ -867,6 +922,11 @@ export interface PluginUsersPermissionsUser extends Schema.CollectionType { 'plugin::users-permissions.role' >; gender: Attribute.Enumeration<['Female', 'Male', 'Other']>; + enrollments: Attribute.Relation< + 'plugin::users-permissions.user', + 'oneToMany', + 'api::enrollment.enrollment' + >; createdAt: Attribute.DateTime; updatedAt: Attribute.DateTime; createdBy: Attribute.Relation< @@ -895,6 +955,7 @@ declare module '@strapi/types' { 'admin::transfer-token': AdminTransferToken; 'admin::transfer-token-permission': AdminTransferTokenPermission; 'api::activity.activity': ApiActivityActivity; + 'api::enrollment.enrollment': ApiEnrollmentEnrollment; 'plugin::upload.file': PluginUploadFile; 'plugin::upload.folder': PluginUploadFolder; 'plugin::react-icons.iconlibrary': PluginReactIconsIconlibrary;