@common-stack/store-mongo 7.1.1-alpha.38 → 7.1.1-alpha.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -63,6 +63,15 @@ const BaseServiceMixin = (service, broker, name, events = defaultEvents) => ({
|
|
|
63
63
|
},
|
|
64
64
|
handler: async (ctx) => service.get({ id: ctx.params.id }),
|
|
65
65
|
},
|
|
66
|
+
/**
|
|
67
|
+
* Get multiple documents by their IDs
|
|
68
|
+
*/
|
|
69
|
+
[BaseServiceCommands.GetByIds]: {
|
|
70
|
+
params: {
|
|
71
|
+
ids: 'string',
|
|
72
|
+
},
|
|
73
|
+
handler: async (ctx) => service.getByIds(ctx.params.ids),
|
|
74
|
+
},
|
|
66
75
|
/**
|
|
67
76
|
* Count documents matching criteria
|
|
68
77
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseServiceMixin.js","sources":["../../src/mixins/BaseServiceMixin.ts"],"sourcesContent":["/**\n * @file BaseServiceMixin.ts\n * @description Provides a mixin function that adds standardized service methods to Moleculer service schemas.\n * This mixin implements the IBaseService interface and connects it to Moleculer's service framework,\n * creating action handlers for all standard service operations.\n *\n * The mixin pattern allows for composable service functionality, where multiple mixins can be combined\n * to create feature-rich services without code duplication. This particular mixin handles the core CRUD\n * operations and emits events when data changes.\n *\n * Key features:\n * - Automatic action creation for all IBaseService methods\n * - Event emission for data changes (create, update, delete)\n * - Parameter validation for all actions\n * - Consistent error handling\n * - Type safety through generics\n *\n * @see IBaseService - The interface this mixin implements\n * @see IBaseMongoRepository - The repository interface used for data access\n */\n\n/* eslint-disable import/no-extraneous-dependencies */\nimport { Context, ServiceBroker, ServiceSchema } from 'moleculer';\nimport { Document, FilterQuery } from 'mongoose';\nimport { upperFirst } from 'lodash-es';\nimport { GetAllArgs, IBaseService, BaseServiceCommands } from 'common';\n\n/**\n * Default events that will trigger event emissions when data changes\n * Services can customize this list to control which operations emit events\n */\nconst defaultEvents = [\n BaseServiceCommands.Create,\n BaseServiceCommands.BulkCreate,\n BaseServiceCommands.Update,\n BaseServiceCommands.Delete,\n BaseServiceCommands.DeleteMany,\n];\n\n/**\n * Creates a mixin that implements the IBaseService interface as Moleculer actions\n *\n * @param service - Implementation of IBaseService that will handle the actual business logic\n * @param broker - Moleculer service broker for event emission\n * @param name - Service name used for event naming\n * @param events - List of operations that should emit events\n * @returns A partial ServiceSchema that can be merged with other service definitions\n *\n * @example\n * // Create a user service with the base service mixin\n * const UserService: ServiceSchema = {\n * name: \"users\",\n * mixins: [\n * BaseServiceMixin(userService, broker, \"users\")\n * ],\n * // Additional service-specific actions and methods\n * actions: {\n * changePassword: { ... }\n * }\n * };\n */\nexport const BaseServiceMixin = <T>(\n service: IBaseService<T>,\n broker?: ServiceBroker,\n name?: string,\n events = defaultEvents,\n): Partial<ServiceSchema> => ({\n name: 'BaseServiceMixin',\n actions: {\n /**\n * Get a single document by ID\n */\n [BaseServiceCommands.Get]: {\n params: {\n id: 'string',\n },\n handler: async (ctx: Context<{ id: string }>) =>\n service.get({ id: ctx.params.id } as FilterQuery<Document<T>>),\n },\n\n /**\n * Count documents matching criteria\n */\n [BaseServiceCommands.Count]: {\n params: {\n criteria: { type: 'object', optional: true },\n },\n handler: async (ctx: Context<{ criteria?: FilterQuery<Document<T>> }>) =>\n service.count(ctx.params.criteria),\n },\n\n /**\n * Create multiple documents\n */\n [BaseServiceCommands.BulkCreate]: {\n params: {\n data: { type: 'array', items: 'object' },\n },\n handler: async (ctx: Context<{ data: never[] }>) => {\n const response = await service.bulkCreate(ctx.params.data);\n if (events.includes(BaseServiceCommands.BulkCreate)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.BulkCreate)}`, response);\n }\n return response;\n },\n },\n\n /**\n * Create a single document\n */\n [BaseServiceCommands.Create]: {\n params: {\n data: 'object',\n },\n handler: async (ctx: Context<{ data: never }>) => {\n const response = await service.create(ctx.params.data);\n if (events.includes(BaseServiceCommands.Create)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.Create)}`, response);\n }\n return response;\n },\n },\n\n /**\n * Delete a document by ID\n */\n [BaseServiceCommands.Delete]: {\n params: {\n id: 'string',\n },\n handler: async (ctx: Context<{ id: string }>) => {\n const { id } = ctx.params;\n const response = await service.delete({ id } as FilterQuery<Document<T>>);\n if (events.includes(BaseServiceCommands.Delete)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.Delete)}`, { id });\n }\n return response;\n },\n },\n\n /**\n * Get documents with pagination\n */\n [BaseServiceCommands.GetAll]: {\n params: {\n criteria: 'object|optional',\n sort: 'object|optional',\n skip: 'number|optional',\n limit: 'number|optional',\n selectedFields: 'string|optional',\n },\n handler: async (ctx: Context<GetAllArgs<Document<T>>>) => service.getAll(ctx.params),\n },\n\n /**\n * Get documents with pagination and total count\n */\n [BaseServiceCommands.GetAllWithCount]: {\n params: {\n criteria: 'object|optional',\n sort: 'object|optional',\n skip: 'number|optional',\n limit: 'number|optional',\n selectedFields: 'string|optional',\n },\n handler: async (ctx: Context<GetAllArgs<Document<T>>>) => service.getAllWithCount(ctx.params),\n },\n\n /**\n * Create or update a document\n */\n [BaseServiceCommands.Insert]: {\n params: {\n data: 'object',\n overwrite: 'boolean|optional',\n },\n handler: async (ctx: Context<{ data: never & { id?: string }; overwrite: boolean }>) => {\n const { data } = ctx.params;\n const response = await service.insert(data, ctx.params.overwrite);\n const action = (data as { id: string })?.id ? BaseServiceCommands.Update : BaseServiceCommands.Create;\n if (events.includes(action)) {\n await broker?.emit(`${name}.on${upperFirst(action)}`, response);\n }\n return response;\n },\n },\n\n /**\n * Update a document by ID\n */\n [BaseServiceCommands.Update]: {\n params: {\n id: 'string',\n data: 'object',\n overwrite: 'boolean|optional',\n },\n handler: async (ctx: Context<{ id: string; data: never; overwrite: boolean }>) => {\n const response = await service.update(ctx.params.id, ctx.params.data, ctx.params.overwrite);\n if (events.includes(BaseServiceCommands.Update)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.Update)}`, response);\n }\n return response;\n },\n },\n\n /**\n * Delete multiple documents matching criteria\n */\n [BaseServiceCommands.DeleteMany]: {\n params: {\n criteria: 'object',\n },\n handler: async (ctx: Context<{ criteria: FilterQuery<Document<T>> }>) => {\n const { criteria } = ctx.params;\n const response = await service.delete(criteria);\n if (events.includes(BaseServiceCommands.DeleteMany)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.DeleteMany)}`, criteria);\n }\n return response;\n },\n },\n },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseServiceMixin.js","sources":["../../src/mixins/BaseServiceMixin.ts"],"sourcesContent":["/**\n * @file BaseServiceMixin.ts\n * @description Provides a mixin function that adds standardized service methods to Moleculer service schemas.\n * This mixin implements the IBaseService interface and connects it to Moleculer's service framework,\n * creating action handlers for all standard service operations.\n *\n * The mixin pattern allows for composable service functionality, where multiple mixins can be combined\n * to create feature-rich services without code duplication. This particular mixin handles the core CRUD\n * operations and emits events when data changes.\n *\n * Key features:\n * - Automatic action creation for all IBaseService methods\n * - Event emission for data changes (create, update, delete)\n * - Parameter validation for all actions\n * - Consistent error handling\n * - Type safety through generics\n *\n * @see IBaseService - The interface this mixin implements\n * @see IBaseMongoRepository - The repository interface used for data access\n */\n\n/* eslint-disable import/no-extraneous-dependencies */\nimport { Context, ServiceBroker, ServiceSchema } from 'moleculer';\nimport { Document, FilterQuery } from 'mongoose';\nimport { upperFirst } from 'lodash-es';\nimport { GetAllArgs, IBaseService, BaseServiceCommands } from 'common';\n\n/**\n * Default events that will trigger event emissions when data changes\n * Services can customize this list to control which operations emit events\n */\nconst defaultEvents = [\n BaseServiceCommands.Create,\n BaseServiceCommands.BulkCreate,\n BaseServiceCommands.Update,\n BaseServiceCommands.Delete,\n BaseServiceCommands.DeleteMany,\n];\n\n/**\n * Creates a mixin that implements the IBaseService interface as Moleculer actions\n *\n * @param service - Implementation of IBaseService that will handle the actual business logic\n * @param broker - Moleculer service broker for event emission\n * @param name - Service name used for event naming\n * @param events - List of operations that should emit events\n * @returns A partial ServiceSchema that can be merged with other service definitions\n *\n * @example\n * // Create a user service with the base service mixin\n * const UserService: ServiceSchema = {\n * name: \"users\",\n * mixins: [\n * BaseServiceMixin(userService, broker, \"users\")\n * ],\n * // Additional service-specific actions and methods\n * actions: {\n * changePassword: { ... }\n * }\n * };\n */\nexport const BaseServiceMixin = <T>(\n service: IBaseService<T>,\n broker?: ServiceBroker,\n name?: string,\n events = defaultEvents,\n): Partial<ServiceSchema> => ({\n name: 'BaseServiceMixin',\n actions: {\n /**\n * Get a single document by ID\n */\n [BaseServiceCommands.Get]: {\n params: {\n id: 'string',\n },\n handler: async (ctx: Context<{ id: string }>) =>\n service.get({ id: ctx.params.id } as FilterQuery<Document<T>>),\n },\n\n /**\n * Get multiple documents by their IDs\n */\n [BaseServiceCommands.GetByIds]: {\n params: {\n ids: 'string',\n },\n handler: async (ctx: Context<{ ids: string[] }>) => service.getByIds(ctx.params.ids),\n },\n\n /**\n * Count documents matching criteria\n */\n [BaseServiceCommands.Count]: {\n params: {\n criteria: { type: 'object', optional: true },\n },\n handler: async (ctx: Context<{ criteria?: FilterQuery<Document<T>> }>) =>\n service.count(ctx.params.criteria),\n },\n\n /**\n * Create multiple documents\n */\n [BaseServiceCommands.BulkCreate]: {\n params: {\n data: { type: 'array', items: 'object' },\n },\n handler: async (ctx: Context<{ data: never[] }>) => {\n const response = await service.bulkCreate(ctx.params.data);\n if (events.includes(BaseServiceCommands.BulkCreate)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.BulkCreate)}`, response);\n }\n return response;\n },\n },\n\n /**\n * Create a single document\n */\n [BaseServiceCommands.Create]: {\n params: {\n data: 'object',\n },\n handler: async (ctx: Context<{ data: never }>) => {\n const response = await service.create(ctx.params.data);\n if (events.includes(BaseServiceCommands.Create)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.Create)}`, response);\n }\n return response;\n },\n },\n\n /**\n * Delete a document by ID\n */\n [BaseServiceCommands.Delete]: {\n params: {\n id: 'string',\n },\n handler: async (ctx: Context<{ id: string }>) => {\n const { id } = ctx.params;\n const response = await service.delete({ id } as FilterQuery<Document<T>>);\n if (events.includes(BaseServiceCommands.Delete)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.Delete)}`, { id });\n }\n return response;\n },\n },\n\n /**\n * Get documents with pagination\n */\n [BaseServiceCommands.GetAll]: {\n params: {\n criteria: 'object|optional',\n sort: 'object|optional',\n skip: 'number|optional',\n limit: 'number|optional',\n selectedFields: 'string|optional',\n },\n handler: async (ctx: Context<GetAllArgs<Document<T>>>) => service.getAll(ctx.params),\n },\n\n /**\n * Get documents with pagination and total count\n */\n [BaseServiceCommands.GetAllWithCount]: {\n params: {\n criteria: 'object|optional',\n sort: 'object|optional',\n skip: 'number|optional',\n limit: 'number|optional',\n selectedFields: 'string|optional',\n },\n handler: async (ctx: Context<GetAllArgs<Document<T>>>) => service.getAllWithCount(ctx.params),\n },\n\n /**\n * Create or update a document\n */\n [BaseServiceCommands.Insert]: {\n params: {\n data: 'object',\n overwrite: 'boolean|optional',\n },\n handler: async (ctx: Context<{ data: never & { id?: string }; overwrite: boolean }>) => {\n const { data } = ctx.params;\n const response = await service.insert(data, ctx.params.overwrite);\n const action = (data as { id: string })?.id ? BaseServiceCommands.Update : BaseServiceCommands.Create;\n if (events.includes(action)) {\n await broker?.emit(`${name}.on${upperFirst(action)}`, response);\n }\n return response;\n },\n },\n\n /**\n * Update a document by ID\n */\n [BaseServiceCommands.Update]: {\n params: {\n id: 'string',\n data: 'object',\n overwrite: 'boolean|optional',\n },\n handler: async (ctx: Context<{ id: string; data: never; overwrite: boolean }>) => {\n const response = await service.update(ctx.params.id, ctx.params.data, ctx.params.overwrite);\n if (events.includes(BaseServiceCommands.Update)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.Update)}`, response);\n }\n return response;\n },\n },\n\n /**\n * Delete multiple documents matching criteria\n */\n [BaseServiceCommands.DeleteMany]: {\n params: {\n criteria: 'object',\n },\n handler: async (ctx: Context<{ criteria: FilterQuery<Document<T>> }>) => {\n const { criteria } = ctx.params;\n const response = await service.delete(criteria);\n if (events.includes(BaseServiceCommands.DeleteMany)) {\n await broker?.emit(`${name}.on${upperFirst(BaseServiceCommands.DeleteMany)}`, criteria);\n }\n return response;\n },\n },\n },\n});\n"],"names":[],"mappings":"4EAAA;;;;;;;;;;;;;;;;;;;AAmBG;AAQH;;;AAGG;AACH,MAAM,aAAa,GAAG;AAClB,IAAA,mBAAmB,CAAC,MAAM;AAC1B,IAAA,mBAAmB,CAAC,UAAU;AAC9B,IAAA,mBAAmB,CAAC,MAAM;AAC1B,IAAA,mBAAmB,CAAC,MAAM;AAC1B,IAAA,mBAAmB,CAAC,UAAU;CACjC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;AAqBG;AACU,MAAA,gBAAgB,GAAG,CAC5B,OAAwB,EACxB,MAAsB,EACtB,IAAa,EACb,MAAM,GAAG,aAAa,MACI;AAC1B,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,OAAO,EAAE;AACL;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,GAAG,GAAG;AACvB,YAAA,MAAM,EAAE;AACJ,gBAAA,EAAE,EAAE,QAAQ;AACf,aAAA;YACD,OAAO,EAAE,OAAO,GAA4B,KACxC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAA8B,CAAC;AACrE,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,QAAQ,GAAG;AAC5B,YAAA,MAAM,EAAE;AACJ,gBAAA,GAAG,EAAE,QAAQ;AAChB,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAA+B,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AACvF,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,KAAK,GAAG;AACzB,YAAA,MAAM,EAAE;gBACJ,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC/C,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAAqD,KACjE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;AACzC,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,UAAU,GAAG;AAC9B,YAAA,MAAM,EAAE;gBACJ,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC3C,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAA+B,KAAI;AAC/C,gBAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3D,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE;AACjD,oBAAA,MAAM,MAAM,EAAE,IAAI,CAAC,CAAA,EAAG,IAAI,CAAM,GAAA,EAAA,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;iBAC3F;AACD,gBAAA,OAAO,QAAQ,CAAC;aACnB;AACJ,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC1B,YAAA,MAAM,EAAE;AACJ,gBAAA,IAAI,EAAE,QAAQ;AACjB,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAA6B,KAAI;AAC7C,gBAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvD,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AAC7C,oBAAA,MAAM,MAAM,EAAE,IAAI,CAAC,CAAA,EAAG,IAAI,CAAM,GAAA,EAAA,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;iBACvF;AACD,gBAAA,OAAO,QAAQ,CAAC;aACnB;AACJ,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC1B,YAAA,MAAM,EAAE;AACJ,gBAAA,EAAE,EAAE,QAAQ;AACf,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAA4B,KAAI;AAC5C,gBAAA,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;gBAC1B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAA8B,CAAC,CAAC;gBAC1E,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AAC7C,oBAAA,MAAM,MAAM,EAAE,IAAI,CAAC,CAAG,EAAA,IAAI,MAAM,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAE,CAAA,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;iBACrF;AACD,gBAAA,OAAO,QAAQ,CAAC;aACnB;AACJ,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC1B,YAAA,MAAM,EAAE;AACJ,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,cAAc,EAAE,iBAAiB;AACpC,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAAqC,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AACvF,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,eAAe,GAAG;AACnC,YAAA,MAAM,EAAE;AACJ,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,cAAc,EAAE,iBAAiB;AACpC,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAAqC,KAAK,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AAChG,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC1B,YAAA,MAAM,EAAE;AACJ,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,kBAAkB;AAChC,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAAmE,KAAI;AACnF,gBAAA,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;AAC5B,gBAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAClE,gBAAA,MAAM,MAAM,GAAI,IAAuB,EAAE,EAAE,GAAG,mBAAmB,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC;AACtG,gBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACzB,oBAAA,MAAM,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAA,GAAA,EAAM,UAAU,CAAC,MAAM,CAAC,CAAA,CAAE,EAAE,QAAQ,CAAC,CAAC;iBACnE;AACD,gBAAA,OAAO,QAAQ,CAAC;aACnB;AACJ,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,MAAM,GAAG;AAC1B,YAAA,MAAM,EAAE;AACJ,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,kBAAkB;AAChC,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAA6D,KAAI;gBAC7E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5F,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AAC7C,oBAAA,MAAM,MAAM,EAAE,IAAI,CAAC,CAAA,EAAG,IAAI,CAAM,GAAA,EAAA,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;iBACvF;AACD,gBAAA,OAAO,QAAQ,CAAC;aACnB;AACJ,SAAA;AAED;;AAEG;AACH,QAAA,CAAC,mBAAmB,CAAC,UAAU,GAAG;AAC9B,YAAA,MAAM,EAAE;AACJ,gBAAA,QAAQ,EAAE,QAAQ;AACrB,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,GAAoD,KAAI;AACpE,gBAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;gBAChC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAChD,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE;AACjD,oBAAA,MAAM,MAAM,EAAE,IAAI,CAAC,CAAA,EAAG,IAAI,CAAM,GAAA,EAAA,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;iBAC3F;AACD,gBAAA,OAAO,QAAQ,CAAC;aACnB;AACJ,SAAA;AACJ,KAAA;AACJ,CAAA"}
|
|
@@ -38,7 +38,6 @@ import { BaseServiceCommands } from 'common';
|
|
|
38
38
|
import { IBaseService } from './IBaseService';
|
|
39
39
|
import { CreateType, UpdateType } from './dbCommonTypes';
|
|
40
40
|
|
|
41
|
-
|
|
42
41
|
/**
|
|
43
42
|
* Interface for the BaseServiceMixin function
|
|
44
43
|
* This function creates a Moleculer service mixin that implements the IBaseService interface
|
|
@@ -115,6 +114,19 @@ export interface IBaseServiceMixinActions {
|
|
|
115
114
|
};
|
|
116
115
|
};
|
|
117
116
|
|
|
117
|
+
/**
|
|
118
|
+
* Get multiple documents by their IDs
|
|
119
|
+
*
|
|
120
|
+
* This action retrieves multiple entities by their unique identifiers.
|
|
121
|
+
* It maps to the IBaseService.getByIds method and handles parameter validation.
|
|
122
|
+
* Useful for retrieving a specific set of entities in a single operation.
|
|
123
|
+
*/
|
|
124
|
+
[BaseServiceCommands.GetByIds]: {
|
|
125
|
+
params: {
|
|
126
|
+
ids: string[];
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
|
|
118
130
|
/**
|
|
119
131
|
* Count documents matching criteria
|
|
120
132
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@common-stack/store-mongo",
|
|
3
|
-
"version": "7.1.1-alpha.
|
|
3
|
+
"version": "7.1.1-alpha.41",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"./${libDir}/templates/repositories/IBaseMongoRepository.ts.template",
|
|
49
49
|
"./${libDir}/templates/repositories/IBaseService.ts.template",
|
|
50
50
|
"./${libDir}/templates/repositories/IBaseServiceMixin.ts.template",
|
|
51
|
-
"./${libDir}/templates/repositories/
|
|
51
|
+
"./${libDir}/templates/repositories/DataLoader.ts.template",
|
|
52
52
|
"./${libDir}/templates/repositories/mongoCommonTypes.ts.template",
|
|
53
53
|
"./${libDir}/templates/repositories/dbCommonTypes.ts.template",
|
|
54
54
|
"./${libDir}/templates/repositories/DatabaseMigration.ts.template"
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"typescript": {
|
|
59
59
|
"definition": "lib/index.d.ts"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "47a256f262ed9dd2e75f5c86012c650bc488c595"
|
|
62
62
|
}
|
|
File without changes
|