mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-31 09:56:44 +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'), |  | ||||||
|       models: [ |  | ||||||
|       ...utils.transformContentTypesToModels([ |       ...utils.transformContentTypesToModels([ | ||||||
|         ...Object.values(this.contentTypes), |         ...Object.values(this.contentTypes), | ||||||
|         ...Object.values(this.components), |         ...Object.values(this.components), | ||||||
|       ]), |       ]), | ||||||
|         coreStoreModel, |       ...this.get('models').get(), | ||||||
|         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
	 Alexandre BODIN
						Alexandre BODIN