mirror of
https://github.com/strapi/strapi.git
synced 2025-08-11 02:07:51 +00:00
Merge pull request #19342 from strapi/v5/model-api
chore: add a simple model registry
This commit is contained in:
commit
8bd5584d87
@ -198,7 +198,8 @@ class Strapi extends Container implements StrapiI {
|
||||
.add('sanitizers', registries.sanitizers())
|
||||
.add('validators', registries.validators())
|
||||
.add('content-api', createContentAPI(this))
|
||||
.add('auth', createAuth());
|
||||
.add('auth', createAuth())
|
||||
.add('models', registries.models());
|
||||
|
||||
// Create a mapping of every useful directory (for the app, dist and static directories)
|
||||
this.dirs = utils.getDirs(rootDirs, { strapi: this });
|
||||
@ -461,6 +462,8 @@ class Strapi extends Container implements StrapiI {
|
||||
async register() {
|
||||
await loaders.loadApplicationContext(this);
|
||||
|
||||
this.get('models').add(coreStoreModel).add(webhookModel);
|
||||
|
||||
// init webhook runner
|
||||
this.webhookRunner = createWebhookRunner({
|
||||
eventHub: this.eventHub,
|
||||
@ -481,17 +484,15 @@ class Strapi extends Container implements StrapiI {
|
||||
}
|
||||
|
||||
async bootstrap() {
|
||||
this.db = await Database.init({
|
||||
...this.config.get('database'),
|
||||
models: [
|
||||
...utils.transformContentTypesToModels([
|
||||
...Object.values(this.contentTypes),
|
||||
...Object.values(this.components),
|
||||
]),
|
||||
coreStoreModel,
|
||||
webhookModel,
|
||||
],
|
||||
});
|
||||
const models = [
|
||||
...utils.transformContentTypesToModels([
|
||||
...Object.values(this.contentTypes),
|
||||
...Object.values(this.components),
|
||||
]),
|
||||
...this.get('models').get(),
|
||||
];
|
||||
|
||||
this.db = await Database.init({ ...this.config.get('database'), models });
|
||||
|
||||
this.store = createCoreStore({ db: this.db });
|
||||
this.webhookStore = createWebhookStore({ db: this.db });
|
||||
|
@ -12,3 +12,4 @@ export { default as config } from './config';
|
||||
export { default as apis } from './apis';
|
||||
export { default as sanitizers } from './sanitizers';
|
||||
export { default as validators } from './validators';
|
||||
export { registry as models } from './models';
|
||||
|
16
packages/core/core/src/registries/models.ts
Normal file
16
packages/core/core/src/registries/models.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { Model } from '@strapi/database';
|
||||
|
||||
export const registry = () => {
|
||||
const models: Model[] = [];
|
||||
|
||||
return {
|
||||
add(model: Model) {
|
||||
models.push(model);
|
||||
return this;
|
||||
},
|
||||
|
||||
get() {
|
||||
return models;
|
||||
},
|
||||
};
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
import { toString } from 'lodash/fp';
|
||||
import type { Model, Database } from '@strapi/database';
|
||||
import type { Database, Model } from '@strapi/database';
|
||||
|
||||
const coreStoreModel: Model = {
|
||||
uid: 'strapi::core-store',
|
||||
|
@ -10,7 +10,6 @@ import { createConnection } from './connection';
|
||||
import * as errors from './errors';
|
||||
import { Callback, transactionCtx, TransactionObject } from './transaction-context';
|
||||
import { validateDatabase } from './validations';
|
||||
|
||||
import type { Model } from './types';
|
||||
|
||||
export { isKnexQuery } from './utils/knex';
|
||||
@ -169,4 +168,5 @@ class Database {
|
||||
}
|
||||
}
|
||||
|
||||
export { Database, errors, Model };
|
||||
export { Database, errors };
|
||||
export type { Model };
|
||||
|
@ -38,7 +38,9 @@ export const createMetadata = (models: Model[] = []): Metadata => {
|
||||
for (const model of _.cloneDeep(models)) {
|
||||
metadata.add({
|
||||
...model,
|
||||
attributes: model.attributes,
|
||||
attributes: {
|
||||
...model.attributes,
|
||||
},
|
||||
lifecycles: model.lifecycles ?? {},
|
||||
indexes: model.indexes ?? [],
|
||||
foreignKeys: model.foreignKeys ?? [],
|
||||
|
Loading…
x
Reference in New Issue
Block a user