diff --git a/src/api/choral-membership/content-types/choral-membership/schema.json b/src/api/choral-membership/content-types/choral-membership/schema.json new file mode 100644 index 0000000..ef80730 --- /dev/null +++ b/src/api/choral-membership/content-types/choral-membership/schema.json @@ -0,0 +1,41 @@ +{ + "kind": "collectionType", + "collectionName": "choral_memberships", + "info": { + "singularName": "choral-membership", + "pluralName": "choral-memberships", + "displayName": "ChoralMembership", + "description": "" + }, + "options": { + "draftAndPublish": false + }, + "pluginOptions": {}, + "attributes": { + "user": { + "type": "relation", + "relation": "manyToOne", + "target": "plugin::users-permissions.user", + "inversedBy": "choral_memberships" + }, + "choral": { + "type": "relation", + "relation": "manyToOne", + "target": "api::choral.choral", + "inversedBy": "memberships" + }, + "role": { + "type": "enumeration", + "enum": [ + "member", + "admin", + "owner" + ] + }, + "permissions": { + "type": "component", + "repeatable": true, + "component": "user.permissions" + } + } +} diff --git a/src/api/choral-membership/controllers/choral-membership.ts b/src/api/choral-membership/controllers/choral-membership.ts new file mode 100644 index 0000000..ad3a390 --- /dev/null +++ b/src/api/choral-membership/controllers/choral-membership.ts @@ -0,0 +1,7 @@ +/** + * choral-membership controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::choral-membership.choral-membership'); diff --git a/src/api/choral-membership/routes/choral-membership.ts b/src/api/choral-membership/routes/choral-membership.ts new file mode 100644 index 0000000..0913ce9 --- /dev/null +++ b/src/api/choral-membership/routes/choral-membership.ts @@ -0,0 +1,7 @@ +/** + * choral-membership router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::choral-membership.choral-membership'); diff --git a/src/api/choral-membership/services/choral-membership.ts b/src/api/choral-membership/services/choral-membership.ts new file mode 100644 index 0000000..e65aef6 --- /dev/null +++ b/src/api/choral-membership/services/choral-membership.ts @@ -0,0 +1,7 @@ +/** + * choral-membership service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::choral-membership.choral-membership'); diff --git a/src/api/choral/content-types/choral/schema.json b/src/api/choral/content-types/choral/schema.json index f551f81..2d27b7c 100644 --- a/src/api/choral/content-types/choral/schema.json +++ b/src/api/choral/content-types/choral/schema.json @@ -82,6 +82,12 @@ }, "website": { "type": "string" + }, + "memberships": { + "type": "relation", + "relation": "oneToMany", + "target": "api::choral-membership.choral-membership", + "mappedBy": "choral" } } } diff --git a/src/components/user/permissions.json b/src/components/user/permissions.json index 7a95887..5534061 100644 --- a/src/components/user/permissions.json +++ b/src/components/user/permissions.json @@ -2,7 +2,8 @@ "collectionName": "components_user_permissions", "info": { "displayName": "permissions", - "icon": "key" + "icon": "key", + "description": "" }, "options": {}, "attributes": { @@ -16,13 +17,10 @@ "users" ] }, - "active": { + "canRead": { "type": "boolean" }, - "read": { - "type": "boolean" - }, - "write": { + "canWrite": { "type": "boolean" } } diff --git a/src/extensions/users-permissions/content-types/user/schema.json b/src/extensions/users-permissions/content-types/user/schema.json index 52255d1..0756a80 100644 --- a/src/extensions/users-permissions/content-types/user/schema.json +++ b/src/extensions/users-permissions/content-types/user/schema.json @@ -169,6 +169,12 @@ "relation": "oneToMany", "target": "api::choral-permission.choral-permission", "mappedBy": "user" + }, + "choral_memberships": { + "type": "relation", + "relation": "oneToMany", + "target": "api::choral-membership.choral-membership", + "mappedBy": "user" } } } diff --git a/types/generated/components.d.ts b/types/generated/components.d.ts index 3f64f86..3e705fd 100644 --- a/types/generated/components.d.ts +++ b/types/generated/components.d.ts @@ -3,16 +3,16 @@ import type { Schema, Struct } from '@strapi/strapi'; export interface UserPermissions extends Struct.ComponentSchema { collectionName: 'components_user_permissions'; info: { + description: ''; displayName: 'permissions'; icon: 'key'; }; attributes: { - active: Schema.Attribute.Boolean; + canRead: Schema.Attribute.Boolean; + canWrite: Schema.Attribute.Boolean; module: Schema.Attribute.Enumeration< ['information', 'chat', 'board', 'calendar', 'users'] >; - read: Schema.Attribute.Boolean; - write: Schema.Attribute.Boolean; }; } diff --git a/types/generated/contentTypes.d.ts b/types/generated/contentTypes.d.ts index 3c9b648..99011e3 100644 --- a/types/generated/contentTypes.d.ts +++ b/types/generated/contentTypes.d.ts @@ -475,6 +475,42 @@ export interface ApiBoardBoard extends Struct.CollectionTypeSchema { }; } +export interface ApiChoralMembershipChoralMembership + extends Struct.CollectionTypeSchema { + collectionName: 'choral_memberships'; + info: { + description: ''; + displayName: 'ChoralMembership'; + pluralName: 'choral-memberships'; + singularName: 'choral-membership'; + }; + options: { + draftAndPublish: false; + }; + attributes: { + choral: Schema.Attribute.Relation<'manyToOne', 'api::choral.choral'>; + createdAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String & Schema.Attribute.Private; + localizations: Schema.Attribute.Relation< + 'oneToMany', + 'api::choral-membership.choral-membership' + > & + Schema.Attribute.Private; + permissions: Schema.Attribute.Component<'user.permissions', true>; + publishedAt: Schema.Attribute.DateTime; + role: Schema.Attribute.Enumeration<['member', 'admin', 'owner']>; + updatedAt: Schema.Attribute.DateTime; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + user: Schema.Attribute.Relation< + 'manyToOne', + 'plugin::users-permissions.user' + >; + }; +} + export interface ApiChoralPermissionChoralPermission extends Struct.CollectionTypeSchema { collectionName: 'choral_permissions'; @@ -543,6 +579,10 @@ export interface ApiChoralChoral extends Struct.CollectionTypeSchema { 'api::choral.choral' > & Schema.Attribute.Private; + memberships: Schema.Attribute.Relation< + 'oneToMany', + 'api::choral-membership.choral-membership' + >; name: Schema.Attribute.String; owner: Schema.Attribute.Relation< 'oneToOne', @@ -1093,6 +1133,10 @@ export interface PluginUsersPermissionsUser >; blocked: Schema.Attribute.Boolean & Schema.Attribute.DefaultTo; board: Schema.Attribute.Relation<'oneToOne', 'api::board.board'>; + choral_memberships: Schema.Attribute.Relation< + 'oneToMany', + 'api::choral-membership.choral-membership' + >; choral_permissions: Schema.Attribute.Relation< 'oneToMany', 'api::choral-permission.choral-permission' @@ -1167,6 +1211,7 @@ declare module '@strapi/strapi' { 'api::board-card.board-card': ApiBoardCardBoardCard; 'api::board-list.board-list': ApiBoardListBoardList; 'api::board.board': ApiBoardBoard; + 'api::choral-membership.choral-membership': ApiChoralMembershipChoralMembership; 'api::choral-permission.choral-permission': ApiChoralPermissionChoralPermission; 'api::choral.choral': ApiChoralChoral; 'api::event.event': ApiEventEvent;