mirror of
https://github.com/strapi/strapi.git
synced 2025-08-13 11:17:42 +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('sanitizers', registries.sanitizers())
|
||||||
.add('validators', registries.validators())
|
.add('validators', registries.validators())
|
||||||
.add('content-api', createContentAPI(this))
|
.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)
|
// Create a mapping of every useful directory (for the app, dist and static directories)
|
||||||
this.dirs = utils.getDirs(rootDirs, { strapi: this });
|
this.dirs = utils.getDirs(rootDirs, { strapi: this });
|
||||||
@ -461,6 +462,8 @@ class Strapi extends Container implements StrapiI {
|
|||||||
async register() {
|
async register() {
|
||||||
await loaders.loadApplicationContext(this);
|
await loaders.loadApplicationContext(this);
|
||||||
|
|
||||||
|
this.get('models').add(coreStoreModel).add(webhookModel);
|
||||||
|
|
||||||
// init webhook runner
|
// init webhook runner
|
||||||
this.webhookRunner = createWebhookRunner({
|
this.webhookRunner = createWebhookRunner({
|
||||||
eventHub: this.eventHub,
|
eventHub: this.eventHub,
|
||||||
@ -481,17 +484,15 @@ class Strapi extends Container implements StrapiI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async bootstrap() {
|
async bootstrap() {
|
||||||
this.db = await Database.init({
|
const models = [
|
||||||
...this.config.get('database'),
|
...utils.transformContentTypesToModels([
|
||||||
models: [
|
...Object.values(this.contentTypes),
|
||||||
...utils.transformContentTypesToModels([
|
...Object.values(this.components),
|
||||||
...Object.values(this.contentTypes),
|
]),
|
||||||
...Object.values(this.components),
|
...this.get('models').get(),
|
||||||
]),
|
];
|
||||||
coreStoreModel,
|
|
||||||
webhookModel,
|
this.db = await Database.init({ ...this.config.get('database'), models });
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
this.store = createCoreStore({ db: this.db });
|
this.store = createCoreStore({ db: this.db });
|
||||||
this.webhookStore = createWebhookStore({ 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 apis } from './apis';
|
||||||
export { default as sanitizers } from './sanitizers';
|
export { default as sanitizers } from './sanitizers';
|
||||||
export { default as validators } from './validators';
|
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 { toString } from 'lodash/fp';
|
||||||
import type { Model, Database } from '@strapi/database';
|
import type { Database, Model } from '@strapi/database';
|
||||||
|
|
||||||
const coreStoreModel: Model = {
|
const coreStoreModel: Model = {
|
||||||
uid: 'strapi::core-store',
|
uid: 'strapi::core-store',
|
||||||
|
@ -10,7 +10,6 @@ import { createConnection } from './connection';
|
|||||||
import * as errors from './errors';
|
import * as errors from './errors';
|
||||||
import { Callback, transactionCtx, TransactionObject } from './transaction-context';
|
import { Callback, transactionCtx, TransactionObject } from './transaction-context';
|
||||||
import { validateDatabase } from './validations';
|
import { validateDatabase } from './validations';
|
||||||
|
|
||||||
import type { Model } from './types';
|
import type { Model } from './types';
|
||||||
|
|
||||||
export { isKnexQuery } from './utils/knex';
|
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)) {
|
for (const model of _.cloneDeep(models)) {
|
||||||
metadata.add({
|
metadata.add({
|
||||||
...model,
|
...model,
|
||||||
attributes: model.attributes,
|
attributes: {
|
||||||
|
...model.attributes,
|
||||||
|
},
|
||||||
lifecycles: model.lifecycles ?? {},
|
lifecycles: model.lifecycles ?? {},
|
||||||
indexes: model.indexes ?? [],
|
indexes: model.indexes ?? [],
|
||||||
foreignKeys: model.foreignKeys ?? [],
|
foreignKeys: model.foreignKeys ?? [],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user