diff --git a/.cool-saas-candidate.json b/.cool-saas-candidate.json new file mode 100644 index 0000000..17cc509 --- /dev/null +++ b/.cool-saas-candidate.json @@ -0,0 +1,8 @@ +{ + "moduleCode": "order", + "candidateVersion": "1.0.0-rc.1", + "buildRevision": 1, + "buildChecksum": "5cf032fdac2b0403fbcad8b44b326a29141ba556bbbb9710ac9329b5d7c031dd", + "schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23", + "branchName": "release/1.0.0-rc.1" +} diff --git a/src/saas/generated/index.ts b/src/saas/generated/index.ts new file mode 100644 index 0000000..4a42ee0 --- /dev/null +++ b/src/saas/generated/index.ts @@ -0,0 +1 @@ +export * from './order'; diff --git a/src/saas/generated/order/contracts.ts b/src/saas/generated/order/contracts.ts new file mode 100644 index 0000000..8947b2f --- /dev/null +++ b/src/saas/generated/order/contracts.ts @@ -0,0 +1,1176 @@ +// Generated by cool saas-model generate. DO NOT EDIT. +import { + defineSaasAction, + defineSaasEvent, + defineSaasEventHandler, + defineSaasCrud +} from '@cool-midway/module-runtime'; +import type { SaasCrudAfterChange, SaasCrudBeforeChange, SaasEventEnvelope } from '@cool-midway/module-runtime'; + +export type OrdersAddInput = { + amount: string; + goods_id: string; + order_no: string; + quantity: number; + status?: string; + unit_price: string; +}; + +export type OrdersAddOutput = { + amount: string; + goods_id: string; + id: string; + order_no: string; + quantity: number; + status: string; + unit_price: string; +}; + +export type OrdersCancelOrderInput = { + id: number; +}; + +export type OrdersCancelOrderOutput = { + id: number; + restoredStock: number; + status: string; +}; + +export type OrdersCreateOrderInput = { + goodsId: number; + orderNo: string; + quantity: number; +}; + +export type OrdersCreateOrderOutput = { + amount: number; + id: number; + orderNo: string; + status: string; +}; + +export type OrdersDeleteInput = { + id: string; +}; + +export type OrdersDeleteOutput = { + affected: number; +}; + +export type OrdersDetailWithGoodsInput = { + id: number; +}; + +export type OrdersDetailWithGoodsOutput = { + goods: Record; + order: Record; +}; + +export type OrdersInfoInput = { + id: string; +}; + +export type OrdersInfoOutput = { + amount: string; + goods_id: string; + id: string; + order_no: string; + quantity: number; + status: string; + unit_price: string; +}; + +export type OrdersListInput = { + keyword?: string; + order?: { + direction: "asc" | "desc"; + field: "id" | "order_no" | "goods_id" | "quantity" | "unit_price" | "amount" | "status"; + }; + take?: number; + where?: { + amount?: string; + goods_id?: string; + id?: string; + order_no?: string; + quantity?: number; + status?: string; + unit_price?: string; + }; +}; + +export type OrdersListOutput = { + amount: string; + goods_id: string; + id: string; + order_no: string; + quantity: number; + status: string; + unit_price: string; +}[]; + +export type OrdersPageInput = { + keyword?: string; + order?: { + direction: "asc" | "desc"; + field: "id" | "order_no" | "goods_id" | "quantity" | "unit_price" | "amount" | "status"; + }; + page?: number; + size?: number; + where?: { + amount?: string; + goods_id?: string; + id?: string; + order_no?: string; + quantity?: number; + status?: string; + unit_price?: string; + }; +}; + +export type OrdersPageOutput = { + list: { + amount: string; + goods_id: string; + id: string; + order_no: string; + quantity: number; + status: string; + unit_price: string; + }[]; + pagination: { + page: number; + size: number; + total: number; + }; +}; + +export type OrdersUpdateInput = { + amount?: string; + goods_id?: string; + id: string; + order_no?: string; + quantity?: number; + status?: string; + unit_price?: string; +}; + +export type OrdersUpdateOutput = { + affected: number; +}; + +export type OrderOrdersCreatedPayload = { + id: string; +}; + +export type OrderOrdersDeletedPayload = { + id: string; +}; + +export type OrderOrdersUpdatedPayload = { + id: string; +}; + +export const Permissions = { + OrderOrdersAdd: "order:orders:add", + OrderOrdersCancelOrder: "order:orders:cancelOrder", + OrderOrdersCreateOrder: "order:orders:createOrder", + OrderOrdersDelete: "order:orders:delete", + OrderOrdersDetailWithGoods: "order:orders:detailWithGoods", + OrderOrdersInfo: "order:orders:info", + OrderOrdersList: "order:orders:list", + OrderOrdersPage: "order:orders:page", + OrderOrdersUpdate: "order:orders:update" +} as const; + +export type PermissionCode = typeof Permissions[keyof typeof Permissions]; + +export const Actions = { + OrdersAdd: defineSaasAction({ + "kind": "action", + "moduleCode": "order", + "name": "orders.add", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount" + ] + }, + "inputChecksum": "bbaa3690f78676aeed57b00951cd36a1ae2a82c4afeb86911040fdae86da53c9", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "outputChecksum": "9621cab591356c44012f30c8ba2209b1c62ad4834e1b90b8899420ad1ab1721e", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:add" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ], + "origin": "table_crud", + "implementation": "runtime_managed", + "mutationKind": "insert" + }), + OrdersCancelOrder: defineSaasAction({ + "kind": "action", + "moduleCode": "order", + "name": "orders.cancelOrder", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "3df2a0bb6e1f22f70958c255cc83d22d5502335e5bbbd790956bf8a17a3fb48d", + "outputSchema": { + "type": "object", + "required": [ + "id", + "status", + "restoredStock" + ], + "properties": { + "id": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "restoredStock": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "outputChecksum": "17e403c93a934ab56d62cfc9aeec3b9ec4269bb82e9ef6f839572c5d2dfc45ce", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:cancelOrder" + }, + "tables": [], + "readModels": [], + "writes": [], + "origin": "business", + "implementation": "business" + }), + OrdersCreateOrder: defineSaasAction({ + "kind": "action", + "moduleCode": "order", + "name": "orders.createOrder", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "required": [ + "orderNo", + "goodsId", + "quantity" + ], + "properties": { + "goodsId": { + "type": "integer", + "minimum": 1 + }, + "orderNo": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "quantity": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "84db3ee256dbe8dd64bc9442cd3bf2abe904a92f6abda8443bcd23514defdbd7", + "outputSchema": { + "type": "object", + "required": [ + "id", + "orderNo", + "amount", + "status" + ], + "properties": { + "id": { + "type": "integer" + }, + "amount": { + "type": "number" + }, + "status": { + "type": "string" + }, + "orderNo": { + "type": "string" + } + }, + "additionalProperties": false + }, + "outputChecksum": "6345bebe9f8f8073cfe64d1a3d22c0e701645110587d5d01c0992217a200ef7c", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:createOrder" + }, + "tables": [], + "readModels": [], + "writes": [], + "origin": "business", + "implementation": "business" + }), + OrdersDelete: defineSaasAction({ + "kind": "action", + "moduleCode": "order", + "name": "orders.delete", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "inputChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "affected": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "affected" + ] + }, + "outputChecksum": "5aa7994f78677fd557c2611cb26b6a1c4518cf4d6ccefa189a5c36af9f229716", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:delete" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "id" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ], + "origin": "table_crud", + "implementation": "runtime_managed", + "mutationKind": "delete" + }), + OrdersDetailWithGoods: defineSaasAction({ + "kind": "action", + "moduleCode": "order", + "name": "orders.detailWithGoods", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "3df2a0bb6e1f22f70958c255cc83d22d5502335e5bbbd790956bf8a17a3fb48d", + "outputSchema": { + "type": "object", + "required": [ + "order", + "goods" + ], + "properties": { + "goods": { + "type": "object", + "additionalProperties": true + }, + "order": { + "type": "object", + "additionalProperties": true + } + }, + "additionalProperties": false + }, + "outputChecksum": "6b3da8f0ae8d565a72bd91dc67f6b016c8959995f714059f4e122f4f2696c4d9", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:detailWithGoods" + }, + "tables": [], + "readModels": [], + "writes": [], + "origin": "business", + "implementation": "business" + }), + OrdersInfo: defineSaasAction({ + "kind": "action", + "moduleCode": "order", + "name": "orders.info", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "inputChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "outputChecksum": "9621cab591356c44012f30c8ba2209b1c62ad4834e1b90b8899420ad1ab1721e", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:info" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [], + "origin": "table_crud", + "implementation": "runtime_managed" + }), + OrdersList: defineSaasAction({ + "kind": "action", + "moduleCode": "order", + "name": "orders.list", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "where": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [] + }, + "order": { + "type": "object", + "additionalProperties": false, + "properties": { + "field": { + "type": "string", + "enum": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + } + }, + "required": [ + "field", + "direction" + ] + }, + "keyword": { + "type": "string", + "maxLength": 200 + }, + "take": { + "type": "integer", + "minimum": 1, + "maximum": 200 + } + }, + "required": [] + }, + "inputChecksum": "b55ebb7dd0f6b6d21d66145deab2c7b9746b5141fdf2510d4f65ec917f832006", + "outputSchema": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + } + }, + "outputChecksum": "040ec4e29e6999ab8ce2e1d9ebe4d4a5b1c09e805c10870401dbb273c9a8c9bc", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:list" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [], + "origin": "table_crud", + "implementation": "runtime_managed" + }), + OrdersPage: defineSaasAction({ + "kind": "action", + "moduleCode": "order", + "name": "orders.page", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "where": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [] + }, + "order": { + "type": "object", + "additionalProperties": false, + "properties": { + "field": { + "type": "string", + "enum": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + } + }, + "required": [ + "field", + "direction" + ] + }, + "keyword": { + "type": "string", + "maxLength": 200 + }, + "page": { + "type": "integer", + "minimum": 1 + }, + "size": { + "type": "integer", + "minimum": 1, + "maximum": 200 + } + }, + "required": [] + }, + "inputChecksum": "f1ef5864ff34a82b97d018b78fd5a938bfe772f1af22aae7a6a8b467743d7dc5", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "list": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + } + }, + "pagination": { + "type": "object", + "additionalProperties": false, + "properties": { + "page": { + "type": "integer", + "minimum": 1 + }, + "size": { + "type": "integer", + "minimum": 1, + "maximum": 200 + }, + "total": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "page", + "size", + "total" + ] + } + }, + "required": [ + "list", + "pagination" + ] + }, + "outputChecksum": "14efb96cade110fc8fef771fb439845b0892d169d9f26f0be10127b547262877", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:page" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [], + "origin": "table_crud", + "implementation": "runtime_managed" + }), + OrdersUpdate: defineSaasAction({ + "kind": "action", + "moduleCode": "order", + "name": "orders.update", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id" + ], + "minProperties": 2 + }, + "inputChecksum": "437195e38df6988a131ad09b0b7ee089108857a4795c75aba395d077255676fc", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "affected": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "affected" + ] + }, + "outputChecksum": "5aa7994f78677fd557c2611cb26b6a1c4518cf4d6ccefa189a5c36af9f229716", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:update" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ], + "origin": "table_crud", + "implementation": "runtime_managed", + "mutationKind": "update" + }) +} as const; + +export const Crud = { + Orders: defineSaasCrud({ + kind: 'table_crud', + moduleCode: "order", + tableCode: "orders", + operations: ["add","delete","update","info","list","page"], + descriptorChecksum: "b4b4c2c624d655282f336f4758e6d057082541502dfd0099ca0f520f75d973fd", + actions: { + add: Actions.OrdersAdd, + delete: Actions.OrdersDelete, + update: Actions.OrdersUpdate, + info: Actions.OrdersInfo, + list: Actions.OrdersList, + page: Actions.OrdersPage + } + }) +} as const; + +export type OrdersCrudBeforeChange = SaasCrudBeforeChange; + +export type OrdersCrudAfterChange = SaasCrudAfterChange; + +export const Events = { + OrderOrdersCreated: defineSaasEvent({ + "kind": "event", + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "aggregateStream": "orders", + "operation": "upsert", + "payloadSchemaChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865" + }), + OrderOrdersDeleted: defineSaasEvent({ + "kind": "event", + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "aggregateStream": "orders", + "operation": "delete", + "payloadSchemaChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865" + }), + OrderOrdersUpdated: defineSaasEvent({ + "kind": "event", + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "aggregateStream": "orders", + "operation": "upsert", + "payloadSchemaChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865" + }) +} as const; + +export const EventHandlers = { + +} as const; diff --git a/src/saas/generated/order/index.ts b/src/saas/generated/order/index.ts new file mode 100644 index 0000000..e32e7ac --- /dev/null +++ b/src/saas/generated/order/index.ts @@ -0,0 +1,5 @@ +export * from './models'; +export * from './contracts'; +export * from './saas-actions'; +export * from './saas-events'; +export * from './module'; diff --git a/src/saas/generated/order/models.ts b/src/saas/generated/order/models.ts new file mode 100644 index 0000000..598bf5d --- /dev/null +++ b/src/saas/generated/order/models.ts @@ -0,0 +1,100 @@ +// Generated by cool saas-model generate. DO NOT EDIT. +import { + SaasReadModel, + SaasTableModel, + defineSaasReadModel, + defineSaasTableModel +} from '@cool-midway/module-runtime'; + +export interface OrdersRow extends Record { + id: string; + order_no: string; + goods_id: string; + quantity: number; + unit_price: string; + amount: string; + status: string; +} + +export class Orders extends SaasTableModel { + static readonly definition = defineSaasTableModel({ + "kind": "table", + "moduleCode": "order", + "revision": 1, + "schemaVersion": 1, + "schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23", + "tableCode": "orders", + "fields": [ + { + "code": "id", + "type": "bigint", + "nullable": false, + "primary": true, + "readable": true, + "writable": false, + "filterable": true, + "sortable": true + }, + { + "code": "order_no", + "type": "varchar", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "goods_id", + "type": "bigint", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "quantity", + "type": "int", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "unit_price", + "type": "decimal", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "amount", + "type": "decimal", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "status", + "type": "varchar", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + } + ] + }); +} diff --git a/src/saas/generated/order/module.ts b/src/saas/generated/order/module.ts new file mode 100644 index 0000000..a585a97 --- /dev/null +++ b/src/saas/generated/order/module.ts @@ -0,0 +1,12 @@ +// Generated by cool saas-model generate. DO NOT EDIT. +import { defineGeneratedSaasModule } from '@cool-midway/module-runtime'; + +export const GeneratedSaasModule = defineGeneratedSaasModule({ + "formatVersion": 2, + "moduleCode": "order", + "revision": 1, + "schemaVersion": 1, + "schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23", + "runtimeContractChecksum": "3d025d1b634c413449eb91164fb1f859a388d8930d2de112980a606b591befce", + "implementationManifestChecksum": "f25647d2dd90e14d6226683d2ff67ba32132b2dfdeb861015805240a96d4635b" + }); diff --git a/src/saas/generated/order/saas-actions.ts b/src/saas/generated/order/saas-actions.ts new file mode 100644 index 0000000..9c5e184 --- /dev/null +++ b/src/saas/generated/order/saas-actions.ts @@ -0,0 +1,218 @@ +// Generated by cool saas-model generate. DO NOT EDIT. +import { defineInjectedSaasAction } from '@cool-midway/module-runtime'; + +export type DemoGoodsBatchInfoInput = { + ids: number[]; +}; + +export type DemoGoodsBatchInfoOutput = { + list: Record[]; +}; + +export type DemoGoodsReleaseStockInput = { + goodsId: number; + orderNo: string; + quantity: number; +}; + +export type DemoGoodsReleaseStockOutput = { + currentStock: number; + goodsId: number; +}; + +export type DemoGoodsReserveStockInput = { + goodsId: number; + quantity: number; +}; + +export type DemoGoodsReserveStockOutput = { + goodsId: number; + remainingStock: number; +}; + +export const SaasActions = { + Demo: { + GoodsBatchInfo: defineInjectedSaasAction({ + "kind": "action", + "name": "goods.batchInfo", + "access": "read", + "actionName": "goods.batchInfo", + "idempotent": false, + "moduleCode": "demo", + "inputSchema": { + "type": "object", + "required": [ + "ids" + ], + "properties": { + "ids": { + "type": "array", + "items": { + "type": "integer", + "minimum": 1 + }, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "callerPolicy": { + "kind": "module", + "allowedModules": [ + "order" + ] + }, + "contractKind": "saas.action.import", + "outputSchema": { + "type": "object", + "required": [ + "list" + ], + "properties": { + "list": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + } + }, + "additionalProperties": false + }, + "inputChecksum": "b2e0c5fd68adc75e2687c6a1ce01b8270240b42df6511efd6d922ea3242bc264", + "actionChecksum": "3978a7ba9a3e0f91842031fd323ec63b3816eef68cb8dc82ffad6d187de8b7ea", + "outputChecksum": "fe644424ef6a9e462b56edc9f70f48bb218783c69469469d4310de48589a0df5", + "contractVersion": 1, + "providerReleaseId": 38, + "consumerModuleCode": "order", + "providerModuleCode": "demo", + "providerReleaseVersion": "1.0.0-rc.1" + }), + GoodsReleaseStock: defineInjectedSaasAction({ + "kind": "action", + "name": "goods.releaseStock", + "access": "write", + "actionName": "goods.releaseStock", + "idempotent": true, + "moduleCode": "demo", + "inputSchema": { + "type": "object", + "required": [ + "goodsId", + "quantity", + "orderNo" + ], + "properties": { + "goodsId": { + "type": "integer", + "minimum": 1 + }, + "orderNo": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "quantity": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "callerPolicy": { + "kind": "module", + "allowedModules": [ + "order" + ] + }, + "contractKind": "saas.action.import", + "outputSchema": { + "type": "object", + "required": [ + "goodsId", + "currentStock" + ], + "properties": { + "goodsId": { + "type": "integer" + }, + "currentStock": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "inputChecksum": "c363d259b5108d069650a2554309eb3eb165d98723596595958e00acf8410abe", + "actionChecksum": "63423abe8557075caf668a91795f95a45195759a6b82e755d8af51ddfc71996e", + "outputChecksum": "a632b9f89518c3c17861454b74173a4880d5e8482639d3ff7f761aee4d061bd9", + "contractVersion": 1, + "commandEventType": "saas.workflow.demo.goods.releaseStock", + "providerReleaseId": 38, + "consumerModuleCode": "order", + "providerModuleCode": "demo", + "providerReleaseVersion": "1.0.0-rc.1", + "commandEventContractChecksum": "18a727b91cf9410c3b7ac14e3a8799dbbfa8937f84667bfe7e31e21e662396be" + }), + GoodsReserveStock: defineInjectedSaasAction({ + "kind": "action", + "name": "goods.reserveStock", + "access": "write", + "actionName": "goods.reserveStock", + "idempotent": true, + "moduleCode": "demo", + "inputSchema": { + "type": "object", + "required": [ + "goodsId", + "quantity" + ], + "properties": { + "goodsId": { + "type": "integer", + "minimum": 1 + }, + "quantity": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "callerPolicy": { + "kind": "module", + "allowedModules": [ + "order" + ] + }, + "contractKind": "saas.action.import", + "outputSchema": { + "type": "object", + "required": [ + "goodsId", + "remainingStock" + ], + "properties": { + "goodsId": { + "type": "integer" + }, + "remainingStock": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "inputChecksum": "6fbfa4d2324c4c0bdc621cbfd256353284e27495f59f47231b7d897b82a4e7b6", + "actionChecksum": "773465c93790e8df9119149e1efb4c4d8d2510298a24af7aa825662540ff37d5", + "outputChecksum": "545bd8b0bf6eb8670b21497236038187ee0f1df1544a318b16a399458fcb796e", + "contractVersion": 1, + "commandEventType": "saas.workflow.demo.goods.reserveStock", + "providerReleaseId": 38, + "consumerModuleCode": "order", + "providerModuleCode": "demo", + "providerReleaseVersion": "1.0.0-rc.1", + "commandEventContractChecksum": "ffbecad3a3d63b8bf92fde701dfaa11c8502a2c5f9f6bbb89b755e214024c3ae" + }) + } +} as const; diff --git a/src/saas/generated/order/saas-events.ts b/src/saas/generated/order/saas-events.ts new file mode 100644 index 0000000..204c1c6 --- /dev/null +++ b/src/saas/generated/order/saas-events.ts @@ -0,0 +1,25 @@ +// Generated by cool saas-model generate. DO NOT EDIT. +import { defineSaasEventHandler } from '@cool-midway/module-runtime'; +import type { SaasEventEnvelope } from '@cool-midway/module-runtime'; + +export type DemoGoodsStockReservedV1Payload = { + goodsId: number; + quantity: number; + remainingStock: number; +}; + +export type DemoGoodsStockReservedV1Event = SaasEventEnvelope; + +export const SaasEvents = { + Demo: { + GoodsStockReservedV1: defineSaasEventHandler({ + "kind": "event_handler", + "eventType": "demo.goods.stockReserved", + "eventVersion": 1, + "eventContractChecksum": "4d8a47d64f7d9fa43e0253228d05a2bb28db7efe3181e96d58dbff2163b9b752", + "sourceModule": "demo", + "tables": [], + "maxAttempts": 10 + }) + } +} as const; diff --git a/src/saas/generated/order/saas-implementation.expected.json b/src/saas/generated/order/saas-implementation.expected.json new file mode 100644 index 0000000..0442cb7 --- /dev/null +++ b/src/saas/generated/order/saas-implementation.expected.json @@ -0,0 +1,1022 @@ +{ + "manifestVersion": 1, + "moduleCode": "order", + "revision": 1, + "schemaChecksum": null, + "schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23", + "actionManifestChecksum": null, + "runtimeContractChecksum": "3d025d1b634c413449eb91164fb1f859a388d8930d2de112980a606b591befce", + "implementationManifestChecksum": "f25647d2dd90e14d6226683d2ff67ba32132b2dfdeb861015805240a96d4635b", + "actions": [ + "OrdersAdd", + "OrdersCancelOrder", + "OrdersCreateOrder", + "OrdersDelete", + "OrdersDetailWithGoods", + "OrdersInfo", + "OrdersList", + "OrdersPage", + "OrdersUpdate" + ], + "eventHandlers": [ + "RuntimeSaasSagaCompensationCompleted", + "RuntimeSaasSagaCompensationFailed", + "RuntimeSaasSagaStepCompleted", + "RuntimeSaasSagaStepFailed" + ], + "runtimeManagedEventHandlers": [ + "RuntimeSaasSagaCompensationCompleted", + "RuntimeSaasSagaCompensationFailed", + "RuntimeSaasSagaStepCompleted", + "RuntimeSaasSagaStepFailed" + ], + "runtimeManagedActions": [ + "OrdersAdd", + "OrdersDelete", + "OrdersInfo", + "OrdersList", + "OrdersPage", + "OrdersUpdate" + ], + "crudDescriptors": [ + { + "exportName": "Orders", + "tableCode": "orders", + "operations": [ + "add", + "delete", + "update", + "info", + "list", + "page" + ], + "descriptorChecksum": "b4b4c2c624d655282f336f4758e6d057082541502dfd0099ca0f520f75d973fd", + "actions": { + "add": "OrdersAdd", + "delete": "OrdersDelete", + "update": "OrdersUpdate", + "info": "OrdersInfo", + "list": "OrdersList", + "page": "OrdersPage" + } + } + ], + "actionDescriptors": [ + { + "name": "orders.add", + "origin": "table_crud", + "implementation": "runtime_managed", + "mutationKind": "insert", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount" + ] + }, + "inputChecksum": "bbaa3690f78676aeed57b00951cd36a1ae2a82c4afeb86911040fdae86da53c9", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "outputChecksum": "9621cab591356c44012f30c8ba2209b1c62ad4834e1b90b8899420ad1ab1721e", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:add" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ] + }, + { + "name": "orders.cancelOrder", + "origin": "business", + "implementation": "business", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "3df2a0bb6e1f22f70958c255cc83d22d5502335e5bbbd790956bf8a17a3fb48d", + "outputSchema": { + "type": "object", + "required": [ + "id", + "status", + "restoredStock" + ], + "properties": { + "id": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "restoredStock": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "outputChecksum": "17e403c93a934ab56d62cfc9aeec3b9ec4269bb82e9ef6f839572c5d2dfc45ce", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:cancelOrder" + }, + "tables": [], + "readModels": [], + "writes": [] + }, + { + "name": "orders.createOrder", + "origin": "business", + "implementation": "business", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "required": [ + "orderNo", + "goodsId", + "quantity" + ], + "properties": { + "goodsId": { + "type": "integer", + "minimum": 1 + }, + "orderNo": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "quantity": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "84db3ee256dbe8dd64bc9442cd3bf2abe904a92f6abda8443bcd23514defdbd7", + "outputSchema": { + "type": "object", + "required": [ + "id", + "orderNo", + "amount", + "status" + ], + "properties": { + "id": { + "type": "integer" + }, + "amount": { + "type": "number" + }, + "status": { + "type": "string" + }, + "orderNo": { + "type": "string" + } + }, + "additionalProperties": false + }, + "outputChecksum": "6345bebe9f8f8073cfe64d1a3d22c0e701645110587d5d01c0992217a200ef7c", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:createOrder" + }, + "tables": [], + "readModels": [], + "writes": [] + }, + { + "name": "orders.delete", + "origin": "table_crud", + "implementation": "runtime_managed", + "mutationKind": "delete", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "inputChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "affected": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "affected" + ] + }, + "outputChecksum": "5aa7994f78677fd557c2611cb26b6a1c4518cf4d6ccefa189a5c36af9f229716", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:delete" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "id" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ] + }, + { + "name": "orders.detailWithGoods", + "origin": "business", + "implementation": "business", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "3df2a0bb6e1f22f70958c255cc83d22d5502335e5bbbd790956bf8a17a3fb48d", + "outputSchema": { + "type": "object", + "required": [ + "order", + "goods" + ], + "properties": { + "goods": { + "type": "object", + "additionalProperties": true + }, + "order": { + "type": "object", + "additionalProperties": true + } + }, + "additionalProperties": false + }, + "outputChecksum": "6b3da8f0ae8d565a72bd91dc67f6b016c8959995f714059f4e122f4f2696c4d9", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:detailWithGoods" + }, + "tables": [], + "readModels": [], + "writes": [] + }, + { + "name": "orders.info", + "origin": "table_crud", + "implementation": "runtime_managed", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "inputChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "outputChecksum": "9621cab591356c44012f30c8ba2209b1c62ad4834e1b90b8899420ad1ab1721e", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:info" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [] + }, + { + "name": "orders.list", + "origin": "table_crud", + "implementation": "runtime_managed", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "where": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [] + }, + "order": { + "type": "object", + "additionalProperties": false, + "properties": { + "field": { + "type": "string", + "enum": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + } + }, + "required": [ + "field", + "direction" + ] + }, + "keyword": { + "type": "string", + "maxLength": 200 + }, + "take": { + "type": "integer", + "minimum": 1, + "maximum": 200 + } + }, + "required": [] + }, + "inputChecksum": "b55ebb7dd0f6b6d21d66145deab2c7b9746b5141fdf2510d4f65ec917f832006", + "outputSchema": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + } + }, + "outputChecksum": "040ec4e29e6999ab8ce2e1d9ebe4d4a5b1c09e805c10870401dbb273c9a8c9bc", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:list" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [] + }, + { + "name": "orders.page", + "origin": "table_crud", + "implementation": "runtime_managed", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "where": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [] + }, + "order": { + "type": "object", + "additionalProperties": false, + "properties": { + "field": { + "type": "string", + "enum": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + } + }, + "required": [ + "field", + "direction" + ] + }, + "keyword": { + "type": "string", + "maxLength": 200 + }, + "page": { + "type": "integer", + "minimum": 1 + }, + "size": { + "type": "integer", + "minimum": 1, + "maximum": 200 + } + }, + "required": [] + }, + "inputChecksum": "f1ef5864ff34a82b97d018b78fd5a938bfe772f1af22aae7a6a8b467743d7dc5", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "list": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + } + }, + "pagination": { + "type": "object", + "additionalProperties": false, + "properties": { + "page": { + "type": "integer", + "minimum": 1 + }, + "size": { + "type": "integer", + "minimum": 1, + "maximum": 200 + }, + "total": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "page", + "size", + "total" + ] + } + }, + "required": [ + "list", + "pagination" + ] + }, + "outputChecksum": "14efb96cade110fc8fef771fb439845b0892d169d9f26f0be10127b547262877", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:page" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [] + }, + { + "name": "orders.update", + "origin": "table_crud", + "implementation": "runtime_managed", + "mutationKind": "update", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id" + ], + "minProperties": 2 + }, + "inputChecksum": "437195e38df6988a131ad09b0b7ee089108857a4795c75aba395d077255676fc", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "affected": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "affected" + ] + }, + "outputChecksum": "5aa7994f78677fd557c2611cb26b6a1c4518cf4d6ccefa189a5c36af9f229716", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:update" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ] + } + ], + "eventHandlerDescriptors": [ + { + "eventType": "saas.saga.compensation.completed", + "eventVersion": 1, + "eventContractChecksum": "2919921c79a7795d6408b202d74aa0fb4b12ec56e1cec7de65eb95bbeeef2c5e", + "tables": [ + "__saas_rpc_saga", + "__saas_rpc_saga_step" + ], + "maxAttempts": 10 + }, + { + "eventType": "saas.saga.compensation.failed", + "eventVersion": 1, + "eventContractChecksum": "b7c7313c221e395c42e45e9480205a673108bdc395430bec892a9dafa39807f3", + "tables": [ + "__saas_rpc_saga", + "__saas_rpc_saga_step" + ], + "maxAttempts": 10 + }, + { + "eventType": "saas.saga.step.completed", + "eventVersion": 1, + "eventContractChecksum": "9d3acfdac4e5713672063f7e9f9b5b0b09487c59238d89dbe8d7145c6a09f1bd", + "tables": [ + "__saas_rpc_saga", + "__saas_rpc_saga_step" + ], + "maxAttempts": 10 + }, + { + "eventType": "saas.saga.step.failed", + "eventVersion": 1, + "eventContractChecksum": "8dd17e8104b78fa3ece7375402782dee38e121a87c91185658633fabaac8eba0", + "tables": [ + "__saas_rpc_saga", + "__saas_rpc_saga_step" + ], + "maxAttempts": 10 + } + ] +} diff --git a/src/saas/generated/order/saas-schema.lock.json b/src/saas/generated/order/saas-schema.lock.json new file mode 100644 index 0000000..35237f5 --- /dev/null +++ b/src/saas/generated/order/saas-schema.lock.json @@ -0,0 +1,2390 @@ +{ + "formatVersion": 2, + "moduleCode": "order", + "revision": 1, + "releaseVersion": null, + "schemaVersion": 1, + "schemaInputChecksum": "1b3eec01e5b04880166e20e8e6df70b79f227129ea9165e38cfbb925be3c2d23", + "schemaChecksum": null, + "actionManifestChecksum": null, + "runtimeContractChecksum": "3d025d1b634c413449eb91164fb1f859a388d8930d2de112980a606b591befce", + "implementationManifestChecksum": "f25647d2dd90e14d6226683d2ff67ba32132b2dfdeb861015805240a96d4635b", + "models": [ + { + "kind": "table", + "className": "Orders", + "rowTypeName": "OrdersRow", + "tableCode": "orders", + "fields": [ + { + "code": "id", + "type": "bigint", + "nullable": false, + "primary": true, + "readable": true, + "writable": false, + "filterable": true, + "sortable": true + }, + { + "code": "order_no", + "type": "varchar", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "goods_id", + "type": "bigint", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "quantity", + "type": "int", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "unit_price", + "type": "decimal", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "amount", + "type": "decimal", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + }, + { + "code": "status", + "type": "varchar", + "nullable": false, + "primary": false, + "readable": true, + "writable": true, + "filterable": true, + "sortable": true + } + ] + } + ], + "permissions": [ + { + "code": "order:orders:add", + "name": "新增订单", + "exportName": "OrderOrdersAdd" + }, + { + "code": "order:orders:cancelOrder", + "name": "orders.cancelOrder", + "description": "由自定义 Action 自动生成", + "exportName": "OrderOrdersCancelOrder" + }, + { + "code": "order:orders:createOrder", + "name": "orders.createOrder", + "description": "由自定义 Action 自动生成", + "exportName": "OrderOrdersCreateOrder" + }, + { + "code": "order:orders:delete", + "name": "删除订单", + "exportName": "OrderOrdersDelete" + }, + { + "code": "order:orders:detailWithGoods", + "name": "orders.detailWithGoods", + "description": "由自定义 Action 自动生成", + "exportName": "OrderOrdersDetailWithGoods" + }, + { + "code": "order:orders:info", + "name": "查看详情订单", + "exportName": "OrderOrdersInfo" + }, + { + "code": "order:orders:list", + "name": "查看列表订单", + "exportName": "OrderOrdersList" + }, + { + "code": "order:orders:page", + "name": "分页查看订单", + "exportName": "OrderOrdersPage" + }, + { + "code": "order:orders:update", + "name": "修改订单", + "exportName": "OrderOrdersUpdate" + } + ], + "actions": [ + { + "exportName": "OrdersAdd", + "manifestDescriptor": { + "name": "orders.add", + "origin": "table_crud", + "implementation": "runtime_managed", + "mutationKind": "insert", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount" + ] + }, + "inputChecksum": "bbaa3690f78676aeed57b00951cd36a1ae2a82c4afeb86911040fdae86da53c9", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "outputChecksum": "9621cab591356c44012f30c8ba2209b1c62ad4834e1b90b8899420ad1ab1721e", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:add" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ] + }, + "descriptor": { + "name": "orders.add", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount" + ] + }, + "inputChecksum": "bbaa3690f78676aeed57b00951cd36a1ae2a82c4afeb86911040fdae86da53c9", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "outputChecksum": "9621cab591356c44012f30c8ba2209b1c62ad4834e1b90b8899420ad1ab1721e", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:add" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ] + } + }, + { + "exportName": "OrdersCancelOrder", + "manifestDescriptor": { + "name": "orders.cancelOrder", + "origin": "business", + "implementation": "business", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "3df2a0bb6e1f22f70958c255cc83d22d5502335e5bbbd790956bf8a17a3fb48d", + "outputSchema": { + "type": "object", + "required": [ + "id", + "status", + "restoredStock" + ], + "properties": { + "id": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "restoredStock": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "outputChecksum": "17e403c93a934ab56d62cfc9aeec3b9ec4269bb82e9ef6f839572c5d2dfc45ce", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:cancelOrder" + }, + "tables": [], + "readModels": [], + "writes": [] + }, + "descriptor": { + "name": "orders.cancelOrder", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "3df2a0bb6e1f22f70958c255cc83d22d5502335e5bbbd790956bf8a17a3fb48d", + "outputSchema": { + "type": "object", + "required": [ + "id", + "status", + "restoredStock" + ], + "properties": { + "id": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "restoredStock": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "outputChecksum": "17e403c93a934ab56d62cfc9aeec3b9ec4269bb82e9ef6f839572c5d2dfc45ce", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:cancelOrder" + }, + "tables": [], + "readModels": [], + "writes": [] + } + }, + { + "exportName": "OrdersCreateOrder", + "manifestDescriptor": { + "name": "orders.createOrder", + "origin": "business", + "implementation": "business", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "required": [ + "orderNo", + "goodsId", + "quantity" + ], + "properties": { + "goodsId": { + "type": "integer", + "minimum": 1 + }, + "orderNo": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "quantity": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "84db3ee256dbe8dd64bc9442cd3bf2abe904a92f6abda8443bcd23514defdbd7", + "outputSchema": { + "type": "object", + "required": [ + "id", + "orderNo", + "amount", + "status" + ], + "properties": { + "id": { + "type": "integer" + }, + "amount": { + "type": "number" + }, + "status": { + "type": "string" + }, + "orderNo": { + "type": "string" + } + }, + "additionalProperties": false + }, + "outputChecksum": "6345bebe9f8f8073cfe64d1a3d22c0e701645110587d5d01c0992217a200ef7c", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:createOrder" + }, + "tables": [], + "readModels": [], + "writes": [] + }, + "descriptor": { + "name": "orders.createOrder", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "required": [ + "orderNo", + "goodsId", + "quantity" + ], + "properties": { + "goodsId": { + "type": "integer", + "minimum": 1 + }, + "orderNo": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "quantity": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "84db3ee256dbe8dd64bc9442cd3bf2abe904a92f6abda8443bcd23514defdbd7", + "outputSchema": { + "type": "object", + "required": [ + "id", + "orderNo", + "amount", + "status" + ], + "properties": { + "id": { + "type": "integer" + }, + "amount": { + "type": "number" + }, + "status": { + "type": "string" + }, + "orderNo": { + "type": "string" + } + }, + "additionalProperties": false + }, + "outputChecksum": "6345bebe9f8f8073cfe64d1a3d22c0e701645110587d5d01c0992217a200ef7c", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:createOrder" + }, + "tables": [], + "readModels": [], + "writes": [] + } + }, + { + "exportName": "OrdersDelete", + "manifestDescriptor": { + "name": "orders.delete", + "origin": "table_crud", + "implementation": "runtime_managed", + "mutationKind": "delete", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "inputChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "affected": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "affected" + ] + }, + "outputChecksum": "5aa7994f78677fd557c2611cb26b6a1c4518cf4d6ccefa189a5c36af9f229716", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:delete" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "id" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ] + }, + "descriptor": { + "name": "orders.delete", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "inputChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "affected": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "affected" + ] + }, + "outputChecksum": "5aa7994f78677fd557c2611cb26b6a1c4518cf4d6ccefa189a5c36af9f229716", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:delete" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "id" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ] + } + }, + { + "exportName": "OrdersDetailWithGoods", + "manifestDescriptor": { + "name": "orders.detailWithGoods", + "origin": "business", + "implementation": "business", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "3df2a0bb6e1f22f70958c255cc83d22d5502335e5bbbd790956bf8a17a3fb48d", + "outputSchema": { + "type": "object", + "required": [ + "order", + "goods" + ], + "properties": { + "goods": { + "type": "object", + "additionalProperties": true + }, + "order": { + "type": "object", + "additionalProperties": true + } + }, + "additionalProperties": false + }, + "outputChecksum": "6b3da8f0ae8d565a72bd91dc67f6b016c8959995f714059f4e122f4f2696c4d9", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:detailWithGoods" + }, + "tables": [], + "readModels": [], + "writes": [] + }, + "descriptor": { + "name": "orders.detailWithGoods", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "inputChecksum": "3df2a0bb6e1f22f70958c255cc83d22d5502335e5bbbd790956bf8a17a3fb48d", + "outputSchema": { + "type": "object", + "required": [ + "order", + "goods" + ], + "properties": { + "goods": { + "type": "object", + "additionalProperties": true + }, + "order": { + "type": "object", + "additionalProperties": true + } + }, + "additionalProperties": false + }, + "outputChecksum": "6b3da8f0ae8d565a72bd91dc67f6b016c8959995f714059f4e122f4f2696c4d9", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:detailWithGoods" + }, + "tables": [], + "readModels": [], + "writes": [] + } + }, + { + "exportName": "OrdersInfo", + "manifestDescriptor": { + "name": "orders.info", + "origin": "table_crud", + "implementation": "runtime_managed", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "inputChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "outputChecksum": "9621cab591356c44012f30c8ba2209b1c62ad4834e1b90b8899420ad1ab1721e", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:info" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [] + }, + "descriptor": { + "name": "orders.info", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "inputChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "outputChecksum": "9621cab591356c44012f30c8ba2209b1c62ad4834e1b90b8899420ad1ab1721e", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:info" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [] + } + }, + { + "exportName": "OrdersList", + "manifestDescriptor": { + "name": "orders.list", + "origin": "table_crud", + "implementation": "runtime_managed", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "where": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [] + }, + "order": { + "type": "object", + "additionalProperties": false, + "properties": { + "field": { + "type": "string", + "enum": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + } + }, + "required": [ + "field", + "direction" + ] + }, + "keyword": { + "type": "string", + "maxLength": 200 + }, + "take": { + "type": "integer", + "minimum": 1, + "maximum": 200 + } + }, + "required": [] + }, + "inputChecksum": "b55ebb7dd0f6b6d21d66145deab2c7b9746b5141fdf2510d4f65ec917f832006", + "outputSchema": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + } + }, + "outputChecksum": "040ec4e29e6999ab8ce2e1d9ebe4d4a5b1c09e805c10870401dbb273c9a8c9bc", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:list" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [] + }, + "descriptor": { + "name": "orders.list", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "where": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [] + }, + "order": { + "type": "object", + "additionalProperties": false, + "properties": { + "field": { + "type": "string", + "enum": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + } + }, + "required": [ + "field", + "direction" + ] + }, + "keyword": { + "type": "string", + "maxLength": 200 + }, + "take": { + "type": "integer", + "minimum": 1, + "maximum": 200 + } + }, + "required": [] + }, + "inputChecksum": "b55ebb7dd0f6b6d21d66145deab2c7b9746b5141fdf2510d4f65ec917f832006", + "outputSchema": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + } + }, + "outputChecksum": "040ec4e29e6999ab8ce2e1d9ebe4d4a5b1c09e805c10870401dbb273c9a8c9bc", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:list" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [] + } + }, + { + "exportName": "OrdersPage", + "manifestDescriptor": { + "name": "orders.page", + "origin": "table_crud", + "implementation": "runtime_managed", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "where": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [] + }, + "order": { + "type": "object", + "additionalProperties": false, + "properties": { + "field": { + "type": "string", + "enum": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + } + }, + "required": [ + "field", + "direction" + ] + }, + "keyword": { + "type": "string", + "maxLength": 200 + }, + "page": { + "type": "integer", + "minimum": 1 + }, + "size": { + "type": "integer", + "minimum": 1, + "maximum": 200 + } + }, + "required": [] + }, + "inputChecksum": "f1ef5864ff34a82b97d018b78fd5a938bfe772f1af22aae7a6a8b467743d7dc5", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "list": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + } + }, + "pagination": { + "type": "object", + "additionalProperties": false, + "properties": { + "page": { + "type": "integer", + "minimum": 1 + }, + "size": { + "type": "integer", + "minimum": 1, + "maximum": 200 + }, + "total": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "page", + "size", + "total" + ] + } + }, + "required": [ + "list", + "pagination" + ] + }, + "outputChecksum": "14efb96cade110fc8fef771fb439845b0892d169d9f26f0be10127b547262877", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:page" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [] + }, + "descriptor": { + "name": "orders.page", + "access": "read", + "idempotent": false, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "where": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [] + }, + "order": { + "type": "object", + "additionalProperties": false, + "properties": { + "field": { + "type": "string", + "enum": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + }, + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + } + }, + "required": [ + "field", + "direction" + ] + }, + "keyword": { + "type": "string", + "maxLength": 200 + }, + "page": { + "type": "integer", + "minimum": 1 + }, + "size": { + "type": "integer", + "minimum": 1, + "maximum": 200 + } + }, + "required": [] + }, + "inputChecksum": "f1ef5864ff34a82b97d018b78fd5a938bfe772f1af22aae7a6a8b467743d7dc5", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "list": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id", + "order_no", + "goods_id", + "quantity", + "unit_price", + "amount", + "status" + ] + } + }, + "pagination": { + "type": "object", + "additionalProperties": false, + "properties": { + "page": { + "type": "integer", + "minimum": 1 + }, + "size": { + "type": "integer", + "minimum": 1, + "maximum": 200 + }, + "total": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "page", + "size", + "total" + ] + } + }, + "required": [ + "list", + "pagination" + ] + }, + "outputChecksum": "14efb96cade110fc8fef771fb439845b0892d169d9f26f0be10127b547262877", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:page" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": true + } + ], + "readModels": [], + "writes": [] + } + }, + { + "exportName": "OrdersUpdate", + "manifestDescriptor": { + "name": "orders.update", + "origin": "table_crud", + "implementation": "runtime_managed", + "mutationKind": "update", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id" + ], + "minProperties": 2 + }, + "inputChecksum": "437195e38df6988a131ad09b0b7ee089108857a4795c75aba395d077255676fc", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "affected": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "affected" + ] + }, + "outputChecksum": "5aa7994f78677fd557c2611cb26b6a1c4518cf4d6ccefa189a5c36af9f229716", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:update" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ] + }, + "descriptor": { + "name": "orders.update", + "access": "write", + "idempotent": true, + "inputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "order_no": { + "type": "string", + "maxLength": 64 + }, + "goods_id": { + "type": "string", + "pattern": "^-?[0-9]+$" + }, + "quantity": { + "type": "integer" + }, + "unit_price": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "amount": { + "type": "string", + "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" + }, + "status": { + "type": "string", + "maxLength": 24 + } + }, + "required": [ + "id" + ], + "minProperties": 2 + }, + "inputChecksum": "437195e38df6988a131ad09b0b7ee089108857a4795c75aba395d077255676fc", + "outputSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "affected": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "affected" + ] + }, + "outputChecksum": "5aa7994f78677fd557c2611cb26b6a1c4518cf4d6ccefa189a5c36af9f229716", + "callerPolicy": { + "kind": "permission", + "permission": "order:orders:update" + }, + "tables": [ + { + "tableCode": "orders", + "fields": [ + "amount", + "goods_id", + "id", + "order_no", + "quantity", + "status", + "unit_price" + ], + "select": false + } + ], + "readModels": [], + "writes": [ + { + "tableCode": "orders", + "aggregateStream": "orders", + "sequenceCompleteness": "complete", + "idempotencyRequired": true, + "events": [ + { + "eventType": "order.orders.created", + "eventVersion": 1, + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676", + "operation": "upsert" + }, + { + "eventType": "order.orders.deleted", + "eventVersion": 1, + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c", + "operation": "delete" + }, + { + "eventType": "order.orders.updated", + "eventVersion": 1, + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d", + "operation": "upsert" + } + ] + } + ] + } + } + ], + "actionImports": [ + { + "exportName": "DemoGoodsBatchInfo", + "providerExportName": "Demo", + "actionExportName": "GoodsBatchInfo", + "descriptor": { + "kind": "action", + "name": "goods.batchInfo", + "access": "read", + "actionName": "goods.batchInfo", + "idempotent": false, + "moduleCode": "demo", + "inputSchema": { + "type": "object", + "required": [ + "ids" + ], + "properties": { + "ids": { + "type": "array", + "items": { + "type": "integer", + "minimum": 1 + }, + "minItems": 1 + } + }, + "additionalProperties": false + }, + "callerPolicy": { + "kind": "module", + "allowedModules": [ + "order" + ] + }, + "contractKind": "saas.action.import", + "outputSchema": { + "type": "object", + "required": [ + "list" + ], + "properties": { + "list": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + } + } + }, + "additionalProperties": false + }, + "inputChecksum": "b2e0c5fd68adc75e2687c6a1ce01b8270240b42df6511efd6d922ea3242bc264", + "actionChecksum": "3978a7ba9a3e0f91842031fd323ec63b3816eef68cb8dc82ffad6d187de8b7ea", + "outputChecksum": "fe644424ef6a9e462b56edc9f70f48bb218783c69469469d4310de48589a0df5", + "contractVersion": 1, + "providerReleaseId": 38, + "consumerModuleCode": "order", + "providerModuleCode": "demo", + "providerReleaseVersion": "1.0.0-rc.1" + } + }, + { + "exportName": "DemoGoodsReleaseStock", + "providerExportName": "Demo", + "actionExportName": "GoodsReleaseStock", + "descriptor": { + "kind": "action", + "name": "goods.releaseStock", + "access": "write", + "actionName": "goods.releaseStock", + "idempotent": true, + "moduleCode": "demo", + "inputSchema": { + "type": "object", + "required": [ + "goodsId", + "quantity", + "orderNo" + ], + "properties": { + "goodsId": { + "type": "integer", + "minimum": 1 + }, + "orderNo": { + "type": "string", + "maxLength": 64, + "minLength": 1 + }, + "quantity": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "callerPolicy": { + "kind": "module", + "allowedModules": [ + "order" + ] + }, + "contractKind": "saas.action.import", + "outputSchema": { + "type": "object", + "required": [ + "goodsId", + "currentStock" + ], + "properties": { + "goodsId": { + "type": "integer" + }, + "currentStock": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "inputChecksum": "c363d259b5108d069650a2554309eb3eb165d98723596595958e00acf8410abe", + "actionChecksum": "63423abe8557075caf668a91795f95a45195759a6b82e755d8af51ddfc71996e", + "outputChecksum": "a632b9f89518c3c17861454b74173a4880d5e8482639d3ff7f761aee4d061bd9", + "contractVersion": 1, + "commandEventType": "saas.workflow.demo.goods.releaseStock", + "providerReleaseId": 38, + "consumerModuleCode": "order", + "providerModuleCode": "demo", + "providerReleaseVersion": "1.0.0-rc.1", + "commandEventContractChecksum": "18a727b91cf9410c3b7ac14e3a8799dbbfa8937f84667bfe7e31e21e662396be" + } + }, + { + "exportName": "DemoGoodsReserveStock", + "providerExportName": "Demo", + "actionExportName": "GoodsReserveStock", + "descriptor": { + "kind": "action", + "name": "goods.reserveStock", + "access": "write", + "actionName": "goods.reserveStock", + "idempotent": true, + "moduleCode": "demo", + "inputSchema": { + "type": "object", + "required": [ + "goodsId", + "quantity" + ], + "properties": { + "goodsId": { + "type": "integer", + "minimum": 1 + }, + "quantity": { + "type": "integer", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "callerPolicy": { + "kind": "module", + "allowedModules": [ + "order" + ] + }, + "contractKind": "saas.action.import", + "outputSchema": { + "type": "object", + "required": [ + "goodsId", + "remainingStock" + ], + "properties": { + "goodsId": { + "type": "integer" + }, + "remainingStock": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "inputChecksum": "6fbfa4d2324c4c0bdc621cbfd256353284e27495f59f47231b7d897b82a4e7b6", + "actionChecksum": "773465c93790e8df9119149e1efb4c4d8d2510298a24af7aa825662540ff37d5", + "outputChecksum": "545bd8b0bf6eb8670b21497236038187ee0f1df1544a318b16a399458fcb796e", + "contractVersion": 1, + "commandEventType": "saas.workflow.demo.goods.reserveStock", + "providerReleaseId": 38, + "consumerModuleCode": "order", + "providerModuleCode": "demo", + "providerReleaseVersion": "1.0.0-rc.1", + "commandEventContractChecksum": "ffbecad3a3d63b8bf92fde701dfaa11c8502a2c5f9f6bbb89b755e214024c3ae" + } + } + ], + "eventImports": [ + { + "exportName": "DemoGoodsStockReservedV1", + "providerExportName": "Demo", + "eventExportName": "GoodsStockReservedV1", + "descriptor": { + "eventType": "demo.goods.stockReserved", + "eventVersion": 1, + "eventContractChecksum": "4d8a47d64f7d9fa43e0253228d05a2bb28db7efe3181e96d58dbff2163b9b752", + "sourceModule": "demo", + "tables": [], + "maxAttempts": 10 + }, + "payloadSchema": { + "type": "object", + "required": [ + "goodsId", + "quantity", + "remainingStock" + ], + "properties": { + "goodsId": { + "type": "integer" + }, + "quantity": { + "type": "integer", + "minimum": 1 + }, + "remainingStock": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": false + }, + "providerReleaseId": 38, + "providerReleaseVersion": "1.0.0-rc.1" + } + ], + "crud": [ + { + "exportName": "Orders", + "tableCode": "orders", + "operations": [ + "add", + "delete", + "update", + "info", + "list", + "page" + ], + "descriptorChecksum": "b4b4c2c624d655282f336f4758e6d057082541502dfd0099ca0f520f75d973fd", + "actions": { + "add": "OrdersAdd", + "delete": "OrdersDelete", + "update": "OrdersUpdate", + "info": "OrdersInfo", + "list": "OrdersList", + "page": "OrdersPage" + } + } + ], + "events": [ + { + "exportName": "OrderOrdersCreated", + "descriptor": { + "moduleCode": "order", + "aggregateStream": "orders", + "eventType": "order.orders.created", + "eventVersion": 1, + "sourceTableCodes": [ + "orders" + ], + "aggregateIdType": "integer", + "operation": "upsert", + "payloadMode": "state_transfer", + "payloadSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "payloadSchemaChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "eventContractChecksum": "2f943e0975c753dae4632309442890eb66f483686223ac3f71954f68806d7676" + } + }, + { + "exportName": "OrderOrdersDeleted", + "descriptor": { + "moduleCode": "order", + "aggregateStream": "orders", + "eventType": "order.orders.deleted", + "eventVersion": 1, + "sourceTableCodes": [ + "orders" + ], + "aggregateIdType": "integer", + "operation": "delete", + "payloadMode": "state_transfer", + "payloadSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "payloadSchemaChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "eventContractChecksum": "738d6338228f93f161884f5e2467e52332baad6845dc9f1c26fcc36fad4f486c" + } + }, + { + "exportName": "OrderOrdersUpdated", + "descriptor": { + "moduleCode": "order", + "aggregateStream": "orders", + "eventType": "order.orders.updated", + "eventVersion": 1, + "sourceTableCodes": [ + "orders" + ], + "aggregateIdType": "integer", + "operation": "upsert", + "payloadMode": "state_transfer", + "payloadSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^-?[0-9]+$" + } + }, + "required": [ + "id" + ] + }, + "payloadSchemaChecksum": "f7411322cb1460ead79eaa8267854f576188c583bfdc621d9cb6b5097991e865", + "eventContractChecksum": "c5e252787a723ac37068afc9adc7365057f937bf9ed9fdd1d3ed7b83d7e6db4d" + } + } + ], + "eventHandlers": [ + { + "exportName": "RuntimeSaasSagaCompensationCompleted", + "implementation": "runtime_managed", + "descriptor": { + "eventType": "saas.saga.compensation.completed", + "eventVersion": 1, + "eventContractChecksum": "2919921c79a7795d6408b202d74aa0fb4b12ec56e1cec7de65eb95bbeeef2c5e", + "tables": [ + "__saas_rpc_saga", + "__saas_rpc_saga_step" + ], + "maxAttempts": 10 + } + }, + { + "exportName": "RuntimeSaasSagaCompensationFailed", + "implementation": "runtime_managed", + "descriptor": { + "eventType": "saas.saga.compensation.failed", + "eventVersion": 1, + "eventContractChecksum": "b7c7313c221e395c42e45e9480205a673108bdc395430bec892a9dafa39807f3", + "tables": [ + "__saas_rpc_saga", + "__saas_rpc_saga_step" + ], + "maxAttempts": 10 + } + }, + { + "exportName": "RuntimeSaasSagaStepCompleted", + "implementation": "runtime_managed", + "descriptor": { + "eventType": "saas.saga.step.completed", + "eventVersion": 1, + "eventContractChecksum": "9d3acfdac4e5713672063f7e9f9b5b0b09487c59238d89dbe8d7145c6a09f1bd", + "tables": [ + "__saas_rpc_saga", + "__saas_rpc_saga_step" + ], + "maxAttempts": 10 + } + }, + { + "exportName": "RuntimeSaasSagaStepFailed", + "implementation": "runtime_managed", + "descriptor": { + "eventType": "saas.saga.step.failed", + "eventVersion": 1, + "eventContractChecksum": "8dd17e8104b78fa3ece7375402782dee38e121a87c91185658633fabaac8eba0", + "tables": [ + "__saas_rpc_saga", + "__saas_rpc_saga_step" + ], + "maxAttempts": 10 + } + } + ], + "workflowCommands": [] +} diff --git a/src/service/orders.ts b/src/service/orders.ts new file mode 100644 index 0000000..8ba456e --- /dev/null +++ b/src/service/orders.ts @@ -0,0 +1,181 @@ +import { Provide } from '@midwayjs/core'; +import { + InjectSaasAction, + InjectSaasCrud, + ModuleRuntimeError, + SaasAction, + type SaasActionCaller, + type SaasCrudCaller, + SaasCrudService, + SaasCrudServiceBase, +} from '@cool-midway/module-runtime'; +import { + Actions, + Crud, + SaasActions, + type OrdersCancelOrderInput, + type OrdersCancelOrderOutput, + type OrdersCreateOrderInput, + type OrdersCreateOrderOutput, + type OrdersDetailWithGoodsInput, + type OrdersDetailWithGoodsOutput, +} from '../saas/generated/order'; + +type GoodsRecord = Record; + +@Provide() +@SaasCrudService(Crud.Orders) +export class OrdersService extends SaasCrudServiceBase { + @InjectSaasCrud(Crud.Orders) + private readonly orders!: SaasCrudCaller; + + @InjectSaasAction(SaasActions.Demo.GoodsBatchInfo) + private readonly batchInfo!: SaasActionCaller< + typeof SaasActions.Demo.GoodsBatchInfo + >; + + @InjectSaasAction(SaasActions.Demo.GoodsReserveStock) + private readonly reserveStock!: SaasActionCaller< + typeof SaasActions.Demo.GoodsReserveStock + >; + + @InjectSaasAction(SaasActions.Demo.GoodsReleaseStock) + private readonly releaseStock!: SaasActionCaller< + typeof SaasActions.Demo.GoodsReleaseStock + >; + + @SaasAction(Actions.OrdersCreateOrder) + async createOrder( + input: OrdersCreateOrderInput + ): Promise { + const goods = await this.requireGoods(input.goodsId); + if (integer(goods.status, '商品状态') !== 1) { + throw conflict('商品未上架,不能下单'); + } + + const unitPrice = decimal(goods.price, '商品价格'); + const amount = multiplyDecimal(unitPrice, input.quantity); + + // The order row is kept in the outer managed transaction. If the remote + // stock reservation fails, Runtime rolls this local CRUD mutation back. + const order = await this.orders.add({ + order_no: input.orderNo, + goods_id: String(input.goodsId), + quantity: input.quantity, + unit_price: unitPrice, + amount, + status: 'pending', + }); + + await this.reserveStock({ + goodsId: input.goodsId, + quantity: input.quantity, + }); + + return { + id: safeInteger(order.id, '订单 ID'), + orderNo: order.order_no, + amount: finiteNumber(order.amount, '订单金额'), + status: order.status, + }; + } + + @SaasAction(Actions.OrdersDetailWithGoods) + async detailWithGoods( + input: OrdersDetailWithGoodsInput + ): Promise { + const order = await this.requireOrder(input.id); + const goods = await this.requireGoods(safeInteger(order.goods_id, '商品 ID')); + return { order, goods }; + } + + @SaasAction(Actions.OrdersCancelOrder) + async cancelOrder( + input: OrdersCancelOrderInput + ): Promise { + const order = await this.requireOrder(input.id); + if (order.status === 'cancelled') { + return { id: input.id, status: 'cancelled', restoredStock: 0 }; + } + + const update = await this.orders.update({ + id: order.id, + status: 'cancelled', + }); + if (update.affected === 0) { + return { id: input.id, status: 'cancelled', restoredStock: 0 }; + } + + const goodsId = safeInteger(order.goods_id, '商品 ID'); + await this.releaseStock({ + goodsId, + quantity: order.quantity, + orderNo: order.order_no, + }); + + return { + id: input.id, + status: 'cancelled', + restoredStock: order.quantity, + }; + } + + private async requireOrder(id: number) { + const order = await this.orders.info({ id: String(id) }); + if (!order) throw conflict(`订单不存在: ${id}`); + return order; + } + + private async requireGoods(goodsId: number): Promise { + const result = await this.batchInfo({ ids: [goodsId] }); + const goods = result.list.find(item => String(item.id) === String(goodsId)); + if (!goods) throw conflict(`商品不存在: ${goodsId}`); + return goods; + } +} + +function decimal(value: unknown, label: string): string { + const normalized = String(value ?? '').trim(); + if (!/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/.test(normalized)) { + throw conflict(`${label}非法`); + } + return normalized; +} + +function multiplyDecimal(value: string, multiplier: number): string { + const negative = value.startsWith('-'); + const unsigned = negative ? value.slice(1) : value; + const [integerPart, fractionPart = ''] = unsigned.split('.'); + const scale = fractionPart.length; + const digits = BigInt(`${integerPart}${fractionPart}`); + const product = digits * BigInt(multiplier); + const padded = product.toString().padStart(scale + 1, '0'); + const absolute = scale + ? `${padded.slice(0, -scale)}.${padded.slice(-scale)}` + : padded; + return negative && product !== BigInt(0) ? `-${absolute}` : absolute; +} + +function integer(value: unknown, label: string): number { + const normalized = Number(value); + if (!Number.isInteger(normalized)) throw conflict(`${label}非法`); + return normalized; +} + +function safeInteger(value: unknown, label: string): number { + const normalized = integer(value, label); + if (!Number.isSafeInteger(normalized) || normalized < 1) { + throw conflict(`${label}超出安全范围`); + } + return normalized; +} + +function finiteNumber(value: unknown, label: string): number { + const normalized = Number(value); + if (!Number.isFinite(normalized)) throw conflict(`${label}非法`); + return normalized; +} + +function conflict(message: string) { + return new ModuleRuntimeError('MODULE_ACTION_INPUT_INVALID', message, 409); +}