Skip to content

Commit 4c12c8c

Browse files
committed
feat: 添加数据引擎合同和请求协议的模式定义,支持多种操作的请求格式
1 parent e0d233c commit 4c12c8c

1 file changed

Lines changed: 134 additions & 2 deletions

File tree

packages/spec/src/data/data-engine.zod.ts

Lines changed: 134 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,139 @@ export const DataEngineCountOptionsSchema = z.object({
161161
}).describe('Options for DataEngine.count operations');
162162

163163
// ==========================================================================
164-
// 8. Type Exports
164+
// 8. Definition (Contract)
165+
// ==========================================================================
166+
167+
export const DataEngineContractSchema = z.object({
168+
find: z.function()
169+
.args(z.string(), DataEngineQueryOptionsSchema.optional())
170+
.returns(z.promise(z.array(z.any()))),
171+
172+
findOne: z.function()
173+
.args(z.string(), DataEngineQueryOptionsSchema.optional())
174+
.returns(z.promise(z.any())),
175+
176+
insert: z.function()
177+
.args(z.string(), z.union([z.record(z.any()), z.array(z.record(z.any()))]), DataEngineInsertOptionsSchema.optional())
178+
.returns(z.promise(z.any())),
179+
180+
update: z.function()
181+
.args(z.string(), z.record(z.any()), DataEngineUpdateOptionsSchema.optional())
182+
.returns(z.promise(z.any())),
183+
184+
delete: z.function()
185+
.args(z.string(), DataEngineDeleteOptionsSchema.optional())
186+
.returns(z.promise(z.any())),
187+
188+
count: z.function()
189+
.args(z.string(), DataEngineCountOptionsSchema.optional())
190+
.returns(z.promise(z.number())),
191+
192+
aggregate: z.function()
193+
.args(z.string(), DataEngineAggregateOptionsSchema)
194+
.returns(z.promise(z.array(z.any())))
195+
}).describe('Standard Data Engine Contract');
196+
197+
// ==========================================================================
198+
// 9. Virtualization & RPC Protocol
199+
// ==========================================================================
200+
201+
/**
202+
* Data Engine RPC Request (Virtual ObjectQL)
203+
*
204+
* This schema defines the serialized format for executing Data Engine operations
205+
* via HTTP, Message Queue, or Plugin boundaries.
206+
*
207+
* It enables "Virtual Data Engines" where the implementation resides in a
208+
* separate microservice or plugin.
209+
*/
210+
211+
export const DataEngineFindRequestSchema = z.object({
212+
method: z.literal('find'),
213+
object: z.string(),
214+
query: DataEngineQueryOptionsSchema.optional()
215+
});
216+
217+
export const DataEngineFindOneRequestSchema = z.object({
218+
method: z.literal('findOne'),
219+
object: z.string(),
220+
query: DataEngineQueryOptionsSchema.optional()
221+
});
222+
223+
export const DataEngineInsertRequestSchema = z.object({
224+
method: z.literal('insert'),
225+
object: z.string(),
226+
data: z.union([z.record(z.any()), z.array(z.record(z.any()))]),
227+
options: DataEngineInsertOptionsSchema.optional()
228+
});
229+
230+
export const DataEngineUpdateRequestSchema = z.object({
231+
method: z.literal('update'),
232+
object: z.string(),
233+
data: z.record(z.any()),
234+
id: z.any().optional().describe('ID for single update, or use filter in options'),
235+
options: DataEngineUpdateOptionsSchema.optional()
236+
});
237+
238+
export const DataEngineDeleteRequestSchema = z.object({
239+
method: z.literal('delete'),
240+
object: z.string(),
241+
id: z.any().optional().describe('ID for single delete, or use filter in options'),
242+
options: DataEngineDeleteOptionsSchema.optional()
243+
});
244+
245+
export const DataEngineCountRequestSchema = z.object({
246+
method: z.literal('count'),
247+
object: z.string(),
248+
query: DataEngineCountOptionsSchema.optional()
249+
});
250+
251+
export const DataEngineAggregateRequestSchema = z.object({
252+
method: z.literal('aggregate'),
253+
object: z.string(),
254+
query: DataEngineAggregateOptionsSchema
255+
});
256+
257+
/**
258+
* Data Engine Batch Request
259+
* Execute multiple operations in a single transaction/request efficiently.
260+
*/
261+
export const DataEngineBatchRequestSchema = z.object({
262+
method: z.literal('batch'),
263+
requests: z.array(z.discriminatedUnion('method', [
264+
DataEngineFindRequestSchema,
265+
DataEngineFindOneRequestSchema,
266+
DataEngineInsertRequestSchema,
267+
DataEngineUpdateRequestSchema,
268+
DataEngineDeleteRequestSchema,
269+
DataEngineCountRequestSchema,
270+
DataEngineAggregateRequestSchema
271+
])),
272+
/**
273+
* Transaction Mode
274+
* - true: All or nothing (Atomic)
275+
* - false: Best effort, continue on error
276+
*/
277+
transaction: z.boolean().default(true).optional()
278+
});
279+
280+
/**
281+
* Unified Data Engine Request Union
282+
* Use this to validate any incoming "Virtual ObjectQL" request.
283+
*/
284+
export const DataEngineRequestSchema = z.discriminatedUnion('method', [
285+
DataEngineFindRequestSchema,
286+
DataEngineFindOneRequestSchema,
287+
DataEngineInsertRequestSchema,
288+
DataEngineUpdateRequestSchema,
289+
DataEngineDeleteRequestSchema,
290+
DataEngineCountRequestSchema,
291+
DataEngineAggregateRequestSchema,
292+
DataEngineBatchRequestSchema
293+
]).describe('Virtual ObjectQL Request Protocol');
294+
295+
// ==========================================================================
296+
// 10. Type Exports
165297
// ==========================================================================
166298

167299
export type DataEngineFilter = z.infer<typeof DataEngineFilterSchema>;
@@ -172,4 +304,4 @@ export type DataEngineUpdateOptions = z.infer<typeof DataEngineUpdateOptionsSche
172304
export type DataEngineDeleteOptions = z.infer<typeof DataEngineDeleteOptionsSchema>;
173305
export type DataEngineAggregateOptions = z.infer<typeof DataEngineAggregateOptionsSchema>;
174306
export type DataEngineCountOptions = z.infer<typeof DataEngineCountOptionsSchema>;
175-
307+
export type DataEngineRequest = z.infer<typeof DataEngineRequestSchema>;

0 commit comments

Comments
 (0)