From 91d6b8ca44e93ed9255d48a818a79b6fc6c4eed9 Mon Sep 17 00:00:00 2001 From: Marc-Roig Date: Mon, 6 Nov 2023 10:05:06 +0100 Subject: [PATCH] feat: move the document id schema insertion into strapi/strapi --- packages/core/database/package.json | 1 - packages/core/database/src/metadata/index.ts | 7 ------- packages/core/database/src/types/index.ts | 4 ---- packages/core/strapi/package.json | 1 + .../utils/transform-content-types-to-models.ts | 15 ++++++++++++++- yarn.lock | 2 +- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/core/database/package.json b/packages/core/database/package.json index 3d5b65dab6..e80a682443 100644 --- a/packages/core/database/package.json +++ b/packages/core/database/package.json @@ -40,7 +40,6 @@ "watch": "pack-up watch" }, "dependencies": { - "@paralleldrive/cuid2": "2.2.2", "@strapi/utils": "4.14.5", "date-fns": "2.30.0", "debug": "4.3.4", diff --git a/packages/core/database/src/metadata/index.ts b/packages/core/database/src/metadata/index.ts index de55084a34..c6306ab1e8 100644 --- a/packages/core/database/src/metadata/index.ts +++ b/packages/core/database/src/metadata/index.ts @@ -1,5 +1,4 @@ import _ from 'lodash/fp'; -import { createId } from '@paralleldrive/cuid2'; import * as types from '../utils/types'; import { @@ -41,18 +40,12 @@ export const createMetadata = (models: Model[] = []): Metadata => { throw new Error('The attribute "id" is reserved and cannot be used in a model'); } - const documentIdAttribute: Meta['attributes'] = - model.modelType === 'contentType' - ? { documentId: { type: 'string', default: createId } } - : {}; - metadata.add({ ...model, attributes: { id: { type: 'increments', }, - ...documentIdAttribute, ...model.attributes, }, lifecycles: model.lifecycles ?? {}, diff --git a/packages/core/database/src/types/index.ts b/packages/core/database/src/types/index.ts index 15de62972e..664892248d 100644 --- a/packages/core/database/src/types/index.ts +++ b/packages/core/database/src/types/index.ts @@ -223,8 +223,4 @@ export interface Model { indexes?: Index[]; foreignKeys?: ForeignKey[]; lifecycles?: Partial>; - // TODO: remove these once we add documentId outside the DB layer - options?: Record; - modelName?: string; - modelType?: 'contentType' | 'component'; } diff --git a/packages/core/strapi/package.json b/packages/core/strapi/package.json index ed4eb65692..ce1158751d 100644 --- a/packages/core/strapi/package.json +++ b/packages/core/strapi/package.json @@ -87,6 +87,7 @@ "dependencies": { "@koa/cors": "3.4.3", "@koa/router": "10.1.1", + "@paralleldrive/cuid2": "2.2.2", "@strapi/admin": "4.14.5", "@strapi/data-transfer": "4.14.5", "@strapi/database": "4.14.5", diff --git a/packages/core/strapi/src/utils/transform-content-types-to-models.ts b/packages/core/strapi/src/utils/transform-content-types-to-models.ts index 198628e8c7..dd261b84eb 100644 --- a/packages/core/strapi/src/utils/transform-content-types-to-models.ts +++ b/packages/core/strapi/src/utils/transform-content-types-to-models.ts @@ -1,5 +1,6 @@ import { DatabaseConfig } from '@strapi/database'; import { Schema, Attribute } from '@strapi/types'; +import { createId } from '@paralleldrive/cuid2'; const transformAttribute = (attribute: Attribute.Any) => { switch (attribute.type) { @@ -18,15 +19,27 @@ const transformAttribute = (attribute: Attribute.Any) => { }; export const transformContentTypesToModels = ( - contentTypes: Pick[] + contentTypes: Pick< + Schema.ContentType, + 'uid' | 'modelName' | 'collectionName' | 'attributes' | 'modelType' + >[] ): DatabaseConfig['models'] => { return contentTypes.map((contentType) => { + // Add document id to content types + // @ts-expect-error - `default` function is not typed into `Attribute` + // as it is not documented + const documentIdAttribute: Record = + contentType.modelType === 'contentType' + ? { documentId: { type: 'string', default: createId } } + : {}; + const model = { ...contentType, // reuse new model def singularName: contentType.modelName, tableName: contentType.collectionName!, attributes: { + ...documentIdAttribute, ...Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => { return Object.assign(attrs, { [attrName]: transformAttribute(contentType.attributes[attrName]!), diff --git a/yarn.lock b/yarn.lock index 9b25a610ea..3d998cfcb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7739,7 +7739,6 @@ __metadata: version: 0.0.0-use.local resolution: "@strapi/database@workspace:packages/core/database" dependencies: - "@paralleldrive/cuid2": "npm:2.2.2" "@strapi/pack-up": "workspace:*" "@strapi/utils": "npm:4.14.5" date-fns: "npm:2.30.0" @@ -8470,6 +8469,7 @@ __metadata: dependencies: "@koa/cors": "npm:3.4.3" "@koa/router": "npm:10.1.1" + "@paralleldrive/cuid2": "npm:2.2.2" "@strapi/admin": "npm:4.14.5" "@strapi/data-transfer": "npm:4.14.5" "@strapi/database": "npm:4.14.5"