@autobe/agent 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/lib/agent/src/AutoBeMockAgent.js +1 -0
  2. package/lib/agent/src/AutoBeMockAgent.js.map +1 -1
  3. package/lib/agent/src/constants/AutoBeSystemPromptConstant.d.ts +10 -9
  4. package/lib/agent/src/constants/AutoBeSystemPromptConstant.js.map +1 -1
  5. package/lib/agent/src/context/AutoBeContext.d.ts +2 -2
  6. package/lib/agent/src/factory/createAutoBeContext.js +3 -1
  7. package/lib/agent/src/factory/createAutoBeContext.js.map +1 -1
  8. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceComplementHistories.js +3 -3
  9. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceComplementHistories.js.map +1 -1
  10. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.d.ts +4 -0
  11. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.js +33 -0
  12. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.js.map +1 -0
  13. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceOperationHistories.js +1 -1
  14. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceOperationHistories.js.map +1 -1
  15. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceOperationsReviewHistories.js +1 -1
  16. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceOperationsReviewHistories.js.map +1 -1
  17. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceSchemaHistories.js +1 -1
  18. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceSchemaHistories.js.map +1 -1
  19. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceSchemasReviewHistories.js +2 -2
  20. package/lib/agent/src/orchestrate/interface/histories/transformInterfaceSchemasReviewHistories.js.map +1 -1
  21. package/lib/agent/src/orchestrate/interface/orchestrateInterfaceAuthorizations.js +6 -6
  22. package/lib/agent/src/orchestrate/interface/orchestrateInterfaceEndpoints.js +5 -3
  23. package/lib/agent/src/orchestrate/interface/orchestrateInterfaceEndpoints.js.map +1 -1
  24. package/lib/agent/src/orchestrate/interface/orchestrateInterfaceEndpointsReview.d.ts +10 -0
  25. package/lib/agent/src/orchestrate/interface/orchestrateInterfaceEndpointsReview.js +365 -0
  26. package/lib/agent/src/orchestrate/interface/orchestrateInterfaceEndpointsReview.js.map +1 -0
  27. package/lib/agent/src/orchestrate/interface/orchestrateInterfaceOperations.js +6 -6
  28. package/lib/agent/src/orchestrate/interface/orchestrateInterfaceOperationsReview.js +1633 -1198
  29. package/lib/agent/src/orchestrate/interface/orchestrateInterfaceOperationsReview.js.map +1 -1
  30. package/lib/agent/src/orchestrate/interface/structures/IAutoBeInterfaceEndpointsReviewApplication.d.ts +60 -0
  31. package/lib/agent/src/orchestrate/interface/structures/IAutoBeInterfaceEndpointsReviewApplication.js +3 -0
  32. package/lib/agent/src/orchestrate/interface/structures/IAutoBeInterfaceEndpointsReviewApplication.js.map +1 -0
  33. package/lib/agent/src/orchestrate/interface/structures/IAutoBeInterfaceOperationsReviewApplication.d.ts +40 -0
  34. package/lib/agent/src/orchestrate/realize/histories/transformRealizeCorrectHistories.js +1 -1
  35. package/lib/agent/src/orchestrate/realize/histories/transformRealizeCorrectHistories.js.map +1 -1
  36. package/lib/agent/src/orchestrate/realize/histories/transformRealizeWriteHistories.js +1 -1
  37. package/lib/agent/src/orchestrate/realize/histories/transformRealizeWriteHistories.js.map +1 -1
  38. package/lib/agent/src/orchestrate/realize/orchestrateRealizeCorrect.js +4 -4
  39. package/lib/agent/src/orchestrate/realize/orchestrateRealizeScenario.js +2 -2
  40. package/lib/agent/src/orchestrate/realize/orchestrateRealizeScenario.js.map +1 -1
  41. package/lib/agent/src/orchestrate/realize/orchestrateRealizeWrite.js +4 -4
  42. package/lib/agent/src/orchestrate/realize/structures/IAutoBeRealizeScenarioApplication.d.ts +2 -2
  43. package/lib/agent/src/orchestrate/realize/structures/IAutoBeRealizeWriteApplication.d.ts +7 -2
  44. package/lib/agent/src/orchestrate/test/compile/getTestExternalDeclarations.js +1 -1
  45. package/lib/agent/src/orchestrate/test/compile/getTestExternalDeclarations.js.map +1 -1
  46. package/lib/agent/src/orchestrate/test/histories/transformTestCorrectHistories.d.ts +3 -1
  47. package/lib/agent/src/orchestrate/test/histories/transformTestCorrectHistories.js +41 -25
  48. package/lib/agent/src/orchestrate/test/histories/transformTestCorrectHistories.js.map +1 -1
  49. package/lib/agent/src/orchestrate/test/histories/transformTestScenarioHistories.js +1 -1
  50. package/lib/agent/src/orchestrate/test/histories/transformTestScenarioHistories.js.map +1 -1
  51. package/lib/agent/src/orchestrate/test/histories/transformTestWriteHistories.d.ts +3 -1
  52. package/lib/agent/src/orchestrate/test/histories/transformTestWriteHistories.js +118 -96
  53. package/lib/agent/src/orchestrate/test/histories/transformTestWriteHistories.js.map +1 -1
  54. package/lib/agent/src/orchestrate/test/orchestrateTestCorrect.js +1 -1
  55. package/lib/agent/src/orchestrate/test/orchestrateTestCorrect.js.map +1 -1
  56. package/lib/agent/src/orchestrate/test/orchestrateTestScenario.js +10 -10
  57. package/lib/agent/src/orchestrate/test/orchestrateTestWrite.js +1 -1
  58. package/lib/agent/src/orchestrate/test/orchestrateTestWrite.js.map +1 -1
  59. package/lib/agent/src/orchestrate/test/structures/IAutoBeTestScenarioApplication.d.ts +28 -1
  60. package/lib/constants/AutoBeSystemPromptConstant.d.ts +10 -9
  61. package/lib/context/AutoBeContext.d.ts +2 -2
  62. package/lib/index.mjs +2315 -1526
  63. package/lib/index.mjs.map +1 -1
  64. package/lib/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.d.ts +4 -0
  65. package/lib/orchestrate/interface/orchestrateInterfaceEndpointsReview.d.ts +10 -0
  66. package/lib/orchestrate/interface/structures/IAutoBeInterfaceEndpointsReviewApplication.d.ts +60 -0
  67. package/lib/orchestrate/interface/structures/IAutoBeInterfaceOperationsReviewApplication.d.ts +40 -0
  68. package/lib/orchestrate/realize/structures/IAutoBeRealizeScenarioApplication.d.ts +2 -2
  69. package/lib/orchestrate/realize/structures/IAutoBeRealizeWriteApplication.d.ts +7 -2
  70. package/lib/orchestrate/test/histories/transformTestCorrectHistories.d.ts +3 -1
  71. package/lib/orchestrate/test/histories/transformTestWriteHistories.d.ts +3 -1
  72. package/lib/orchestrate/test/structures/IAutoBeTestScenarioApplication.d.ts +28 -1
  73. package/package.json +6 -6
  74. package/src/AutoBeMockAgent.ts +1 -0
  75. package/src/constants/AutoBeSystemPromptConstant.ts +10 -9
  76. package/src/context/AutoBeContext.ts +2 -0
  77. package/src/factory/createAutoBeContext.ts +2 -1
  78. package/src/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.ts +39 -0
  79. package/src/orchestrate/interface/orchestrateInterfaceEndpoints.ts +5 -1
  80. package/src/orchestrate/interface/orchestrateInterfaceEndpointsReview.ts +95 -0
  81. package/src/orchestrate/interface/orchestrateInterfaceOperationsReview.ts +118 -10
  82. package/src/orchestrate/interface/structures/IAutoBeInterfaceEndpointsReviewApplication.ts +65 -0
  83. package/src/orchestrate/interface/structures/IAutoBeInterfaceOperationsReviewApplication.ts +42 -0
  84. package/src/orchestrate/realize/orchestrateRealizeScenario.ts +7 -3
  85. package/src/orchestrate/realize/structures/IAutoBeRealizeScenarioApplication.ts +6 -2
  86. package/src/orchestrate/realize/structures/IAutoBeRealizeWriteApplication.ts +10 -5
  87. package/src/orchestrate/test/compile/getTestExternalDeclarations.ts +2 -0
  88. package/src/orchestrate/test/histories/transformTestCorrectHistories.ts +46 -34
  89. package/src/orchestrate/test/histories/transformTestWriteHistories.ts +24 -4
  90. package/src/orchestrate/test/orchestrateTestCorrect.ts +5 -1
  91. package/src/orchestrate/test/orchestrateTestWrite.ts +1 -1
  92. package/src/orchestrate/test/structures/IAutoBeTestScenarioApplication.ts +28 -1
  93. package/lib/agent/src/orchestrate/test/histories/transformTestHistories.d.ts +0 -3
  94. package/lib/agent/src/orchestrate/test/histories/transformTestHistories.js +0 -75
  95. package/lib/agent/src/orchestrate/test/histories/transformTestHistories.js.map +0 -1
  96. package/lib/orchestrate/test/histories/transformTestHistories.d.ts +0 -3
  97. package/src/orchestrate/test/histories/transformTestHistories.ts +0 -78
@@ -47,13 +47,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
47
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.orchestrateInterfaceOperationsReview = orchestrateInterfaceOperationsReview;
49
49
  const __typia_transform__validateReport = __importStar(require("typia/lib/internal/_validateReport.js"));
50
+ const __typia_transform__llmApplicationFinalize = __importStar(require("typia/lib/internal/_llmApplicationFinalize.js"));
50
51
  const typia_1 = __importDefault(require("typia"));
51
52
  const uuid_1 = require("uuid");
52
53
  const transformInterfaceOperationsReviewHistories_1 = require("./histories/transformInterfaceOperationsReviewHistories");
53
54
  function orchestrateInterfaceOperationsReview(ctx, operations, progress) {
54
55
  return __awaiter(this, void 0, void 0, function* () {
55
- var _a, _b;
56
+ var _a, _b, _c;
56
57
  try {
58
+ const files = (_a = ctx.state().prisma) === null || _a === void 0 ? void 0 : _a.result.data.files;
57
59
  const pointer = {
58
60
  value: null,
59
61
  };
@@ -62,6 +64,7 @@ function orchestrateInterfaceOperationsReview(ctx, operations, progress) {
62
64
  histories: (0, transformInterfaceOperationsReviewHistories_1.transformInterfaceOperationsReviewHistories)(ctx, operations),
63
65
  controller: createReviewController({
64
66
  model: ctx.model,
67
+ prismaSchemas: files,
65
68
  build: (next) => {
66
69
  pointer.value = next;
67
70
  },
@@ -84,7 +87,7 @@ function orchestrateInterfaceOperationsReview(ctx, operations, progress) {
84
87
  content,
85
88
  tokenUsage,
86
89
  created_at: new Date().toISOString(),
87
- step: (_b = (_a = ctx.state().analyze) === null || _a === void 0 ? void 0 : _a.step) !== null && _b !== void 0 ? _b : 0,
90
+ step: (_c = (_b = ctx.state().analyze) === null || _b === void 0 ? void 0 : _b.step) !== null && _c !== void 0 ? _c : 0,
88
91
  total: progress.total,
89
92
  completed: ++progress.completed,
90
93
  });
@@ -98,7 +101,373 @@ function orchestrateInterfaceOperationsReview(ctx, operations, progress) {
98
101
  });
99
102
  }
100
103
  function createReviewController(props) {
101
- const application = collection[props.model === "chatgpt" ? "chatgpt" : "claude"];
104
+ const validate = (next) => {
105
+ const result = (() => { const _io0 = input => "string" === typeof input.review && "string" === typeof input.plan && (Array.isArray(input.content) && input.content.every(elem => "object" === typeof elem && null !== elem && _io1(elem))); const _io1 = input => "string" === typeof input.prisma_schemas && "string" === typeof input.model_name && (null === input.soft_delete_column || "string" === typeof input.soft_delete_column) && "string" === typeof input.description && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && "string" === typeof input.specification && "string" === typeof input.summary && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && (null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) && 1 <= input.authorizationRole.length)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
106
+ if ("number" === input.type)
107
+ return _io4(input);
108
+ else if ("integer" === input.type)
109
+ return _io3(input);
110
+ else if ("string" === input.type)
111
+ return _io5(input);
112
+ else
113
+ return false;
114
+ })(); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.review || _report(_exceptionable, {
115
+ path: _path + ".review",
116
+ expected: "string",
117
+ value: input.review
118
+ }), "string" === typeof input.plan || _report(_exceptionable, {
119
+ path: _path + ".plan",
120
+ expected: "string",
121
+ value: input.plan
122
+ }), (Array.isArray(input.content) || _report(_exceptionable, {
123
+ path: _path + ".content",
124
+ expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
125
+ value: input.content
126
+ })) && input.content.map((elem, _index3) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
127
+ path: _path + ".content[" + _index3 + "]",
128
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
129
+ value: elem
130
+ })) && _vo1(elem, _path + ".content[" + _index3 + "]", true && _exceptionable) || _report(_exceptionable, {
131
+ path: _path + ".content[" + _index3 + "]",
132
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
133
+ value: elem
134
+ })).every(flag => flag) || _report(_exceptionable, {
135
+ path: _path + ".content",
136
+ expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
137
+ value: input.content
138
+ })].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.prisma_schemas || _report(_exceptionable, {
139
+ path: _path + ".prisma_schemas",
140
+ expected: "string",
141
+ value: input.prisma_schemas
142
+ }), "string" === typeof input.model_name || _report(_exceptionable, {
143
+ path: _path + ".model_name",
144
+ expected: "string",
145
+ value: input.model_name
146
+ }), null === input.soft_delete_column || "string" === typeof input.soft_delete_column || _report(_exceptionable, {
147
+ path: _path + ".soft_delete_column",
148
+ expected: "(null | string)",
149
+ value: input.soft_delete_column
150
+ }), "string" === typeof input.description || _report(_exceptionable, {
151
+ path: _path + ".description",
152
+ expected: "string",
153
+ value: input.description
154
+ }), "string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
155
+ path: _path + ".name",
156
+ expected: "string & CamelPattern",
157
+ value: input.name
158
+ })) || _report(_exceptionable, {
159
+ path: _path + ".name",
160
+ expected: "(string & CamelPattern)",
161
+ value: input.name
162
+ }), "string" === typeof input.specification || _report(_exceptionable, {
163
+ path: _path + ".specification",
164
+ expected: "string",
165
+ value: input.specification
166
+ }), "string" === typeof input.summary || _report(_exceptionable, {
167
+ path: _path + ".summary",
168
+ expected: "string",
169
+ value: input.summary
170
+ }), "string" === typeof input.path && (RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) || _report(_exceptionable, {
171
+ path: _path + ".path",
172
+ expected: "string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">",
173
+ value: input.path
174
+ })) || _report(_exceptionable, {
175
+ path: _path + ".path",
176
+ expected: "(string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">)",
177
+ value: input.path
178
+ }), (Array.isArray(input.parameters) || _report(_exceptionable, {
179
+ path: _path + ".parameters",
180
+ expected: "Array<AutoBeOpenApi.IParameter>",
181
+ value: input.parameters
182
+ })) && input.parameters.map((elem, _index4) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
183
+ path: _path + ".parameters[" + _index4 + "]",
184
+ expected: "AutoBeOpenApi.IParameter",
185
+ value: elem
186
+ })) && _vo2(elem, _path + ".parameters[" + _index4 + "]", true && _exceptionable) || _report(_exceptionable, {
187
+ path: _path + ".parameters[" + _index4 + "]",
188
+ expected: "AutoBeOpenApi.IParameter",
189
+ value: elem
190
+ })).every(flag => flag) || _report(_exceptionable, {
191
+ path: _path + ".parameters",
192
+ expected: "Array<AutoBeOpenApi.IParameter>",
193
+ value: input.parameters
194
+ }), null === input.requestBody || ("object" === typeof input.requestBody && null !== input.requestBody || _report(_exceptionable, {
195
+ path: _path + ".requestBody",
196
+ expected: "(AutoBeOpenApi.IRequestBody | null)",
197
+ value: input.requestBody
198
+ })) && _vo6(input.requestBody, _path + ".requestBody", true && _exceptionable) || _report(_exceptionable, {
199
+ path: _path + ".requestBody",
200
+ expected: "(AutoBeOpenApi.IRequestBody | null)",
201
+ value: input.requestBody
202
+ }), null === input.responseBody || ("object" === typeof input.responseBody && null !== input.responseBody || _report(_exceptionable, {
203
+ path: _path + ".responseBody",
204
+ expected: "(AutoBeOpenApi.IResponseBody | null)",
205
+ value: input.responseBody
206
+ })) && _vo7(input.responseBody, _path + ".responseBody", true && _exceptionable) || _report(_exceptionable, {
207
+ path: _path + ".responseBody",
208
+ expected: "(AutoBeOpenApi.IResponseBody | null)",
209
+ value: input.responseBody
210
+ }), null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) || _report(_exceptionable, {
211
+ path: _path + ".authorizationRole",
212
+ expected: "string & CamelPattern",
213
+ value: input.authorizationRole
214
+ })) && (1 <= input.authorizationRole.length || _report(_exceptionable, {
215
+ path: _path + ".authorizationRole",
216
+ expected: "string & MinLength<1>",
217
+ value: input.authorizationRole
218
+ })) || _report(_exceptionable, {
219
+ path: _path + ".authorizationRole",
220
+ expected: "((string & CamelPattern & MinLength<1>) | null)",
221
+ value: input.authorizationRole
222
+ }), "get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method || _report(_exceptionable, {
223
+ path: _path + ".method",
224
+ expected: "(\"delete\" | \"get\" | \"patch\" | \"post\" | \"put\")",
225
+ value: input.method
226
+ })].every(flag => flag); const _vo2 = (input, _path, _exceptionable = true) => ["string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
227
+ path: _path + ".name",
228
+ expected: "string & CamelPattern",
229
+ value: input.name
230
+ })) || _report(_exceptionable, {
231
+ path: _path + ".name",
232
+ expected: "(string & CamelPattern)",
233
+ value: input.name
234
+ }), "string" === typeof input.description || _report(_exceptionable, {
235
+ path: _path + ".description",
236
+ expected: "string",
237
+ value: input.description
238
+ }), ("object" === typeof input.schema && null !== input.schema || _report(_exceptionable, {
239
+ path: _path + ".schema",
240
+ expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
241
+ value: input.schema
242
+ })) && _vu0(input.schema, _path + ".schema", true && _exceptionable) || _report(_exceptionable, {
243
+ path: _path + ".schema",
244
+ expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
245
+ value: input.schema
246
+ })].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000 || _report(_exceptionable, {
247
+ path: _path + ".minimum",
248
+ expected: "number & Type<\"int64\">",
249
+ value: input.minimum
250
+ })) || _report(_exceptionable, {
251
+ path: _path + ".minimum",
252
+ expected: "((number & Type<\"int64\">) | undefined)",
253
+ value: input.minimum
254
+ }), undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000 || _report(_exceptionable, {
255
+ path: _path + ".maximum",
256
+ expected: "number & Type<\"int64\">",
257
+ value: input.maximum
258
+ })) || _report(_exceptionable, {
259
+ path: _path + ".maximum",
260
+ expected: "((number & Type<\"int64\">) | undefined)",
261
+ value: input.maximum
262
+ }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
263
+ path: _path + ".exclusiveMinimum",
264
+ expected: "(number | undefined)",
265
+ value: input.exclusiveMinimum
266
+ }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
267
+ path: _path + ".exclusiveMaximum",
268
+ expected: "(number | undefined)",
269
+ value: input.exclusiveMaximum
270
+ }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 || _report(_exceptionable, {
271
+ path: _path + ".multipleOf",
272
+ expected: "number & Type<\"uint64\">",
273
+ value: input.multipleOf
274
+ })) && (0 < input.multipleOf || _report(_exceptionable, {
275
+ path: _path + ".multipleOf",
276
+ expected: "number & ExclusiveMinimum<0>",
277
+ value: input.multipleOf
278
+ })) || _report(_exceptionable, {
279
+ path: _path + ".multipleOf",
280
+ expected: "((number & Type<\"uint64\"> & ExclusiveMinimum<0>) | undefined)",
281
+ value: input.multipleOf
282
+ }), "integer" === input.type || _report(_exceptionable, {
283
+ path: _path + ".type",
284
+ expected: "\"integer\"",
285
+ value: input.type
286
+ })].every(flag => flag); const _vo4 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum || _report(_exceptionable, {
287
+ path: _path + ".minimum",
288
+ expected: "(number | undefined)",
289
+ value: input.minimum
290
+ }), undefined === input.maximum || "number" === typeof input.maximum || _report(_exceptionable, {
291
+ path: _path + ".maximum",
292
+ expected: "(number | undefined)",
293
+ value: input.maximum
294
+ }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
295
+ path: _path + ".exclusiveMinimum",
296
+ expected: "(number | undefined)",
297
+ value: input.exclusiveMinimum
298
+ }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
299
+ path: _path + ".exclusiveMaximum",
300
+ expected: "(number | undefined)",
301
+ value: input.exclusiveMaximum
302
+ }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (0 < input.multipleOf || _report(_exceptionable, {
303
+ path: _path + ".multipleOf",
304
+ expected: "number & ExclusiveMinimum<0>",
305
+ value: input.multipleOf
306
+ })) || _report(_exceptionable, {
307
+ path: _path + ".multipleOf",
308
+ expected: "((number & ExclusiveMinimum<0>) | undefined)",
309
+ value: input.multipleOf
310
+ }), "number" === input.type || _report(_exceptionable, {
311
+ path: _path + ".type",
312
+ expected: "\"number\"",
313
+ value: input.type
314
+ })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || "string" === typeof input.format || _report(_exceptionable, {
315
+ path: _path + ".format",
316
+ expected: "(string | undefined)",
317
+ value: input.format
318
+ }), undefined === input.pattern || "string" === typeof input.pattern || _report(_exceptionable, {
319
+ path: _path + ".pattern",
320
+ expected: "(string | undefined)",
321
+ value: input.pattern
322
+ }), undefined === input.contentMediaType || "string" === typeof input.contentMediaType || _report(_exceptionable, {
323
+ path: _path + ".contentMediaType",
324
+ expected: "(string | undefined)",
325
+ value: input.contentMediaType
326
+ }), undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000 || _report(_exceptionable, {
327
+ path: _path + ".minLength",
328
+ expected: "number & Type<\"uint64\">",
329
+ value: input.minLength
330
+ })) || _report(_exceptionable, {
331
+ path: _path + ".minLength",
332
+ expected: "((number & Type<\"uint64\">) | undefined)",
333
+ value: input.minLength
334
+ }), undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000 || _report(_exceptionable, {
335
+ path: _path + ".maxLength",
336
+ expected: "number & Type<\"uint64\">",
337
+ value: input.maxLength
338
+ })) || _report(_exceptionable, {
339
+ path: _path + ".maxLength",
340
+ expected: "((number & Type<\"uint64\">) | undefined)",
341
+ value: input.maxLength
342
+ }), "string" === input.type || _report(_exceptionable, {
343
+ path: _path + ".type",
344
+ expected: "\"string\"",
345
+ value: input.type
346
+ })].every(flag => flag); const _vo6 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
347
+ path: _path + ".description",
348
+ expected: "string",
349
+ value: input.description
350
+ }), "string" === typeof input.typeName || _report(_exceptionable, {
351
+ path: _path + ".typeName",
352
+ expected: "string",
353
+ value: input.typeName
354
+ })].every(flag => flag); const _vo7 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
355
+ path: _path + ".description",
356
+ expected: "string",
357
+ value: input.description
358
+ }), "string" === typeof input.typeName || _report(_exceptionable, {
359
+ path: _path + ".typeName",
360
+ expected: "string",
361
+ value: input.typeName
362
+ })].every(flag => flag); const _vu0 = (input, _path, _exceptionable = true) => (() => {
363
+ if ("number" === input.type)
364
+ return _vo4(input, _path, true && _exceptionable);
365
+ else if ("integer" === input.type)
366
+ return _vo3(input, _path, true && _exceptionable);
367
+ else if ("string" === input.type)
368
+ return _vo5(input, _path, true && _exceptionable);
369
+ else
370
+ return _report(_exceptionable, {
371
+ path: _path,
372
+ expected: "(AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.IString)",
373
+ value: input
374
+ });
375
+ })(); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
376
+ if (false === __is(input)) {
377
+ errors = [];
378
+ _report = __typia_transform__validateReport._validateReport(errors);
379
+ ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
380
+ path: _path + "",
381
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
382
+ value: input
383
+ })) && _vo0(input, _path + "", true) || _report(true, {
384
+ path: _path + "",
385
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
386
+ value: input
387
+ }))(input, "$input", true);
388
+ const success = 0 === errors.length;
389
+ return success ? {
390
+ success,
391
+ data: input
392
+ } : {
393
+ success,
394
+ errors,
395
+ data: input
396
+ };
397
+ }
398
+ return {
399
+ success: true,
400
+ data: input
401
+ };
402
+ }; })()(next);
403
+ if (result.success === false)
404
+ return result;
405
+ const errors = [];
406
+ const models = props.prismaSchemas.flatMap((schema) => schema.models);
407
+ result.data.content.forEach((op, index) => {
408
+ // Check if summary or description mentions soft delete
409
+ const mentionsSoftDelete = (op.summary && /soft[\s-]?delet/i.test(op.summary)) ||
410
+ (op.description && /soft[\s-]?delet/i.test(op.description));
411
+ if (op.method === "delete") {
412
+ const model = models.find((model) => model.name === op.model_name);
413
+ if (mentionsSoftDelete) {
414
+ // If soft delete is mentioned but no soft_delete_column is specified
415
+ if (!op.soft_delete_column) {
416
+ // Check if any soft-delete capable column exists in the model
417
+ const hasSoftDeleteCapableColumn = model === null || model === void 0 ? void 0 : model.plainFields.some((field) => /delete|deleted|deleted_at|deletedAt|is_deleted|isDeleted/i.test(field.name));
418
+ if (hasSoftDeleteCapableColumn) {
419
+ errors.push({
420
+ expected: `Soft delete column to be specified or summary/description to not mention soft delete`,
421
+ value: "null",
422
+ description: `Mismatch: Operation mentions soft delete but soft_delete_column is not specified, while model has soft-delete capable columns`,
423
+ path: `$input.content[${index}].soft_delete_column`,
424
+ });
425
+ }
426
+ else {
427
+ errors.push({
428
+ expected: `Summary/description to not mention soft delete when model lacks soft-delete capability`,
429
+ value: `${op.summary || ""} ${op.description || ""}`,
430
+ description: `Mismatch: Operation mentions soft delete but model '${op.model_name}' has no soft-delete capable columns`,
431
+ path: `$input.content[${index}].summary || $input.content[${index}].description`,
432
+ });
433
+ }
434
+ }
435
+ else {
436
+ // If soft_delete_column is specified, check if it exists in the model
437
+ const column = model === null || model === void 0 ? void 0 : model.plainFields.find((el) => el.name === op.soft_delete_column);
438
+ if (!column) {
439
+ errors.push({
440
+ expected: `Field '${op.soft_delete_column}' to exist in model or operation to not mention soft delete`,
441
+ value: "undefined",
442
+ description: `Mismatch: Either the field '${op.soft_delete_column}' should exist in model '${op.model_name}', or the operation should not mention soft delete`,
443
+ path: `$input.content[${index}].soft_delete_column || $input.content[${index}].summary || $input.content[${index}].description`,
444
+ });
445
+ }
446
+ }
447
+ }
448
+ // Also check if soft_delete_column is specified without mentioning soft delete
449
+ if (op.soft_delete_column && !mentionsSoftDelete) {
450
+ errors.push({
451
+ expected: `Consistency between soft_delete_column and operation description`,
452
+ value: `soft_delete_column: ${op.soft_delete_column}`,
453
+ description: `Mismatch: soft_delete_column is specified but soft delete is not mentioned in summary/description`,
454
+ path: `$input.content[${index}]`,
455
+ });
456
+ }
457
+ }
458
+ });
459
+ // not implemented
460
+ if (errors.length !== 0) {
461
+ console.log(JSON.stringify(errors, null, 2));
462
+ return {
463
+ success: false,
464
+ errors,
465
+ data: next,
466
+ };
467
+ }
468
+ return result;
469
+ };
470
+ const application = collection[props.model === "chatgpt" ? "chatgpt" : "claude"](validate);
102
471
  return {
103
472
  protocol: "class",
104
473
  name: "review",
@@ -111,1238 +480,1304 @@ function createReviewController(props) {
111
480
  };
112
481
  }
113
482
  const collection = {
114
- chatgpt: {
115
- model: "chatgpt",
116
- options: {
117
- reference: true,
118
- strict: false,
119
- separate: null
120
- },
121
- functions: [
122
- {
123
- name: "reviewOperations",
124
- parameters: {
125
- description: " Collection of operations to review with their validation\nresults\n\n------------------------------\n\nDescription of the current {@link IAutoBeInterfaceOperationsReviewApplication.IProps} type:\n\n> Properties for API operation review and improvement process.\n> \n> Contains both the input operations to be reviewed and the outputs generated\n> by the Interface Operations Review Agent, which will be published as part\n> of the AutoBeInterfaceOperationsReviewEvent.",
126
- type: "object",
127
- properties: {
128
- review: {
129
- description: "Comprehensive review analysis with prioritized findings.\n\nSystematic assessment organized by severity levels (CRITICAL, HIGH,\nMEDIUM, LOW):\n\n- **Security Analysis**: Authentication boundary violations, exposed\n passwords/tokens, unauthorized data access patterns, SQL injection\n risks\n- **Logic Validation**: Return type consistency (list operations returning\n arrays, single retrieval returning single items), HTTP method semantics\n alignment, parameter usage verification\n- **Schema Compliance**: Field existence in Prisma schema, type accuracy,\n relationship validity, required field handling\n- **Quality Assessment**: Documentation completeness, naming conventions,\n error handling patterns, pagination standards\n\nEach finding includes specific examples, current vs expected behavior,\nand concrete fix recommendations. Critical security issues and logical\ncontradictions are highlighted for immediate attention.",
130
- type: "string"
131
- },
132
- plan: {
133
- description: "Prioritized action plan for identified issues.\n\nStructured improvement strategy categorized by severity:\n\n- **Immediate Actions (CRITICAL)**: Security vulnerabilities that must be\n fixed before production (password exposure, missing authorization,\n authentication bypass risks)\n- **Required Fixes (HIGH)**: Functional issues affecting API correctness\n (wrong return types, missing required fields, schema mismatches)\n- **Recommended Improvements (MEDIUM)**: Quality enhancements for better\n API design (validation rules, format specifications, consistency)\n- **Optional Enhancements (LOW)**: Documentation and usability improvements\n\nIf all operations pass review without issues, contains: \"No improvements\nrequired. All operations meet AutoBE standards.\"\n\nEach action item includes the specific operation path, the exact change\nneeded, and the rationale for the modification.",
134
- type: "string"
135
- },
136
- content: {
137
- description: "Production-ready operations with all critical issues resolved.\n\nFinal API operations after systematic enhancement:\n\n- **Security Fixes Applied**: All authentication boundaries enforced,\n sensitive data removed from responses, proper authorization\n implemented\n- **Logic Corrections Made**: Return types match operation intent, HTTP\n methods align with semantics, parameters properly utilized\n- **Schema Alignment Verified**: All fields exist in Prisma schema, types\n correctly mapped, relationships properly defined\n- **Quality Improvements Added**: Enhanced documentation, format\n specifications, validation rules, consistent naming patterns\n\nIf no issues were found during review, this contains the exact original\noperations unchanged. These operations are validated and ready for schema\ngeneration and subsequent implementation phases.",
138
- type: "array",
139
- items: {
140
- $ref: "#/$defs/IAutoBeInterfaceOperationsReviewApplication.IOperation"
483
+ chatgpt: (validate) => (() => {
484
+ const application = {
485
+ model: "chatgpt",
486
+ options: {
487
+ reference: true,
488
+ strict: false,
489
+ separate: null
490
+ },
491
+ functions: [
492
+ {
493
+ name: "reviewOperations",
494
+ parameters: {
495
+ description: " Collection of operations to review with their validation\nresults\n\n------------------------------\n\nDescription of the current {@link IAutoBeInterfaceOperationsReviewApplication.IProps} type:\n\n> Properties for API operation review and improvement process.\n> \n> Contains both the input operations to be reviewed and the outputs generated\n> by the Interface Operations Review Agent, which will be published as part\n> of the AutoBeInterfaceOperationsReviewEvent.",
496
+ type: "object",
497
+ properties: {
498
+ review: {
499
+ description: "Comprehensive review analysis with prioritized findings.\n\nSystematic assessment organized by severity levels (CRITICAL, HIGH,\nMEDIUM, LOW):\n\n- **Security Analysis**: Authentication boundary violations, exposed\n passwords/tokens, unauthorized data access patterns, SQL injection\n risks\n- **Logic Validation**: Return type consistency (list operations returning\n arrays, single retrieval returning single items), HTTP method semantics\n alignment, parameter usage verification\n- **Schema Compliance**: Field existence in Prisma schema, type accuracy,\n relationship validity, required field handling\n- **Quality Assessment**: Documentation completeness, naming conventions,\n error handling patterns, pagination standards\n\nEach finding includes specific examples, current vs expected behavior,\nand concrete fix recommendations. Critical security issues and logical\ncontradictions are highlighted for immediate attention.",
500
+ type: "string"
501
+ },
502
+ plan: {
503
+ description: "Prioritized action plan for identified issues.\n\nStructured improvement strategy categorized by severity:\n\n- **Immediate Actions (CRITICAL)**: Security vulnerabilities that must be\n fixed before production (password exposure, missing authorization,\n authentication bypass risks)\n- **Required Fixes (HIGH)**: Functional issues affecting API correctness\n (wrong return types, missing required fields, schema mismatches)\n- **Recommended Improvements (MEDIUM)**: Quality enhancements for better\n API design (validation rules, format specifications, consistency)\n- **Optional Enhancements (LOW)**: Documentation and usability improvements\n\nIf all operations pass review without issues, contains: \"No improvements\nrequired. All operations meet AutoBE standards.\"\n\nEach action item includes the specific operation path, the exact change\nneeded, and the rationale for the modification.",
504
+ type: "string"
505
+ },
506
+ content: {
507
+ description: "Production-ready operations with all critical issues resolved.\n\nFinal API operations after systematic enhancement:\n\n- **Security Fixes Applied**: All authentication boundaries enforced,\n sensitive data removed from responses, proper authorization\n implemented\n- **Logic Corrections Made**: Return types match operation intent, HTTP\n methods align with semantics, parameters properly utilized\n- **Schema Alignment Verified**: All fields exist in Prisma schema, types\n correctly mapped, relationships properly defined\n- **Quality Improvements Added**: Enhanced documentation, format\n specifications, validation rules, consistent naming patterns\n\nIf no issues were found during review, this contains the exact original\noperations unchanged. These operations are validated and ready for schema\ngeneration and subsequent implementation phases.",
508
+ type: "array",
509
+ items: {
510
+ $ref: "#/$defs/IAutoBeInterfaceOperationsReviewApplication.IOperation"
511
+ }
141
512
  }
142
- }
143
- },
144
- required: [
145
- "review",
146
- "plan",
147
- "content"
148
- ],
149
- additionalProperties: false,
150
- $defs: {
151
- "IAutoBeInterfaceOperationsReviewApplication.IOperation": {
152
- description: "Operation of the Restful API.\n\nThis interface defines a single API endpoint with its HTTP {@link method},\n{@link path}, {@link parameters path parameters},\n{@link requestBody request body}, and {@link responseBody} structure. It\ncorresponds to an individual operation in the paths section of an OpenAPI\ndocument.\n\nEach operation requires a detailed explanation of its purpose through the\nreason and description fields, making it clear why the API was designed and\nhow it should be used.\n\nAll request bodies and responses for this operation must be object types\nand must reference named types defined in the components section. The\ncontent-type is always `application/json`. For file upload/download\noperations, use `string & tags.Format<\"uri\">` in the appropriate schema\ninstead of binary data formats.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"/shoppings/customers/orders\": {\n \"post\": {\n \"description\": \"Create a new order application from shopping cart...\",\n \"parameters\": [...],\n \"requestBody\": {...},\n \"responses\": {...}\n }\n }\n}\n```",
153
- type: "object",
154
- properties: {
155
- prisma_schemas: {
156
- description: "Prisma schema models relevant to this operation.\n\nContains the complete Prisma schema definitions for all entities involved\nin this operation, including their fields, relations, and database\nconstraints. This enables comprehensive validation and schema-aware\noperation design.\n\nThe schema information serves multiple critical purposes:\n\n- **Field Verification**: Ensures all referenced fields actually exist in\n the database schema and have the correct types\n- **Relationship Validation**: Confirms that entity relationships are\n properly defined and can support the operation's data access patterns\n- **Soft-Delete Detection**: For DELETE operations, identifies whether\n entities have soft-delete fields (deleted_at, is_deleted, etc.) to\n determine if the operation should perform logical deletion instead of\n physical removal\n- **Constraint Awareness**: Understands unique constraints, required\n fields, and default values to generate accurate request/response\n schemas\n\nExample content might include:\n\n```prisma\nmodel User {\n id String",
157
- type: "string"
158
- },
159
- description: {
160
- description: "Detailed description about the API operation.\n\nIMPORTANT: This field MUST be extensively detailed and MUST reference the\ndescription comments from the related Prisma DB schema tables and\ncolumns. The description should be organized into MULTIPLE PARAGRAPHS\nseparated by line breaks to improve readability and comprehension.\n\nFor example, include separate paragraphs for:\n\n- The purpose and overview of the API operation\n- Security considerations and user permissions\n- Relationship to underlying database entities\n- Validation rules and business logic\n- Related API operations that might be used together with this one\n- Expected behavior and error handling\n\nWhen writing the description, be sure to incorporate the corresponding DB\nschema's description comments, matching the level of detail and style of\nthose comments. This ensures consistency between the API documentation\nand database structure.\n\nIf there's a dependency to other APIs, please describe the dependency API\noperation in this field with detailed reason. For example, if this API\noperation needs a pre-execution of other API operation, it must be\nexplicitly described.\n\n- `GET /shoppings/customers/sales` must be pre-executed to get entire list\n of summarized sales. Detailed sale information would be obtained by\n specifying the sale ID in the path parameter.\n\n> MUST be written in English. Never use other languages.",
161
- type: "string"
162
- },
163
- name: {
164
- description: "Functional name of the API endpoint.\n\nThis is a semantic identifier that represents the primary function or\npurpose of the API endpoint. It serves as a canonical name that can be\nused for code generation, SDK method names, and internal references.\n\n## Reserved Word Restrictions\n\nCRITICAL: The name MUST NOT be a TypeScript/JavaScript reserved word, as\nit will be used as a class method name in generated code. Avoid names\nlike:\n\n- `delete`, `for`, `if`, `else`, `while`, `do`, `switch`, `case`, `break`\n- `continue`, `function`, `return`, `with`, `in`, `of`, `instanceof`\n- `typeof`, `void`, `var`, `let`, `const`, `class`, `extends`, `import`\n- `export`, `default`, `try`, `catch`, `finally`, `throw`, `new`\n- `super`, `this`, `null`, `true`, `false`, `async`, `await`\n- `yield`, `static`, `private`, `protected`, `public`, `implements`\n- `interface`, `package`, `enum`, `debugger`\n\nInstead, use alternative names for these operations:\n\n- Use `erase` instead of `delete`\n- Use `iterate` instead of `for`\n- Use `when` instead of `if`\n- Use `cls` instead of `class`\n\n## Standard Endpoint Names\n\nUse these conventional names based on the endpoint's primary function:\n\n- **`index`**: List/search operations that return multiple entities\n\n - Typically used with PATCH method for complex queries\n - Example: `PATCH /users` \u2192 `name: \"index\"`\n- **`at`**: Retrieve a specific entity by identifier\n\n - Typically used with GET method on single resource\n - Example: `GET /users/{userId}` \u2192 `name: \"at\"`\n- **`create`**: Create a new entity\n\n - Typically used with POST method\n - Example: `POST /users` \u2192 `name: \"create\"`\n- **`update`**: Update an existing entity\n\n - Typically used with PUT method\n - Example: `PUT /users/{userId}` \u2192 `name: \"update\"`\n- **`erase`**: Delete/remove an entity (NOT `delete` - reserved word!)\n\n - Typically used with DELETE method\n - Example: `DELETE /users/{userId}` \u2192 `name: \"erase\"`\n\n## Custom Endpoint Names\n\nFor specialized operations beyond basic CRUD, use descriptive verbs:\n\n- **`activate`**: Enable or turn on a feature/entity\n- **`deactivate`**: Disable or turn off a feature/entity\n- **`approve`**: Approve a request or entity\n- **`reject`**: Reject a request or entity\n- **`publish`**: Make content publicly available\n- **`archive`**: Move to archived state\n- **`restore`**: Restore from archived/deleted state\n- **`duplicate`**: Create a copy of an entity\n- **`transfer`**: Move ownership or change assignment\n- **`validate`**: Validate data or state\n- **`process`**: Execute a business process or workflow\n- **`export`**: Generate downloadable data\n- **`import`**: Process uploaded data\n\n## Naming Guidelines\n\n- MUST use camelCase naming convention\n- Use singular verb forms\n- Be concise but descriptive\n- Avoid abbreviations unless widely understood\n- Ensure the name clearly represents the endpoint's primary action\n- For nested resources, focus on the action rather than hierarchy\n- NEVER use JavaScript/TypeScript reserved words\n\nValid Examples:\n\n- `index`, `create`, `update`, `erase` (single word)\n- `updatePassword`, `cancelOrder`, `publishArticle` (camelCase)\n- `validateEmail`, `generateReport`, `exportData` (camelCase)\n\nInvalid Examples:\n\n- `update_password` (snake_case not allowed)\n- `UpdatePassword` (PascalCase not allowed)\n- `update-password` (kebab-case not allowed)\n\nPath to Name Examples:\n\n- `GET /shopping/orders/{orderId}/items` \u2192 `name: \"index\"` (lists items)\n- `POST /shopping/orders/{orderId}/cancel` \u2192 `name: \"cancel\"`\n- `PUT /users/{userId}/password` \u2192 `name: \"updatePassword\"`\n\n## Uniqueness Rule\n\nThe `name` must be unique within the API's accessor namespace. The\naccessor is formed by combining the path segments (excluding parameters)\nwith the operation name.\n\nAccessor formation:\n\n1. Extract non-parameter segments from the path (remove `{...}` parts)\n2. Join segments with dots\n3. Append the operation name\n\nExamples:\n\n- Path: `/shopping/sale/{saleId}/review/{reviewId}`, Name: `at` \u2192 Accessor:\n `shopping.sale.review.at`\n- Path: `/users/{userId}/posts`, Name: `index` \u2192 Accessor:\n `users.posts.index`\n- Path: `/auth/login`, Name: `signIn` \u2192 Accessor: `auth.login.signIn`\n\nEach accessor must be globally unique across the entire API. This ensures\noperations can be uniquely identified in generated SDKs and prevents\nnaming conflicts.\n\n\n@pattern ^[a-z][a-zA-Z0-9]*$",
165
- type: "string"
166
- },
167
- specification: {
168
- description: "Specification of the API operation.\n\nBefore defining the API operation interface, please describe what you're\nplanning to write in this `specification` field.\n\nThe specification must be fully detailed and clear, so that anyone can\nunderstand the purpose and functionality of the API operation and its\nrelated components (e.g., {@link path}, {@link parameters},\n{@link requestBody}).\n\nIMPORTANT: The specification MUST identify which Prisma DB table this\noperation is associated with, helping ensure complete coverage of all\ndatabase entities.",
169
- type: "string"
170
- },
171
- summary: {
172
- description: "Short summary of the API operation.\n\nThis should be a concise description of the API operation, typically one\nsentence long. It should provide a quick overview of what the API does\nwithout going into too much detail.\n\nThis summary will be used in the OpenAPI documentation to give users a\nquick understanding of the API operation's purpose.\n\nIMPORTANT: The summary should clearly indicate which Prisma DB table this\noperation relates to, helping to ensure all tables have API coverage.\n\n> MUST be written in English. Never use other languages",
173
- type: "string"
174
- },
175
- path: {
176
- description: "HTTP path of the API operation.\n\nThe URL path for accessing this API operation, using path parameters\nenclosed in curly braces (e.g., `/shoppings/customers/sales/{saleId}`).\n\nIt must be corresponded to the {@link parameters path parameters}.\n\nThe path structure should clearly indicate which database entity this\noperation is manipulating, helping to ensure all entities have\nappropriate API coverage.\n\nPath validation rules:\n\n- Must start with a forward slash (/)\n- Can contain only: letters (a-z, A-Z), numbers (0-9), forward slashes (/),\n curly braces for parameters ({paramName}), hyphens (-), and underscores\n (_)\n- Parameters must be enclosed in curly braces: {paramName}\n- Resource names should be in camelCase\n- No quotes, spaces, or invalid special characters allowed\n- No domain or role-based prefixes\n\nValid examples:\n\n- \"/users\"\n- \"/users/{userId}\"\n- \"/articles/{articleId}/comments\"\n- \"/attachmentFiles\"\n- \"/orders/{orderId}/items/{itemId}\"\n\nInvalid examples:\n\n- \"'/users'\" (contains quotes)\n- \"/user profile\" (contains space)\n- \"/users/[userId]\" (wrong bracket format)\n- \"/admin/users\" (role prefix)\n- \"/api/v1/users\" (API prefix)\n\n\n@pattern ^\\/[a-zA-Z0-9\\/_{}.-]*$",
177
- type: "string"
178
- },
179
- parameters: {
180
- description: "List of path parameters.\n\nNote that, the {@link AutoBeOpenApi.IParameter.name identifier name} of\npath parameter must be corresponded to the\n{@link path API operation path}.\n\nFor example, if there's an API operation which has {@link path} of\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nits list of {@link AutoBeOpenApi.IParameter.name path parameters} must be\nlike:\n\n- `saleId`\n- `questionId`\n- `commentId`",
181
- type: "array",
182
- items: {
183
- $ref: "#/$defs/AutoBeOpenApi.IParameter"
184
- }
185
- },
186
- requestBody: {
187
- description: "Request body of the API operation.\n\nDefines the payload structure for the request. Contains a description and\nschema reference to define the expected input data.\n\nShould be `null` for operations that don't require a request body, such\nas most \"get\" operations.",
188
- anyOf: [
189
- {
190
- type: "null"
191
- },
192
- {
193
- $ref: "#/$defs/AutoBeOpenApi.IRequestBody"
194
- }
195
- ]
196
- },
197
- responseBody: {
198
- description: "Response body of the API operation.\n\nDefines the structure of the successful response data. Contains a\ndescription and schema reference for the returned data.\n\nShould be null for operations that don't return any data.",
199
- anyOf: [
200
- {
201
- type: "null"
202
- },
203
- {
204
- $ref: "#/$defs/AutoBeOpenApi.IResponseBody"
205
- }
206
- ]
207
- },
208
- authorizationRole: {
209
- description: "Authorization role required to access this API operation.\n\nThis field specifies which user role is allowed to access this endpoint.\nThe role name must correspond exactly to the actual roles defined in your\nsystem's Prisma schema.\n\n## Naming Convention\n\nRole names MUST use camelCase.\n\n## Role-Based Path Convention\n\nWhen authorizationRole is specified, it should align with the path\nstructure:\n\n- If authorizationRole is \"admin\" \u2192 path might be \"/admin/resources/{id}\"\n- If authorizationRole is \"seller\" \u2192 path might be \"/seller/products\"\n- Special case: For user's own resources, use path prefix \"/my/\" regardless\n of role\n\n## Important Guidelines\n\n- Set to `null` for public endpoints that require no authentication\n- Set to specific role string for role-restricted endpoints\n- The role name MUST match exactly with the user type/role defined in the\n database\n- This role will be used by the Realize Agent to generate appropriate\n decorator and authorization logic in the provider functions\n- The controller will apply the corresponding authentication decorator\n based on this role\n\n## Examples\n\n- `null` - Public endpoint, no authentication required\n- `\"user\"` - Any authenticated user can access\n- `\"admin\"` - Only admin users can access\n- `\"seller\"` - Only seller users can access\n- `\"moderator\"` - Only moderator users can access\n\nNote: The actual authentication/authorization implementation will be\nhandled by decorators at the controller level, and the provider function\nwill receive the authenticated user object with the appropriate type.",
210
- anyOf: [
211
- {
212
- type: "null"
213
- },
214
- {
215
- type: "string",
216
- description: "@minLength 1\n@pattern ^[a-z][a-zA-Z0-9]*$"
513
+ },
514
+ required: [
515
+ "review",
516
+ "plan",
517
+ "content"
518
+ ],
519
+ additionalProperties: false,
520
+ $defs: {
521
+ "IAutoBeInterfaceOperationsReviewApplication.IOperation": {
522
+ description: "Operation of the Restful API.\n\nThis interface defines a single API endpoint with its HTTP {@link method},\n{@link path}, {@link parameters path parameters},\n{@link requestBody request body}, and {@link responseBody} structure. It\ncorresponds to an individual operation in the paths section of an OpenAPI\ndocument.\n\nEach operation requires a detailed explanation of its purpose through the\nreason and description fields, making it clear why the API was designed and\nhow it should be used.\n\nAll request bodies and responses for this operation must be object types\nand must reference named types defined in the components section. The\ncontent-type is always `application/json`. For file upload/download\noperations, use `string & tags.Format<\"uri\">` in the appropriate schema\ninstead of binary data formats.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"/shoppings/customers/orders\": {\n \"post\": {\n \"description\": \"Create a new order application from shopping cart...\",\n \"parameters\": [...],\n \"requestBody\": {...},\n \"responses\": {...}\n }\n }\n}\n```",
523
+ type: "object",
524
+ properties: {
525
+ prisma_schemas: {
526
+ description: "Prisma schema models relevant to this operation.\n\nContains the complete Prisma schema definitions for all entities involved\nin this operation, including their fields, relations, and database\nconstraints. This enables comprehensive validation and schema-aware\noperation design.\n\nThe schema information serves multiple critical purposes:\n\n- **Field Verification**: Ensures all referenced fields actually exist in\n the database schema and have the correct types\n- **Relationship Validation**: Confirms that entity relationships are\n properly defined and can support the operation's data access patterns\n- **Soft-Delete Detection**: For DELETE operations, identifies whether\n entities have soft-delete fields (deleted_at, is_deleted, etc.) to\n determine if the operation should perform logical deletion instead of\n physical removal\n- **Constraint Awareness**: Understands unique constraints, required\n fields, and default values to generate accurate request/response\n schemas\n\nExample content might include:\n\n```prisma\nmodel User {\n id String",
527
+ type: "string"
528
+ },
529
+ model_name: {
530
+ description: "Primary Prisma model name for this operation.\n\nIdentifies the main database table/model that this operation targets.\nThis must match exactly with the Prisma model name defined in the schema.\nWhen soft deletion is specified, this model name indicates which table\nshould be soft-deleted.\n\nFor example:\n- In a \"GET /users/:id\" operation, this would be \"User\"\n- In a \"POST /articles\" operation, this would be \"Article\"\n- In a \"DELETE /comments/:id\" with soft delete, this specifies the \"Comment\" model to soft-delete\n\nThis property is essential for:\n- Determining the primary entity for CRUD operations\n- Identifying which table to apply soft deletion to\n- Validating operations against the correct Prisma model\n- Generating appropriate database queries and validations",
531
+ type: "string"
532
+ },
533
+ soft_delete_column: {
534
+ description: "Soft delete column name for the Prisma models.\n\nSpecifies the column name used for soft deletion in the database tables\nassociated with this operation. When set to a non-null value, it indicates\nthat the related entities support soft deletion through this column\n(typically a timestamp field like `deleted_at` or `deletedAt`).\n\nWhen null, it means the entities involved in this operation use hard\ndeletion or don't support deletion at all. This information is crucial\nfor generating appropriate CRUD operations and ensuring data integrity\npolicies are correctly implemented.\n\nCommon soft delete patterns:\n- `\"deleted_at\"`: Records deletion timestamp\n- `\"deletedAt\"`: Camel-cased deletion timestamp\n- `\"is_deleted\"`: Boolean flag for deletion status\n- `null`: No soft deletion (hard delete only)",
535
+ anyOf: [
536
+ {
537
+ type: "null"
538
+ },
539
+ {
540
+ type: "string"
541
+ }
542
+ ]
543
+ },
544
+ description: {
545
+ description: "Detailed description about the API operation.\n\nIMPORTANT: This field MUST be extensively detailed and MUST reference the\ndescription comments from the related Prisma DB schema tables and\ncolumns. The description should be organized into MULTIPLE PARAGRAPHS\nseparated by line breaks to improve readability and comprehension.\n\nFor example, include separate paragraphs for:\n\n- The purpose and overview of the API operation\n- Security considerations and user permissions\n- Relationship to underlying database entities\n- Validation rules and business logic\n- Related API operations that might be used together with this one\n- Expected behavior and error handling\n\nWhen writing the description, be sure to incorporate the corresponding DB\nschema's description comments, matching the level of detail and style of\nthose comments. This ensures consistency between the API documentation\nand database structure.\n\nIf there's a dependency to other APIs, please describe the dependency API\noperation in this field with detailed reason. For example, if this API\noperation needs a pre-execution of other API operation, it must be\nexplicitly described.\n\n- `GET /shoppings/customers/sales` must be pre-executed to get entire list\n of summarized sales. Detailed sale information would be obtained by\n specifying the sale ID in the path parameter.\n\n**CRITICAL WARNING about soft delete keywords**:\nDO NOT use terms like \"soft delete\", \"soft-delete\", or similar variations\nin this description UNLESS the operation actually implements soft deletion.\nThese keywords trigger validation logic that expects a corresponding\nsoft_delete_column to be specified. Only use these terms when you intend\nto implement soft deletion (marking records as deleted without removing\nthem from the database).\n\nExample of problematic description:\n\u274C \"This would normally be a soft-delete, but we intentionally perform\npermanent deletion here\" - This triggers soft delete validation despite\nbeing a hard delete operation.\n\n> MUST be written in English. Never use other languages.",
546
+ type: "string"
547
+ },
548
+ name: {
549
+ description: "Functional name of the API endpoint.\n\nThis is a semantic identifier that represents the primary function or\npurpose of the API endpoint. It serves as a canonical name that can be\nused for code generation, SDK method names, and internal references.\n\n## Reserved Word Restrictions\n\nCRITICAL: The name MUST NOT be a TypeScript/JavaScript reserved word, as\nit will be used as a class method name in generated code. Avoid names\nlike:\n\n- `delete`, `for`, `if`, `else`, `while`, `do`, `switch`, `case`, `break`\n- `continue`, `function`, `return`, `with`, `in`, `of`, `instanceof`\n- `typeof`, `void`, `var`, `let`, `const`, `class`, `extends`, `import`\n- `export`, `default`, `try`, `catch`, `finally`, `throw`, `new`\n- `super`, `this`, `null`, `true`, `false`, `async`, `await`\n- `yield`, `static`, `private`, `protected`, `public`, `implements`\n- `interface`, `package`, `enum`, `debugger`\n\nInstead, use alternative names for these operations:\n\n- Use `erase` instead of `delete`\n- Use `iterate` instead of `for`\n- Use `when` instead of `if`\n- Use `cls` instead of `class`\n\n## Standard Endpoint Names\n\nUse these conventional names based on the endpoint's primary function:\n\n- **`index`**: List/search operations that return multiple entities\n\n - Typically used with PATCH method for complex queries\n - Example: `PATCH /users` \u2192 `name: \"index\"`\n- **`at`**: Retrieve a specific entity by identifier\n\n - Typically used with GET method on single resource\n - Example: `GET /users/{userId}` \u2192 `name: \"at\"`\n- **`create`**: Create a new entity\n\n - Typically used with POST method\n - Example: `POST /users` \u2192 `name: \"create\"`\n- **`update`**: Update an existing entity\n\n - Typically used with PUT method\n - Example: `PUT /users/{userId}` \u2192 `name: \"update\"`\n- **`erase`**: Delete/remove an entity (NOT `delete` - reserved word!)\n\n - Typically used with DELETE method\n - Example: `DELETE /users/{userId}` \u2192 `name: \"erase\"`\n\n## Custom Endpoint Names\n\nFor specialized operations beyond basic CRUD, use descriptive verbs:\n\n- **`activate`**: Enable or turn on a feature/entity\n- **`deactivate`**: Disable or turn off a feature/entity\n- **`approve`**: Approve a request or entity\n- **`reject`**: Reject a request or entity\n- **`publish`**: Make content publicly available\n- **`archive`**: Move to archived state\n- **`restore`**: Restore from archived/deleted state\n- **`duplicate`**: Create a copy of an entity\n- **`transfer`**: Move ownership or change assignment\n- **`validate`**: Validate data or state\n- **`process`**: Execute a business process or workflow\n- **`export`**: Generate downloadable data\n- **`import`**: Process uploaded data\n\n## Naming Guidelines\n\n- MUST use camelCase naming convention\n- Use singular verb forms\n- Be concise but descriptive\n- Avoid abbreviations unless widely understood\n- Ensure the name clearly represents the endpoint's primary action\n- For nested resources, focus on the action rather than hierarchy\n- NEVER use JavaScript/TypeScript reserved words\n\nValid Examples:\n\n- `index`, `create`, `update`, `erase` (single word)\n- `updatePassword`, `cancelOrder`, `publishArticle` (camelCase)\n- `validateEmail`, `generateReport`, `exportData` (camelCase)\n\nInvalid Examples:\n\n- `update_password` (snake_case not allowed)\n- `UpdatePassword` (PascalCase not allowed)\n- `update-password` (kebab-case not allowed)\n\nPath to Name Examples:\n\n- `GET /shopping/orders/{orderId}/items` \u2192 `name: \"index\"` (lists items)\n- `POST /shopping/orders/{orderId}/cancel` \u2192 `name: \"cancel\"`\n- `PUT /users/{userId}/password` \u2192 `name: \"updatePassword\"`\n\n## Uniqueness Rule\n\nThe `name` must be unique within the API's accessor namespace. The\naccessor is formed by combining the path segments (excluding parameters)\nwith the operation name.\n\nAccessor formation:\n\n1. Extract non-parameter segments from the path (remove `{...}` parts)\n2. Join segments with dots\n3. Append the operation name\n\nExamples:\n\n- Path: `/shopping/sale/{saleId}/review/{reviewId}`, Name: `at` \u2192 Accessor:\n `shopping.sale.review.at`\n- Path: `/users/{userId}/posts`, Name: `index` \u2192 Accessor:\n `users.posts.index`\n- Path: `/auth/login`, Name: `signIn` \u2192 Accessor: `auth.login.signIn`\n\nEach accessor must be globally unique across the entire API. This ensures\noperations can be uniquely identified in generated SDKs and prevents\nnaming conflicts.\n\n\n@pattern ^[a-z][a-zA-Z0-9]*$",
550
+ type: "string"
551
+ },
552
+ specification: {
553
+ description: "Specification of the API operation.\n\nBefore defining the API operation interface, please describe what you're\nplanning to write in this `specification` field.\n\nThe specification must be fully detailed and clear, so that anyone can\nunderstand the purpose and functionality of the API operation and its\nrelated components (e.g., {@link path}, {@link parameters},\n{@link requestBody}).\n\nIMPORTANT: The specification MUST identify which Prisma DB table this\noperation is associated with, helping ensure complete coverage of all\ndatabase entities.",
554
+ type: "string"
555
+ },
556
+ summary: {
557
+ description: "Short summary of the API operation.\n\nThis should be a concise description of the API operation, typically one\nsentence long. It should provide a quick overview of what the API does\nwithout going into too much detail.\n\nThis summary will be used in the OpenAPI documentation to give users a\nquick understanding of the API operation's purpose.\n\nIMPORTANT: The summary should clearly indicate which Prisma DB table this\noperation relates to, helping to ensure all tables have API coverage.\n\n**CRITICAL WARNING about soft delete keywords**:\nDO NOT use terms like \"soft delete\", \"soft-delete\", or similar variations\nin this summary UNLESS the operation actually implements soft deletion.\nThese keywords trigger validation logic that expects a corresponding\nsoft_delete_column to be specified. Only use these terms when you intend\nto implement soft deletion (marking records as deleted without removing\nthem from the database).\n\n> MUST be written in English. Never use other languages",
558
+ type: "string"
559
+ },
560
+ path: {
561
+ description: "HTTP path of the API operation.\n\nThe URL path for accessing this API operation, using path parameters\nenclosed in curly braces (e.g., `/shoppings/customers/sales/{saleId}`).\n\nIt must be corresponded to the {@link parameters path parameters}.\n\nThe path structure should clearly indicate which database entity this\noperation is manipulating, helping to ensure all entities have\nappropriate API coverage.\n\nPath validation rules:\n\n- Must start with a forward slash (/)\n- Can contain only: letters (a-z, A-Z), numbers (0-9), forward slashes (/),\n curly braces for parameters ({paramName}), hyphens (-), and underscores\n (_)\n- Parameters must be enclosed in curly braces: {paramName}\n- Resource names should be in camelCase\n- No quotes, spaces, or invalid special characters allowed\n- No domain or role-based prefixes\n\nValid examples:\n\n- \"/users\"\n- \"/users/{userId}\"\n- \"/articles/{articleId}/comments\"\n- \"/attachmentFiles\"\n- \"/orders/{orderId}/items/{itemId}\"\n\nInvalid examples:\n\n- \"'/users'\" (contains quotes)\n- \"/user profile\" (contains space)\n- \"/users/[userId]\" (wrong bracket format)\n- \"/admin/users\" (role prefix)\n- \"/api/v1/users\" (API prefix)\n\n\n@pattern ^\\/[a-zA-Z0-9\\/_{}.-]*$",
562
+ type: "string"
563
+ },
564
+ parameters: {
565
+ description: "List of path parameters.\n\nNote that, the {@link AutoBeOpenApi.IParameter.name identifier name} of\npath parameter must be corresponded to the\n{@link path API operation path}.\n\nFor example, if there's an API operation which has {@link path} of\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nits list of {@link AutoBeOpenApi.IParameter.name path parameters} must be\nlike:\n\n- `saleId`\n- `questionId`\n- `commentId`",
566
+ type: "array",
567
+ items: {
568
+ $ref: "#/$defs/AutoBeOpenApi.IParameter"
217
569
  }
218
- ]
570
+ },
571
+ requestBody: {
572
+ description: "Request body of the API operation.\n\nDefines the payload structure for the request. Contains a description and\nschema reference to define the expected input data.\n\nShould be `null` for operations that don't require a request body, such\nas most \"get\" operations.",
573
+ anyOf: [
574
+ {
575
+ type: "null"
576
+ },
577
+ {
578
+ $ref: "#/$defs/AutoBeOpenApi.IRequestBody"
579
+ }
580
+ ]
581
+ },
582
+ responseBody: {
583
+ description: "Response body of the API operation.\n\nDefines the structure of the successful response data. Contains a\ndescription and schema reference for the returned data.\n\nShould be null for operations that don't return any data.",
584
+ anyOf: [
585
+ {
586
+ type: "null"
587
+ },
588
+ {
589
+ $ref: "#/$defs/AutoBeOpenApi.IResponseBody"
590
+ }
591
+ ]
592
+ },
593
+ authorizationRole: {
594
+ description: "Authorization role required to access this API operation.\n\nThis field specifies which user role is allowed to access this endpoint.\nThe role name must correspond exactly to the actual roles defined in your\nsystem's Prisma schema.\n\n## Naming Convention\n\nRole names MUST use camelCase.\n\n## Role-Based Path Convention\n\nWhen authorizationRole is specified, it should align with the path\nstructure:\n\n- If authorizationRole is \"admin\" \u2192 path might be \"/admin/resources/{id}\"\n- If authorizationRole is \"seller\" \u2192 path might be \"/seller/products\"\n- Special case: For user's own resources, use path prefix \"/my/\" regardless\n of role\n\n## Important Guidelines\n\n- Set to `null` for public endpoints that require no authentication\n- Set to specific role string for role-restricted endpoints\n- The role name MUST match exactly with the user type/role defined in the\n database\n- This role will be used by the Realize Agent to generate appropriate\n decorator and authorization logic in the provider functions\n- The controller will apply the corresponding authentication decorator\n based on this role\n\n## Examples\n\n- `null` - Public endpoint, no authentication required\n- `\"user\"` - Any authenticated user can access\n- `\"admin\"` - Only admin users can access\n- `\"seller\"` - Only seller users can access\n- `\"moderator\"` - Only moderator users can access\n\nNote: The actual authentication/authorization implementation will be\nhandled by decorators at the controller level, and the provider function\nwill receive the authenticated user object with the appropriate type.",
595
+ anyOf: [
596
+ {
597
+ type: "null"
598
+ },
599
+ {
600
+ type: "string",
601
+ description: "@minLength 1\n@pattern ^[a-z][a-zA-Z0-9]*$"
602
+ }
603
+ ]
604
+ },
605
+ method: {
606
+ description: "HTTP method of the API operation.\n\n**IMPORTANT**: Methods must be written in lowercase only (e.g., \"get\", not \"GET\").\n\nNote that, if the API operation has {@link requestBody}, method must not\nbe `get`.\n\nAlso, even though the API operation has been designed to only get\ninformation, but it needs complicated request information, it must be\ndefined as `patch` method with {@link requestBody} data specification.\n\n- `get`: get information\n- `patch`: get information with complicated request data\n ({@link requestBody})\n- `post`: create new record\n- `put`: update existing record\n- `delete`: remove record",
607
+ type: "string",
608
+ "enum": [
609
+ "get",
610
+ "post",
611
+ "put",
612
+ "delete",
613
+ "patch"
614
+ ]
615
+ }
219
616
  },
220
- method: {
221
- description: "HTTP method of the API operation.\n\nNote that, if the API operation has {@link requestBody}, method must not\nbe `get`.\n\nAlso, even though the API operation has been designed to only get\ninformation, but it needs complicated request information, it must be\ndefined as `patch` method with {@link requestBody} data specification.\n\n- `get`: get information\n- `patch`: get information with complicated request data\n ({@link requestBody})\n- `post`: create new record\n- `put`: update existing record\n- `delete`: remove record",
222
- type: "string",
223
- "enum": [
224
- "get",
225
- "post",
226
- "put",
227
- "delete",
228
- "patch"
229
- ]
230
- }
617
+ required: [
618
+ "prisma_schemas",
619
+ "model_name",
620
+ "soft_delete_column",
621
+ "description",
622
+ "name",
623
+ "specification",
624
+ "summary",
625
+ "path",
626
+ "parameters",
627
+ "requestBody",
628
+ "responseBody",
629
+ "authorizationRole",
630
+ "method"
631
+ ]
231
632
  },
232
- required: [
233
- "prisma_schemas",
234
- "description",
235
- "name",
236
- "specification",
237
- "summary",
238
- "path",
239
- "parameters",
240
- "requestBody",
241
- "responseBody",
242
- "authorizationRole",
243
- "method"
244
- ]
245
- },
246
- "AutoBeOpenApi.IParameter": {
247
- description: "Path parameter information for API routes.\n\nThis interface defines a path parameter that appears in the URL of an API\nendpoint. Path parameters are enclosed in curly braces in the\n{@link AutoBeOpenApi.IOperation.path operation path} and must be defined\nwith their types and descriptions.\n\nFor example, if API operation path is\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nthe path parameters should be like below:\n\n```json\n{\n \"path\": \"/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}\",\n \"method\": \"get\",\n \"parameters\": [\n {\n \"name\": \"saleId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target sale's ID\"\n },\n {\n \"name\": \"questionId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target question's ID\"\n },\n {\n \"name\": \"commentId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target comment's ID\"\n }\n ]\n}\n```",
248
- type: "object",
249
- properties: {
250
- name: {
251
- description: "Identifier name of the path parameter.\n\nThis name must match exactly with the parameter name in the route path.\nIt must be corresponded to the\n{@link AutoBeOpenApi.IOperation.path API operation path}.\n\nMUST use camelCase naming convention.\n\n\n@pattern ^[a-z][a-zA-Z0-9]*$",
252
- type: "string"
253
- },
254
- description: {
255
- description: "Description about the path parameter.\n\nMake short, concise and clear description about the path parameter.\n\n> MUST be written in English. Never use other languages.",
256
- type: "string"
257
- },
258
- schema: {
259
- description: "Type schema of the path parameter.\n\nPath parameters are typically primitive types like\n{@link AutoBeOpenApi.IJsonSchema.IString strings},\n{@link AutoBeOpenApi.IJsonSchema.IInteger integers},\n{@link AutoBeOpenApi.IJsonSchema.INumber numbers}.\n\nIf you need other types, please use request body instead with object type\nencapsulation.",
260
- anyOf: [
261
- {
262
- $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber"
263
- },
264
- {
265
- $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger"
266
- },
267
- {
268
- $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
269
- }
270
- ],
271
- "x-discriminator": {
272
- propertyName: "type",
273
- mapping: {
274
- number: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber",
275
- integer: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger",
276
- string: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
633
+ "AutoBeOpenApi.IParameter": {
634
+ description: "Path parameter information for API routes.\n\nThis interface defines a path parameter that appears in the URL of an API\nendpoint. Path parameters are enclosed in curly braces in the\n{@link AutoBeOpenApi.IOperation.path operation path} and must be defined\nwith their types and descriptions.\n\nFor example, if API operation path is\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nthe path parameters should be like below:\n\n```json\n{\n \"path\": \"/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}\",\n \"method\": \"get\",\n \"parameters\": [\n {\n \"name\": \"saleId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target sale's ID\"\n },\n {\n \"name\": \"questionId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target question's ID\"\n },\n {\n \"name\": \"commentId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target comment's ID\"\n }\n ]\n}\n```",
635
+ type: "object",
636
+ properties: {
637
+ name: {
638
+ description: "Identifier name of the path parameter.\n\nThis name must match exactly with the parameter name in the route path.\nIt must be corresponded to the\n{@link AutoBeOpenApi.IOperation.path API operation path}.\n\nMUST use camelCase naming convention.\n\n\n@pattern ^[a-z][a-zA-Z0-9]*$",
639
+ type: "string"
640
+ },
641
+ description: {
642
+ description: "Description about the path parameter.\n\nMake short, concise and clear description about the path parameter.\n\n> MUST be written in English. Never use other languages.",
643
+ type: "string"
644
+ },
645
+ schema: {
646
+ description: "Type schema of the path parameter.\n\nPath parameters are typically primitive types like\n{@link AutoBeOpenApi.IJsonSchema.IString strings},\n{@link AutoBeOpenApi.IJsonSchema.IInteger integers},\n{@link AutoBeOpenApi.IJsonSchema.INumber numbers}.\n\nIf you need other types, please use request body instead with object type\nencapsulation.",
647
+ anyOf: [
648
+ {
649
+ $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber"
650
+ },
651
+ {
652
+ $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger"
653
+ },
654
+ {
655
+ $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
656
+ }
657
+ ],
658
+ "x-discriminator": {
659
+ propertyName: "type",
660
+ mapping: {
661
+ number: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber",
662
+ integer: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger",
663
+ string: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
664
+ }
277
665
  }
278
666
  }
279
- }
280
- },
281
- required: [
282
- "name",
283
- "description",
284
- "schema"
285
- ]
286
- },
287
- "AutoBeOpenApi.IJsonSchema.INumber": {
288
- description: "Number (double) type info.",
289
- type: "object",
290
- properties: {
291
- minimum: {
292
- description: "Minimum value restriction.",
293
- type: "number"
294
- },
295
- maximum: {
296
- description: "Maximum value restriction.",
297
- type: "number"
298
- },
299
- exclusiveMinimum: {
300
- description: "Exclusive minimum value restriction.",
301
- type: "number"
302
- },
303
- exclusiveMaximum: {
304
- description: "Exclusive maximum value restriction.",
305
- type: "number"
306
- },
307
- multipleOf: {
308
- description: "Multiple of value restriction.\n\n\n@exclusiveMinimum 0",
309
- type: "number"
310
667
  },
311
- type: {
312
- description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
313
- type: "string",
314
- "enum": [
315
- "number"
316
- ]
317
- }
668
+ required: [
669
+ "name",
670
+ "description",
671
+ "schema"
672
+ ]
318
673
  },
319
- required: [
320
- "type"
321
- ]
322
- },
323
- "AutoBeOpenApi.IJsonSchema.IInteger": {
324
- description: "Integer type info.",
325
- type: "object",
326
- properties: {
327
- minimum: {
328
- description: "Minimum value restriction.",
329
- type: "integer"
330
- },
331
- maximum: {
332
- description: "Maximum value restriction.",
333
- type: "integer"
334
- },
335
- exclusiveMinimum: {
336
- description: "Exclusive minimum value restriction.",
337
- type: "number"
338
- },
339
- exclusiveMaximum: {
340
- description: "Exclusive maximum value restriction.",
341
- type: "number"
342
- },
343
- multipleOf: {
344
- description: "Multiple of value restriction.\n\n\n@exclusiveMinimum 0",
345
- type: "integer"
674
+ "AutoBeOpenApi.IJsonSchema.INumber": {
675
+ description: "Number (double) type info.",
676
+ type: "object",
677
+ properties: {
678
+ minimum: {
679
+ description: "Minimum value restriction.",
680
+ type: "number"
681
+ },
682
+ maximum: {
683
+ description: "Maximum value restriction.",
684
+ type: "number"
685
+ },
686
+ exclusiveMinimum: {
687
+ description: "Exclusive minimum value restriction.",
688
+ type: "number"
689
+ },
690
+ exclusiveMaximum: {
691
+ description: "Exclusive maximum value restriction.",
692
+ type: "number"
693
+ },
694
+ multipleOf: {
695
+ description: "Multiple of value restriction.\n\n\n@exclusiveMinimum 0",
696
+ type: "number"
697
+ },
698
+ type: {
699
+ description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
700
+ type: "string",
701
+ "enum": [
702
+ "number"
703
+ ]
704
+ }
346
705
  },
347
- type: {
348
- description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
349
- type: "string",
350
- "enum": [
351
- "integer"
352
- ]
353
- }
706
+ required: [
707
+ "type"
708
+ ]
354
709
  },
355
- required: [
356
- "type"
357
- ]
358
- },
359
- "AutoBeOpenApi.IJsonSchema.IString": {
360
- description: "String type info.",
361
- type: "object",
362
- properties: {
363
- format: {
364
- description: "Format restriction.",
365
- type: "string"
366
- },
367
- pattern: {
368
- description: "Pattern restriction.",
369
- type: "string"
370
- },
371
- contentMediaType: {
372
- description: "Content media type restriction.",
373
- type: "string"
374
- },
375
- minLength: {
376
- description: "Minimum length restriction.\n\n\n@minimum 0",
377
- type: "integer"
378
- },
379
- maxLength: {
380
- description: "Maximum length restriction.\n\n\n@minimum 0",
381
- type: "integer"
710
+ "AutoBeOpenApi.IJsonSchema.IInteger": {
711
+ description: "Integer type info.",
712
+ type: "object",
713
+ properties: {
714
+ minimum: {
715
+ description: "Minimum value restriction.",
716
+ type: "integer"
717
+ },
718
+ maximum: {
719
+ description: "Maximum value restriction.",
720
+ type: "integer"
721
+ },
722
+ exclusiveMinimum: {
723
+ description: "Exclusive minimum value restriction.",
724
+ type: "number"
725
+ },
726
+ exclusiveMaximum: {
727
+ description: "Exclusive maximum value restriction.",
728
+ type: "number"
729
+ },
730
+ multipleOf: {
731
+ description: "Multiple of value restriction.\n\n\n@exclusiveMinimum 0",
732
+ type: "integer"
733
+ },
734
+ type: {
735
+ description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
736
+ type: "string",
737
+ "enum": [
738
+ "integer"
739
+ ]
740
+ }
382
741
  },
383
- type: {
384
- description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
385
- type: "string",
386
- "enum": [
387
- "string"
388
- ]
389
- }
742
+ required: [
743
+ "type"
744
+ ]
390
745
  },
391
- required: [
392
- "type"
393
- ]
394
- },
395
- "AutoBeOpenApi.IRequestBody": {
396
- description: "Request body information of OpenAPI operation.\n\nThis interface defines the structure for request bodies in API routes. It\ncorresponds to the requestBody section in OpenAPI specifications, providing\nboth a description and schema reference for the request payload.\n\nThe content-type for all request bodies is always `application/json`. Even\nwhen file uploading is required, don't use `multipart/form-data` or\n`application/x-www-form-urlencoded` content types. Instead, just define an\nURI string property in the request body schema.\n\nNote that, all body schemas must be transformable to a\n{@link AutoBeOpenApi.IJsonSchema.IReference reference} type defined in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"requestBody\": {\n \"description\": \"Creation info of the order\",\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n }\n }\n }\n}\n```",
397
- type: "object",
398
- properties: {
399
- description: {
400
- description: "Description about the request body.\n\nMake short, concise and clear description about the request body.\n\n> MUST be written in English. Never use other languages.",
401
- type: "string"
746
+ "AutoBeOpenApi.IJsonSchema.IString": {
747
+ description: "String type info.",
748
+ type: "object",
749
+ properties: {
750
+ format: {
751
+ description: "Format restriction.",
752
+ type: "string"
753
+ },
754
+ pattern: {
755
+ description: "Pattern restriction.",
756
+ type: "string"
757
+ },
758
+ contentMediaType: {
759
+ description: "Content media type restriction.",
760
+ type: "string"
761
+ },
762
+ minLength: {
763
+ description: "Minimum length restriction.\n\n\n@minimum 0",
764
+ type: "integer"
765
+ },
766
+ maxLength: {
767
+ description: "Maximum length restriction.\n\n\n@minimum 0",
768
+ type: "integer"
769
+ },
770
+ type: {
771
+ description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
772
+ type: "string",
773
+ "enum": [
774
+ "string"
775
+ ]
776
+ }
402
777
  },
403
- typeName: {
404
- description: "Request body type name.\n\nThis specifies the data structure expected in the request body, that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference reference}\ntype in the {@link AutoBeOpenApi.IComponents.schemas components section}\nas an {@link AutoBeOpenApi.IJsonSchema.Object object} type.\n\nHere is the naming convention for the request body type:\n\n- `IEntityName.ICreate`: Request body for creation operations (POST)\n- `IEntityName.IUpdate`: Request body for update operations (PUT)\n- `IEntityName.IRequest`: Request parameters for list operations (often\n with search/pagination)\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder.ICreate\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n}\n```",
405
- type: "string"
406
- }
778
+ required: [
779
+ "type"
780
+ ]
407
781
  },
408
- required: [
409
- "description",
410
- "typeName"
411
- ]
412
- },
413
- "AutoBeOpenApi.IResponseBody": {
414
- description: "Response body information for OpenAPI operation.\n\nThis interface defines the structure of a successful response from an API\noperation. It provides a description of the response and a schema reference\nto define the returned data structure.\n\nThe content-type for all responses is always `application/json`. Even when\nfile downloading is required, don't use `application/octet-stream` or\n`multipart/form-data` content types. Instead, just define an URI string\nproperty in the response body schema.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"responses\": {\n \"200\": {\n \"description\": \"Order information\",\n \"content\": {\n \"application/json\": {\n \"schema\": { \"$ref\": \"#/components/schemas/IShoppingOrder\" }\n }\n }\n }\n }\n}\n```",
415
- type: "object",
416
- properties: {
417
- description: {
418
- description: "Description about the response body.\n\nMake short, concise and clear description about the response body.\n\n> MUST be written in English. Never use other languages.",
419
- type: "string"
782
+ "AutoBeOpenApi.IRequestBody": {
783
+ description: "Request body information of OpenAPI operation.\n\nThis interface defines the structure for request bodies in API routes. It\ncorresponds to the requestBody section in OpenAPI specifications, providing\nboth a description and schema reference for the request payload.\n\nThe content-type for all request bodies is always `application/json`. Even\nwhen file uploading is required, don't use `multipart/form-data` or\n`application/x-www-form-urlencoded` content types. Instead, just define an\nURI string property in the request body schema.\n\nNote that, all body schemas must be transformable to a\n{@link AutoBeOpenApi.IJsonSchema.IReference reference} type defined in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"requestBody\": {\n \"description\": \"Creation info of the order\",\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n }\n }\n }\n}\n```",
784
+ type: "object",
785
+ properties: {
786
+ description: {
787
+ description: "Description about the request body.\n\nMake short, concise and clear description about the request body.\n\n> MUST be written in English. Never use other languages.",
788
+ type: "string"
789
+ },
790
+ typeName: {
791
+ description: "Request body type name.\n\nThis specifies the data structure expected in the request body, that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference reference}\ntype in the {@link AutoBeOpenApi.IComponents.schemas components section}\nas an {@link AutoBeOpenApi.IJsonSchema.Object object} type.\n\nHere is the naming convention for the request body type:\n\n- `IEntityName.ICreate`: Request body for creation operations (POST)\n- `IEntityName.IUpdate`: Request body for update operations (PUT)\n- `IEntityName.IRequest`: Request parameters for list operations (often\n with search/pagination)\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder.ICreate\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n}\n```",
792
+ type: "string"
793
+ }
420
794
  },
421
- typeName: {
422
- description: "Response body's data type.\n\nSpecifies the structure of the returned data (response body), that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference} type in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nHere is the naming convention for the response body type:\n\n- `IEntityName`: Main entity with detailed information (e.g.,\n `IShoppingSale`)\n- `IEntityName.ISummary`: Simplified response version with essential\n properties\n- `IEntityName.IInvert`: Alternative view of an entity from a different\n perspective\n- `IPageIEntityName`: Paginated results container with `pagination` and\n `data` properties\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder\"\n }\n}\n```",
423
- type: "string"
424
- }
795
+ required: [
796
+ "description",
797
+ "typeName"
798
+ ]
425
799
  },
426
- required: [
427
- "description",
428
- "typeName"
429
- ]
800
+ "AutoBeOpenApi.IResponseBody": {
801
+ description: "Response body information for OpenAPI operation.\n\nThis interface defines the structure of a successful response from an API\noperation. It provides a description of the response and a schema reference\nto define the returned data structure.\n\nThe content-type for all responses is always `application/json`. Even when\nfile downloading is required, don't use `application/octet-stream` or\n`multipart/form-data` content types. Instead, just define an URI string\nproperty in the response body schema.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"responses\": {\n \"200\": {\n \"description\": \"Order information\",\n \"content\": {\n \"application/json\": {\n \"schema\": { \"$ref\": \"#/components/schemas/IShoppingOrder\" }\n }\n }\n }\n }\n}\n```",
802
+ type: "object",
803
+ properties: {
804
+ description: {
805
+ description: "Description about the response body.\n\nMake short, concise and clear description about the response body.\n\n> MUST be written in English. Never use other languages.",
806
+ type: "string"
807
+ },
808
+ typeName: {
809
+ description: "Response body's data type.\n\nSpecifies the structure of the returned data (response body), that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference} type in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nHere is the naming convention for the response body type:\n\n- `IEntityName`: Main entity with detailed information (e.g.,\n `IShoppingSale`)\n- `IEntityName.ISummary`: Simplified response version with essential\n properties\n- `IEntityName.IInvert`: Alternative view of an entity from a different\n perspective\n- `IPageIEntityName`: Paginated results container with `pagination` and\n `data` properties\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder\"\n }\n}\n```",
810
+ type: "string"
811
+ }
812
+ },
813
+ required: [
814
+ "description",
815
+ "typeName"
816
+ ]
817
+ }
430
818
  }
431
- }
432
- },
433
- description: "Reviews a batch of API operations for quality and correctness.\n\nValidates each operation's request/response schemas, authentication\nhandling, error responses, and documentation completeness. Operations are\nmarked as passed or failed based on compliance with enterprise standards.",
434
- validate: (() => { const _io0 = input => "string" === typeof input.review && "string" === typeof input.plan && (Array.isArray(input.content) && input.content.every(elem => "object" === typeof elem && null !== elem && _io1(elem))); const _io1 = input => "string" === typeof input.prisma_schemas && "string" === typeof input.description && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && "string" === typeof input.specification && "string" === typeof input.summary && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && (null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) && 1 <= input.authorizationRole.length)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
435
- if ("number" === input.type)
436
- return _io4(input);
437
- else if ("integer" === input.type)
438
- return _io3(input);
439
- else if ("string" === input.type)
440
- return _io5(input);
441
- else
442
- return false;
443
- })(); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.review || _report(_exceptionable, {
444
- path: _path + ".review",
445
- expected: "string",
446
- value: input.review
447
- }), "string" === typeof input.plan || _report(_exceptionable, {
448
- path: _path + ".plan",
449
- expected: "string",
450
- value: input.plan
451
- }), (Array.isArray(input.content) || _report(_exceptionable, {
452
- path: _path + ".content",
453
- expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
454
- value: input.content
455
- })) && input.content.map((elem, _index3) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
456
- path: _path + ".content[" + _index3 + "]",
457
- expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
458
- value: elem
459
- })) && _vo1(elem, _path + ".content[" + _index3 + "]", true && _exceptionable) || _report(_exceptionable, {
460
- path: _path + ".content[" + _index3 + "]",
461
- expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
462
- value: elem
463
- })).every(flag => flag) || _report(_exceptionable, {
464
- path: _path + ".content",
465
- expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
466
- value: input.content
467
- })].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.prisma_schemas || _report(_exceptionable, {
468
- path: _path + ".prisma_schemas",
469
- expected: "string",
470
- value: input.prisma_schemas
471
- }), "string" === typeof input.description || _report(_exceptionable, {
472
- path: _path + ".description",
473
- expected: "string",
474
- value: input.description
475
- }), "string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
476
- path: _path + ".name",
477
- expected: "string & CamelPattern",
478
- value: input.name
479
- })) || _report(_exceptionable, {
480
- path: _path + ".name",
481
- expected: "(string & CamelPattern)",
482
- value: input.name
483
- }), "string" === typeof input.specification || _report(_exceptionable, {
484
- path: _path + ".specification",
485
- expected: "string",
486
- value: input.specification
487
- }), "string" === typeof input.summary || _report(_exceptionable, {
488
- path: _path + ".summary",
489
- expected: "string",
490
- value: input.summary
491
- }), "string" === typeof input.path && (RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) || _report(_exceptionable, {
492
- path: _path + ".path",
493
- expected: "string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">",
494
- value: input.path
495
- })) || _report(_exceptionable, {
496
- path: _path + ".path",
497
- expected: "(string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">)",
498
- value: input.path
499
- }), (Array.isArray(input.parameters) || _report(_exceptionable, {
500
- path: _path + ".parameters",
501
- expected: "Array<AutoBeOpenApi.IParameter>",
502
- value: input.parameters
503
- })) && input.parameters.map((elem, _index4) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
504
- path: _path + ".parameters[" + _index4 + "]",
505
- expected: "AutoBeOpenApi.IParameter",
506
- value: elem
507
- })) && _vo2(elem, _path + ".parameters[" + _index4 + "]", true && _exceptionable) || _report(_exceptionable, {
508
- path: _path + ".parameters[" + _index4 + "]",
509
- expected: "AutoBeOpenApi.IParameter",
510
- value: elem
511
- })).every(flag => flag) || _report(_exceptionable, {
512
- path: _path + ".parameters",
513
- expected: "Array<AutoBeOpenApi.IParameter>",
514
- value: input.parameters
515
- }), null === input.requestBody || ("object" === typeof input.requestBody && null !== input.requestBody || _report(_exceptionable, {
516
- path: _path + ".requestBody",
517
- expected: "(AutoBeOpenApi.IRequestBody | null)",
518
- value: input.requestBody
519
- })) && _vo6(input.requestBody, _path + ".requestBody", true && _exceptionable) || _report(_exceptionable, {
520
- path: _path + ".requestBody",
521
- expected: "(AutoBeOpenApi.IRequestBody | null)",
522
- value: input.requestBody
523
- }), null === input.responseBody || ("object" === typeof input.responseBody && null !== input.responseBody || _report(_exceptionable, {
524
- path: _path + ".responseBody",
525
- expected: "(AutoBeOpenApi.IResponseBody | null)",
526
- value: input.responseBody
527
- })) && _vo7(input.responseBody, _path + ".responseBody", true && _exceptionable) || _report(_exceptionable, {
528
- path: _path + ".responseBody",
529
- expected: "(AutoBeOpenApi.IResponseBody | null)",
530
- value: input.responseBody
531
- }), null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) || _report(_exceptionable, {
532
- path: _path + ".authorizationRole",
533
- expected: "string & CamelPattern",
534
- value: input.authorizationRole
535
- })) && (1 <= input.authorizationRole.length || _report(_exceptionable, {
536
- path: _path + ".authorizationRole",
537
- expected: "string & MinLength<1>",
538
- value: input.authorizationRole
539
- })) || _report(_exceptionable, {
540
- path: _path + ".authorizationRole",
541
- expected: "((string & CamelPattern & MinLength<1>) | null)",
542
- value: input.authorizationRole
543
- }), "get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method || _report(_exceptionable, {
544
- path: _path + ".method",
545
- expected: "(\"delete\" | \"get\" | \"patch\" | \"post\" | \"put\")",
546
- value: input.method
547
- })].every(flag => flag); const _vo2 = (input, _path, _exceptionable = true) => ["string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
548
- path: _path + ".name",
549
- expected: "string & CamelPattern",
550
- value: input.name
551
- })) || _report(_exceptionable, {
552
- path: _path + ".name",
553
- expected: "(string & CamelPattern)",
554
- value: input.name
555
- }), "string" === typeof input.description || _report(_exceptionable, {
556
- path: _path + ".description",
557
- expected: "string",
558
- value: input.description
559
- }), ("object" === typeof input.schema && null !== input.schema || _report(_exceptionable, {
560
- path: _path + ".schema",
561
- expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
562
- value: input.schema
563
- })) && _vu0(input.schema, _path + ".schema", true && _exceptionable) || _report(_exceptionable, {
564
- path: _path + ".schema",
565
- expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
566
- value: input.schema
567
- })].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000 || _report(_exceptionable, {
568
- path: _path + ".minimum",
569
- expected: "number & Type<\"int64\">",
570
- value: input.minimum
571
- })) || _report(_exceptionable, {
572
- path: _path + ".minimum",
573
- expected: "((number & Type<\"int64\">) | undefined)",
574
- value: input.minimum
575
- }), undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000 || _report(_exceptionable, {
576
- path: _path + ".maximum",
577
- expected: "number & Type<\"int64\">",
578
- value: input.maximum
579
- })) || _report(_exceptionable, {
580
- path: _path + ".maximum",
581
- expected: "((number & Type<\"int64\">) | undefined)",
582
- value: input.maximum
583
- }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
584
- path: _path + ".exclusiveMinimum",
585
- expected: "(number | undefined)",
586
- value: input.exclusiveMinimum
587
- }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
588
- path: _path + ".exclusiveMaximum",
589
- expected: "(number | undefined)",
590
- value: input.exclusiveMaximum
591
- }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 || _report(_exceptionable, {
592
- path: _path + ".multipleOf",
593
- expected: "number & Type<\"uint64\">",
594
- value: input.multipleOf
595
- })) && (0 < input.multipleOf || _report(_exceptionable, {
596
- path: _path + ".multipleOf",
597
- expected: "number & ExclusiveMinimum<0>",
598
- value: input.multipleOf
599
- })) || _report(_exceptionable, {
600
- path: _path + ".multipleOf",
601
- expected: "((number & Type<\"uint64\"> & ExclusiveMinimum<0>) | undefined)",
602
- value: input.multipleOf
603
- }), "integer" === input.type || _report(_exceptionable, {
604
- path: _path + ".type",
605
- expected: "\"integer\"",
606
- value: input.type
607
- })].every(flag => flag); const _vo4 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum || _report(_exceptionable, {
608
- path: _path + ".minimum",
609
- expected: "(number | undefined)",
610
- value: input.minimum
611
- }), undefined === input.maximum || "number" === typeof input.maximum || _report(_exceptionable, {
612
- path: _path + ".maximum",
613
- expected: "(number | undefined)",
614
- value: input.maximum
615
- }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
616
- path: _path + ".exclusiveMinimum",
617
- expected: "(number | undefined)",
618
- value: input.exclusiveMinimum
619
- }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
620
- path: _path + ".exclusiveMaximum",
621
- expected: "(number | undefined)",
622
- value: input.exclusiveMaximum
623
- }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (0 < input.multipleOf || _report(_exceptionable, {
624
- path: _path + ".multipleOf",
625
- expected: "number & ExclusiveMinimum<0>",
626
- value: input.multipleOf
627
- })) || _report(_exceptionable, {
628
- path: _path + ".multipleOf",
629
- expected: "((number & ExclusiveMinimum<0>) | undefined)",
630
- value: input.multipleOf
631
- }), "number" === input.type || _report(_exceptionable, {
632
- path: _path + ".type",
633
- expected: "\"number\"",
634
- value: input.type
635
- })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || "string" === typeof input.format || _report(_exceptionable, {
636
- path: _path + ".format",
637
- expected: "(string | undefined)",
638
- value: input.format
639
- }), undefined === input.pattern || "string" === typeof input.pattern || _report(_exceptionable, {
640
- path: _path + ".pattern",
641
- expected: "(string | undefined)",
642
- value: input.pattern
643
- }), undefined === input.contentMediaType || "string" === typeof input.contentMediaType || _report(_exceptionable, {
644
- path: _path + ".contentMediaType",
645
- expected: "(string | undefined)",
646
- value: input.contentMediaType
647
- }), undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000 || _report(_exceptionable, {
648
- path: _path + ".minLength",
649
- expected: "number & Type<\"uint64\">",
650
- value: input.minLength
651
- })) || _report(_exceptionable, {
652
- path: _path + ".minLength",
653
- expected: "((number & Type<\"uint64\">) | undefined)",
654
- value: input.minLength
655
- }), undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000 || _report(_exceptionable, {
656
- path: _path + ".maxLength",
657
- expected: "number & Type<\"uint64\">",
658
- value: input.maxLength
659
- })) || _report(_exceptionable, {
660
- path: _path + ".maxLength",
661
- expected: "((number & Type<\"uint64\">) | undefined)",
662
- value: input.maxLength
663
- }), "string" === input.type || _report(_exceptionable, {
664
- path: _path + ".type",
665
- expected: "\"string\"",
666
- value: input.type
667
- })].every(flag => flag); const _vo6 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
668
- path: _path + ".description",
669
- expected: "string",
670
- value: input.description
671
- }), "string" === typeof input.typeName || _report(_exceptionable, {
672
- path: _path + ".typeName",
673
- expected: "string",
674
- value: input.typeName
675
- })].every(flag => flag); const _vo7 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
676
- path: _path + ".description",
677
- expected: "string",
678
- value: input.description
679
- }), "string" === typeof input.typeName || _report(_exceptionable, {
680
- path: _path + ".typeName",
681
- expected: "string",
682
- value: input.typeName
683
- })].every(flag => flag); const _vu0 = (input, _path, _exceptionable = true) => (() => {
684
- if ("number" === input.type)
685
- return _vo4(input, _path, true && _exceptionable);
686
- else if ("integer" === input.type)
687
- return _vo3(input, _path, true && _exceptionable);
688
- else if ("string" === input.type)
689
- return _vo5(input, _path, true && _exceptionable);
690
- else
691
- return _report(_exceptionable, {
692
- path: _path,
693
- expected: "(AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.IString)",
694
- value: input
695
- });
696
- })(); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
697
- if (false === __is(input)) {
698
- errors = [];
699
- _report = __typia_transform__validateReport._validateReport(errors);
700
- ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
701
- path: _path + "",
702
- expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
703
- value: input
704
- })) && _vo0(input, _path + "", true) || _report(true, {
705
- path: _path + "",
706
- expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
707
- value: input
708
- }))(input, "$input", true);
709
- const success = 0 === errors.length;
710
- return success ? {
711
- success,
712
- data: input
713
- } : {
714
- success,
715
- errors,
819
+ },
820
+ description: "Reviews a batch of API operations for quality and correctness.\n\nValidates each operation's request/response schemas, authentication\nhandling, error responses, and documentation completeness. Operations are\nmarked as passed or failed based on compliance with enterprise standards.",
821
+ validate: (() => { const _io0 = input => "string" === typeof input.review && "string" === typeof input.plan && (Array.isArray(input.content) && input.content.every(elem => "object" === typeof elem && null !== elem && _io1(elem))); const _io1 = input => "string" === typeof input.prisma_schemas && "string" === typeof input.model_name && (null === input.soft_delete_column || "string" === typeof input.soft_delete_column) && "string" === typeof input.description && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && "string" === typeof input.specification && "string" === typeof input.summary && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && (null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) && 1 <= input.authorizationRole.length)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
822
+ if ("number" === input.type)
823
+ return _io4(input);
824
+ else if ("integer" === input.type)
825
+ return _io3(input);
826
+ else if ("string" === input.type)
827
+ return _io5(input);
828
+ else
829
+ return false;
830
+ })(); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.review || _report(_exceptionable, {
831
+ path: _path + ".review",
832
+ expected: "string",
833
+ value: input.review
834
+ }), "string" === typeof input.plan || _report(_exceptionable, {
835
+ path: _path + ".plan",
836
+ expected: "string",
837
+ value: input.plan
838
+ }), (Array.isArray(input.content) || _report(_exceptionable, {
839
+ path: _path + ".content",
840
+ expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
841
+ value: input.content
842
+ })) && input.content.map((elem, _index3) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
843
+ path: _path + ".content[" + _index3 + "]",
844
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
845
+ value: elem
846
+ })) && _vo1(elem, _path + ".content[" + _index3 + "]", true && _exceptionable) || _report(_exceptionable, {
847
+ path: _path + ".content[" + _index3 + "]",
848
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
849
+ value: elem
850
+ })).every(flag => flag) || _report(_exceptionable, {
851
+ path: _path + ".content",
852
+ expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
853
+ value: input.content
854
+ })].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.prisma_schemas || _report(_exceptionable, {
855
+ path: _path + ".prisma_schemas",
856
+ expected: "string",
857
+ value: input.prisma_schemas
858
+ }), "string" === typeof input.model_name || _report(_exceptionable, {
859
+ path: _path + ".model_name",
860
+ expected: "string",
861
+ value: input.model_name
862
+ }), null === input.soft_delete_column || "string" === typeof input.soft_delete_column || _report(_exceptionable, {
863
+ path: _path + ".soft_delete_column",
864
+ expected: "(null | string)",
865
+ value: input.soft_delete_column
866
+ }), "string" === typeof input.description || _report(_exceptionable, {
867
+ path: _path + ".description",
868
+ expected: "string",
869
+ value: input.description
870
+ }), "string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
871
+ path: _path + ".name",
872
+ expected: "string & CamelPattern",
873
+ value: input.name
874
+ })) || _report(_exceptionable, {
875
+ path: _path + ".name",
876
+ expected: "(string & CamelPattern)",
877
+ value: input.name
878
+ }), "string" === typeof input.specification || _report(_exceptionable, {
879
+ path: _path + ".specification",
880
+ expected: "string",
881
+ value: input.specification
882
+ }), "string" === typeof input.summary || _report(_exceptionable, {
883
+ path: _path + ".summary",
884
+ expected: "string",
885
+ value: input.summary
886
+ }), "string" === typeof input.path && (RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) || _report(_exceptionable, {
887
+ path: _path + ".path",
888
+ expected: "string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">",
889
+ value: input.path
890
+ })) || _report(_exceptionable, {
891
+ path: _path + ".path",
892
+ expected: "(string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">)",
893
+ value: input.path
894
+ }), (Array.isArray(input.parameters) || _report(_exceptionable, {
895
+ path: _path + ".parameters",
896
+ expected: "Array<AutoBeOpenApi.IParameter>",
897
+ value: input.parameters
898
+ })) && input.parameters.map((elem, _index4) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
899
+ path: _path + ".parameters[" + _index4 + "]",
900
+ expected: "AutoBeOpenApi.IParameter",
901
+ value: elem
902
+ })) && _vo2(elem, _path + ".parameters[" + _index4 + "]", true && _exceptionable) || _report(_exceptionable, {
903
+ path: _path + ".parameters[" + _index4 + "]",
904
+ expected: "AutoBeOpenApi.IParameter",
905
+ value: elem
906
+ })).every(flag => flag) || _report(_exceptionable, {
907
+ path: _path + ".parameters",
908
+ expected: "Array<AutoBeOpenApi.IParameter>",
909
+ value: input.parameters
910
+ }), null === input.requestBody || ("object" === typeof input.requestBody && null !== input.requestBody || _report(_exceptionable, {
911
+ path: _path + ".requestBody",
912
+ expected: "(AutoBeOpenApi.IRequestBody | null)",
913
+ value: input.requestBody
914
+ })) && _vo6(input.requestBody, _path + ".requestBody", true && _exceptionable) || _report(_exceptionable, {
915
+ path: _path + ".requestBody",
916
+ expected: "(AutoBeOpenApi.IRequestBody | null)",
917
+ value: input.requestBody
918
+ }), null === input.responseBody || ("object" === typeof input.responseBody && null !== input.responseBody || _report(_exceptionable, {
919
+ path: _path + ".responseBody",
920
+ expected: "(AutoBeOpenApi.IResponseBody | null)",
921
+ value: input.responseBody
922
+ })) && _vo7(input.responseBody, _path + ".responseBody", true && _exceptionable) || _report(_exceptionable, {
923
+ path: _path + ".responseBody",
924
+ expected: "(AutoBeOpenApi.IResponseBody | null)",
925
+ value: input.responseBody
926
+ }), null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) || _report(_exceptionable, {
927
+ path: _path + ".authorizationRole",
928
+ expected: "string & CamelPattern",
929
+ value: input.authorizationRole
930
+ })) && (1 <= input.authorizationRole.length || _report(_exceptionable, {
931
+ path: _path + ".authorizationRole",
932
+ expected: "string & MinLength<1>",
933
+ value: input.authorizationRole
934
+ })) || _report(_exceptionable, {
935
+ path: _path + ".authorizationRole",
936
+ expected: "((string & CamelPattern & MinLength<1>) | null)",
937
+ value: input.authorizationRole
938
+ }), "get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method || _report(_exceptionable, {
939
+ path: _path + ".method",
940
+ expected: "(\"delete\" | \"get\" | \"patch\" | \"post\" | \"put\")",
941
+ value: input.method
942
+ })].every(flag => flag); const _vo2 = (input, _path, _exceptionable = true) => ["string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
943
+ path: _path + ".name",
944
+ expected: "string & CamelPattern",
945
+ value: input.name
946
+ })) || _report(_exceptionable, {
947
+ path: _path + ".name",
948
+ expected: "(string & CamelPattern)",
949
+ value: input.name
950
+ }), "string" === typeof input.description || _report(_exceptionable, {
951
+ path: _path + ".description",
952
+ expected: "string",
953
+ value: input.description
954
+ }), ("object" === typeof input.schema && null !== input.schema || _report(_exceptionable, {
955
+ path: _path + ".schema",
956
+ expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
957
+ value: input.schema
958
+ })) && _vu0(input.schema, _path + ".schema", true && _exceptionable) || _report(_exceptionable, {
959
+ path: _path + ".schema",
960
+ expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
961
+ value: input.schema
962
+ })].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000 || _report(_exceptionable, {
963
+ path: _path + ".minimum",
964
+ expected: "number & Type<\"int64\">",
965
+ value: input.minimum
966
+ })) || _report(_exceptionable, {
967
+ path: _path + ".minimum",
968
+ expected: "((number & Type<\"int64\">) | undefined)",
969
+ value: input.minimum
970
+ }), undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000 || _report(_exceptionable, {
971
+ path: _path + ".maximum",
972
+ expected: "number & Type<\"int64\">",
973
+ value: input.maximum
974
+ })) || _report(_exceptionable, {
975
+ path: _path + ".maximum",
976
+ expected: "((number & Type<\"int64\">) | undefined)",
977
+ value: input.maximum
978
+ }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
979
+ path: _path + ".exclusiveMinimum",
980
+ expected: "(number | undefined)",
981
+ value: input.exclusiveMinimum
982
+ }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
983
+ path: _path + ".exclusiveMaximum",
984
+ expected: "(number | undefined)",
985
+ value: input.exclusiveMaximum
986
+ }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 || _report(_exceptionable, {
987
+ path: _path + ".multipleOf",
988
+ expected: "number & Type<\"uint64\">",
989
+ value: input.multipleOf
990
+ })) && (0 < input.multipleOf || _report(_exceptionable, {
991
+ path: _path + ".multipleOf",
992
+ expected: "number & ExclusiveMinimum<0>",
993
+ value: input.multipleOf
994
+ })) || _report(_exceptionable, {
995
+ path: _path + ".multipleOf",
996
+ expected: "((number & Type<\"uint64\"> & ExclusiveMinimum<0>) | undefined)",
997
+ value: input.multipleOf
998
+ }), "integer" === input.type || _report(_exceptionable, {
999
+ path: _path + ".type",
1000
+ expected: "\"integer\"",
1001
+ value: input.type
1002
+ })].every(flag => flag); const _vo4 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum || _report(_exceptionable, {
1003
+ path: _path + ".minimum",
1004
+ expected: "(number | undefined)",
1005
+ value: input.minimum
1006
+ }), undefined === input.maximum || "number" === typeof input.maximum || _report(_exceptionable, {
1007
+ path: _path + ".maximum",
1008
+ expected: "(number | undefined)",
1009
+ value: input.maximum
1010
+ }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
1011
+ path: _path + ".exclusiveMinimum",
1012
+ expected: "(number | undefined)",
1013
+ value: input.exclusiveMinimum
1014
+ }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
1015
+ path: _path + ".exclusiveMaximum",
1016
+ expected: "(number | undefined)",
1017
+ value: input.exclusiveMaximum
1018
+ }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (0 < input.multipleOf || _report(_exceptionable, {
1019
+ path: _path + ".multipleOf",
1020
+ expected: "number & ExclusiveMinimum<0>",
1021
+ value: input.multipleOf
1022
+ })) || _report(_exceptionable, {
1023
+ path: _path + ".multipleOf",
1024
+ expected: "((number & ExclusiveMinimum<0>) | undefined)",
1025
+ value: input.multipleOf
1026
+ }), "number" === input.type || _report(_exceptionable, {
1027
+ path: _path + ".type",
1028
+ expected: "\"number\"",
1029
+ value: input.type
1030
+ })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || "string" === typeof input.format || _report(_exceptionable, {
1031
+ path: _path + ".format",
1032
+ expected: "(string | undefined)",
1033
+ value: input.format
1034
+ }), undefined === input.pattern || "string" === typeof input.pattern || _report(_exceptionable, {
1035
+ path: _path + ".pattern",
1036
+ expected: "(string | undefined)",
1037
+ value: input.pattern
1038
+ }), undefined === input.contentMediaType || "string" === typeof input.contentMediaType || _report(_exceptionable, {
1039
+ path: _path + ".contentMediaType",
1040
+ expected: "(string | undefined)",
1041
+ value: input.contentMediaType
1042
+ }), undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000 || _report(_exceptionable, {
1043
+ path: _path + ".minLength",
1044
+ expected: "number & Type<\"uint64\">",
1045
+ value: input.minLength
1046
+ })) || _report(_exceptionable, {
1047
+ path: _path + ".minLength",
1048
+ expected: "((number & Type<\"uint64\">) | undefined)",
1049
+ value: input.minLength
1050
+ }), undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000 || _report(_exceptionable, {
1051
+ path: _path + ".maxLength",
1052
+ expected: "number & Type<\"uint64\">",
1053
+ value: input.maxLength
1054
+ })) || _report(_exceptionable, {
1055
+ path: _path + ".maxLength",
1056
+ expected: "((number & Type<\"uint64\">) | undefined)",
1057
+ value: input.maxLength
1058
+ }), "string" === input.type || _report(_exceptionable, {
1059
+ path: _path + ".type",
1060
+ expected: "\"string\"",
1061
+ value: input.type
1062
+ })].every(flag => flag); const _vo6 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
1063
+ path: _path + ".description",
1064
+ expected: "string",
1065
+ value: input.description
1066
+ }), "string" === typeof input.typeName || _report(_exceptionable, {
1067
+ path: _path + ".typeName",
1068
+ expected: "string",
1069
+ value: input.typeName
1070
+ })].every(flag => flag); const _vo7 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
1071
+ path: _path + ".description",
1072
+ expected: "string",
1073
+ value: input.description
1074
+ }), "string" === typeof input.typeName || _report(_exceptionable, {
1075
+ path: _path + ".typeName",
1076
+ expected: "string",
1077
+ value: input.typeName
1078
+ })].every(flag => flag); const _vu0 = (input, _path, _exceptionable = true) => (() => {
1079
+ if ("number" === input.type)
1080
+ return _vo4(input, _path, true && _exceptionable);
1081
+ else if ("integer" === input.type)
1082
+ return _vo3(input, _path, true && _exceptionable);
1083
+ else if ("string" === input.type)
1084
+ return _vo5(input, _path, true && _exceptionable);
1085
+ else
1086
+ return _report(_exceptionable, {
1087
+ path: _path,
1088
+ expected: "(AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.IString)",
1089
+ value: input
1090
+ });
1091
+ })(); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
1092
+ if (false === __is(input)) {
1093
+ errors = [];
1094
+ _report = __typia_transform__validateReport._validateReport(errors);
1095
+ ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
1096
+ path: _path + "",
1097
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
1098
+ value: input
1099
+ })) && _vo0(input, _path + "", true) || _report(true, {
1100
+ path: _path + "",
1101
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
1102
+ value: input
1103
+ }))(input, "$input", true);
1104
+ const success = 0 === errors.length;
1105
+ return success ? {
1106
+ success,
1107
+ data: input
1108
+ } : {
1109
+ success,
1110
+ errors,
1111
+ data: input
1112
+ };
1113
+ }
1114
+ return {
1115
+ success: true,
716
1116
  data: input
717
1117
  };
718
- }
719
- return {
720
- success: true,
721
- data: input
722
- };
723
- }; })()
724
- }
725
- ]
726
- },
727
- claude: {
728
- model: "claude",
729
- options: {
730
- reference: true,
731
- separate: null
732
- },
733
- functions: [
734
- {
735
- name: "reviewOperations",
736
- parameters: {
737
- description: " Collection of operations to review with their validation\nresults\n\n------------------------------\n\nDescription of the current {@link IAutoBeInterfaceOperationsReviewApplication.IProps} type:\n\n> Properties for API operation review and improvement process.\n> \n> Contains both the input operations to be reviewed and the outputs generated\n> by the Interface Operations Review Agent, which will be published as part\n> of the AutoBeInterfaceOperationsReviewEvent.",
738
- type: "object",
739
- properties: {
740
- review: {
741
- description: "Comprehensive review analysis with prioritized findings.\n\nSystematic assessment organized by severity levels (CRITICAL, HIGH,\nMEDIUM, LOW):\n\n- **Security Analysis**: Authentication boundary violations, exposed\n passwords/tokens, unauthorized data access patterns, SQL injection\n risks\n- **Logic Validation**: Return type consistency (list operations returning\n arrays, single retrieval returning single items), HTTP method semantics\n alignment, parameter usage verification\n- **Schema Compliance**: Field existence in Prisma schema, type accuracy,\n relationship validity, required field handling\n- **Quality Assessment**: Documentation completeness, naming conventions,\n error handling patterns, pagination standards\n\nEach finding includes specific examples, current vs expected behavior,\nand concrete fix recommendations. Critical security issues and logical\ncontradictions are highlighted for immediate attention.",
742
- type: "string"
743
- },
744
- plan: {
745
- description: "Prioritized action plan for identified issues.\n\nStructured improvement strategy categorized by severity:\n\n- **Immediate Actions (CRITICAL)**: Security vulnerabilities that must be\n fixed before production (password exposure, missing authorization,\n authentication bypass risks)\n- **Required Fixes (HIGH)**: Functional issues affecting API correctness\n (wrong return types, missing required fields, schema mismatches)\n- **Recommended Improvements (MEDIUM)**: Quality enhancements for better\n API design (validation rules, format specifications, consistency)\n- **Optional Enhancements (LOW)**: Documentation and usability improvements\n\nIf all operations pass review without issues, contains: \"No improvements\nrequired. All operations meet AutoBE standards.\"\n\nEach action item includes the specific operation path, the exact change\nneeded, and the rationale for the modification.",
746
- type: "string"
747
- },
748
- content: {
749
- description: "Production-ready operations with all critical issues resolved.\n\nFinal API operations after systematic enhancement:\n\n- **Security Fixes Applied**: All authentication boundaries enforced,\n sensitive data removed from responses, proper authorization\n implemented\n- **Logic Corrections Made**: Return types match operation intent, HTTP\n methods align with semantics, parameters properly utilized\n- **Schema Alignment Verified**: All fields exist in Prisma schema, types\n correctly mapped, relationships properly defined\n- **Quality Improvements Added**: Enhanced documentation, format\n specifications, validation rules, consistent naming patterns\n\nIf no issues were found during review, this contains the exact original\noperations unchanged. These operations are validated and ready for schema\ngeneration and subsequent implementation phases.",
750
- type: "array",
751
- items: {
752
- $ref: "#/$defs/IAutoBeInterfaceOperationsReviewApplication.IOperation"
1118
+ }; })()
1119
+ }
1120
+ ]
1121
+ };
1122
+ __typia_transform__llmApplicationFinalize._llmApplicationFinalize(application, Object.assign(Object.assign({}, {
1123
+ validate: {
1124
+ reviewOperations: validate,
1125
+ },
1126
+ }), { equals: false }));
1127
+ return application;
1128
+ })(),
1129
+ claude: (validate) => (() => {
1130
+ const application = {
1131
+ model: "claude",
1132
+ options: {
1133
+ reference: true,
1134
+ separate: null
1135
+ },
1136
+ functions: [
1137
+ {
1138
+ name: "reviewOperations",
1139
+ parameters: {
1140
+ description: " Collection of operations to review with their validation\nresults\n\n------------------------------\n\nDescription of the current {@link IAutoBeInterfaceOperationsReviewApplication.IProps} type:\n\n> Properties for API operation review and improvement process.\n> \n> Contains both the input operations to be reviewed and the outputs generated\n> by the Interface Operations Review Agent, which will be published as part\n> of the AutoBeInterfaceOperationsReviewEvent.",
1141
+ type: "object",
1142
+ properties: {
1143
+ review: {
1144
+ description: "Comprehensive review analysis with prioritized findings.\n\nSystematic assessment organized by severity levels (CRITICAL, HIGH,\nMEDIUM, LOW):\n\n- **Security Analysis**: Authentication boundary violations, exposed\n passwords/tokens, unauthorized data access patterns, SQL injection\n risks\n- **Logic Validation**: Return type consistency (list operations returning\n arrays, single retrieval returning single items), HTTP method semantics\n alignment, parameter usage verification\n- **Schema Compliance**: Field existence in Prisma schema, type accuracy,\n relationship validity, required field handling\n- **Quality Assessment**: Documentation completeness, naming conventions,\n error handling patterns, pagination standards\n\nEach finding includes specific examples, current vs expected behavior,\nand concrete fix recommendations. Critical security issues and logical\ncontradictions are highlighted for immediate attention.",
1145
+ type: "string"
1146
+ },
1147
+ plan: {
1148
+ description: "Prioritized action plan for identified issues.\n\nStructured improvement strategy categorized by severity:\n\n- **Immediate Actions (CRITICAL)**: Security vulnerabilities that must be\n fixed before production (password exposure, missing authorization,\n authentication bypass risks)\n- **Required Fixes (HIGH)**: Functional issues affecting API correctness\n (wrong return types, missing required fields, schema mismatches)\n- **Recommended Improvements (MEDIUM)**: Quality enhancements for better\n API design (validation rules, format specifications, consistency)\n- **Optional Enhancements (LOW)**: Documentation and usability improvements\n\nIf all operations pass review without issues, contains: \"No improvements\nrequired. All operations meet AutoBE standards.\"\n\nEach action item includes the specific operation path, the exact change\nneeded, and the rationale for the modification.",
1149
+ type: "string"
1150
+ },
1151
+ content: {
1152
+ description: "Production-ready operations with all critical issues resolved.\n\nFinal API operations after systematic enhancement:\n\n- **Security Fixes Applied**: All authentication boundaries enforced,\n sensitive data removed from responses, proper authorization\n implemented\n- **Logic Corrections Made**: Return types match operation intent, HTTP\n methods align with semantics, parameters properly utilized\n- **Schema Alignment Verified**: All fields exist in Prisma schema, types\n correctly mapped, relationships properly defined\n- **Quality Improvements Added**: Enhanced documentation, format\n specifications, validation rules, consistent naming patterns\n\nIf no issues were found during review, this contains the exact original\noperations unchanged. These operations are validated and ready for schema\ngeneration and subsequent implementation phases.",
1153
+ type: "array",
1154
+ items: {
1155
+ $ref: "#/$defs/IAutoBeInterfaceOperationsReviewApplication.IOperation"
1156
+ }
753
1157
  }
754
- }
755
- },
756
- required: [
757
- "review",
758
- "plan",
759
- "content"
760
- ],
761
- additionalProperties: false,
762
- $defs: {
763
- "IAutoBeInterfaceOperationsReviewApplication.IOperation": {
764
- description: "Operation of the Restful API.\n\nThis interface defines a single API endpoint with its HTTP {@link method},\n{@link path}, {@link parameters path parameters},\n{@link requestBody request body}, and {@link responseBody} structure. It\ncorresponds to an individual operation in the paths section of an OpenAPI\ndocument.\n\nEach operation requires a detailed explanation of its purpose through the\nreason and description fields, making it clear why the API was designed and\nhow it should be used.\n\nAll request bodies and responses for this operation must be object types\nand must reference named types defined in the components section. The\ncontent-type is always `application/json`. For file upload/download\noperations, use `string & tags.Format<\"uri\">` in the appropriate schema\ninstead of binary data formats.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"/shoppings/customers/orders\": {\n \"post\": {\n \"description\": \"Create a new order application from shopping cart...\",\n \"parameters\": [...],\n \"requestBody\": {...},\n \"responses\": {...}\n }\n }\n}\n```",
765
- type: "object",
766
- properties: {
767
- prisma_schemas: {
768
- description: "Prisma schema models relevant to this operation.\n\nContains the complete Prisma schema definitions for all entities involved\nin this operation, including their fields, relations, and database\nconstraints. This enables comprehensive validation and schema-aware\noperation design.\n\nThe schema information serves multiple critical purposes:\n\n- **Field Verification**: Ensures all referenced fields actually exist in\n the database schema and have the correct types\n- **Relationship Validation**: Confirms that entity relationships are\n properly defined and can support the operation's data access patterns\n- **Soft-Delete Detection**: For DELETE operations, identifies whether\n entities have soft-delete fields (deleted_at, is_deleted, etc.) to\n determine if the operation should perform logical deletion instead of\n physical removal\n- **Constraint Awareness**: Understands unique constraints, required\n fields, and default values to generate accurate request/response\n schemas\n\nExample content might include:\n\n```prisma\nmodel User {\n id String",
769
- type: "string"
770
- },
771
- description: {
772
- description: "Detailed description about the API operation.\n\nIMPORTANT: This field MUST be extensively detailed and MUST reference the\ndescription comments from the related Prisma DB schema tables and\ncolumns. The description should be organized into MULTIPLE PARAGRAPHS\nseparated by line breaks to improve readability and comprehension.\n\nFor example, include separate paragraphs for:\n\n- The purpose and overview of the API operation\n- Security considerations and user permissions\n- Relationship to underlying database entities\n- Validation rules and business logic\n- Related API operations that might be used together with this one\n- Expected behavior and error handling\n\nWhen writing the description, be sure to incorporate the corresponding DB\nschema's description comments, matching the level of detail and style of\nthose comments. This ensures consistency between the API documentation\nand database structure.\n\nIf there's a dependency to other APIs, please describe the dependency API\noperation in this field with detailed reason. For example, if this API\noperation needs a pre-execution of other API operation, it must be\nexplicitly described.\n\n- `GET /shoppings/customers/sales` must be pre-executed to get entire list\n of summarized sales. Detailed sale information would be obtained by\n specifying the sale ID in the path parameter.\n\n> MUST be written in English. Never use other languages.",
773
- type: "string"
774
- },
775
- name: {
776
- description: "Functional name of the API endpoint.\n\nThis is a semantic identifier that represents the primary function or\npurpose of the API endpoint. It serves as a canonical name that can be\nused for code generation, SDK method names, and internal references.\n\n## Reserved Word Restrictions\n\nCRITICAL: The name MUST NOT be a TypeScript/JavaScript reserved word, as\nit will be used as a class method name in generated code. Avoid names\nlike:\n\n- `delete`, `for`, `if`, `else`, `while`, `do`, `switch`, `case`, `break`\n- `continue`, `function`, `return`, `with`, `in`, `of`, `instanceof`\n- `typeof`, `void`, `var`, `let`, `const`, `class`, `extends`, `import`\n- `export`, `default`, `try`, `catch`, `finally`, `throw`, `new`\n- `super`, `this`, `null`, `true`, `false`, `async`, `await`\n- `yield`, `static`, `private`, `protected`, `public`, `implements`\n- `interface`, `package`, `enum`, `debugger`\n\nInstead, use alternative names for these operations:\n\n- Use `erase` instead of `delete`\n- Use `iterate` instead of `for`\n- Use `when` instead of `if`\n- Use `cls` instead of `class`\n\n## Standard Endpoint Names\n\nUse these conventional names based on the endpoint's primary function:\n\n- **`index`**: List/search operations that return multiple entities\n\n - Typically used with PATCH method for complex queries\n - Example: `PATCH /users` \u2192 `name: \"index\"`\n- **`at`**: Retrieve a specific entity by identifier\n\n - Typically used with GET method on single resource\n - Example: `GET /users/{userId}` \u2192 `name: \"at\"`\n- **`create`**: Create a new entity\n\n - Typically used with POST method\n - Example: `POST /users` \u2192 `name: \"create\"`\n- **`update`**: Update an existing entity\n\n - Typically used with PUT method\n - Example: `PUT /users/{userId}` \u2192 `name: \"update\"`\n- **`erase`**: Delete/remove an entity (NOT `delete` - reserved word!)\n\n - Typically used with DELETE method\n - Example: `DELETE /users/{userId}` \u2192 `name: \"erase\"`\n\n## Custom Endpoint Names\n\nFor specialized operations beyond basic CRUD, use descriptive verbs:\n\n- **`activate`**: Enable or turn on a feature/entity\n- **`deactivate`**: Disable or turn off a feature/entity\n- **`approve`**: Approve a request or entity\n- **`reject`**: Reject a request or entity\n- **`publish`**: Make content publicly available\n- **`archive`**: Move to archived state\n- **`restore`**: Restore from archived/deleted state\n- **`duplicate`**: Create a copy of an entity\n- **`transfer`**: Move ownership or change assignment\n- **`validate`**: Validate data or state\n- **`process`**: Execute a business process or workflow\n- **`export`**: Generate downloadable data\n- **`import`**: Process uploaded data\n\n## Naming Guidelines\n\n- MUST use camelCase naming convention\n- Use singular verb forms\n- Be concise but descriptive\n- Avoid abbreviations unless widely understood\n- Ensure the name clearly represents the endpoint's primary action\n- For nested resources, focus on the action rather than hierarchy\n- NEVER use JavaScript/TypeScript reserved words\n\nValid Examples:\n\n- `index`, `create`, `update`, `erase` (single word)\n- `updatePassword`, `cancelOrder`, `publishArticle` (camelCase)\n- `validateEmail`, `generateReport`, `exportData` (camelCase)\n\nInvalid Examples:\n\n- `update_password` (snake_case not allowed)\n- `UpdatePassword` (PascalCase not allowed)\n- `update-password` (kebab-case not allowed)\n\nPath to Name Examples:\n\n- `GET /shopping/orders/{orderId}/items` \u2192 `name: \"index\"` (lists items)\n- `POST /shopping/orders/{orderId}/cancel` \u2192 `name: \"cancel\"`\n- `PUT /users/{userId}/password` \u2192 `name: \"updatePassword\"`\n\n## Uniqueness Rule\n\nThe `name` must be unique within the API's accessor namespace. The\naccessor is formed by combining the path segments (excluding parameters)\nwith the operation name.\n\nAccessor formation:\n\n1. Extract non-parameter segments from the path (remove `{...}` parts)\n2. Join segments with dots\n3. Append the operation name\n\nExamples:\n\n- Path: `/shopping/sale/{saleId}/review/{reviewId}`, Name: `at` \u2192 Accessor:\n `shopping.sale.review.at`\n- Path: `/users/{userId}/posts`, Name: `index` \u2192 Accessor:\n `users.posts.index`\n- Path: `/auth/login`, Name: `signIn` \u2192 Accessor: `auth.login.signIn`\n\nEach accessor must be globally unique across the entire API. This ensures\noperations can be uniquely identified in generated SDKs and prevents\nnaming conflicts.",
777
- type: "string",
778
- pattern: "^[a-z][a-zA-Z0-9]*$"
779
- },
780
- specification: {
781
- description: "Specification of the API operation.\n\nBefore defining the API operation interface, please describe what you're\nplanning to write in this `specification` field.\n\nThe specification must be fully detailed and clear, so that anyone can\nunderstand the purpose and functionality of the API operation and its\nrelated components (e.g., {@link path}, {@link parameters},\n{@link requestBody}).\n\nIMPORTANT: The specification MUST identify which Prisma DB table this\noperation is associated with, helping ensure complete coverage of all\ndatabase entities.",
782
- type: "string"
783
- },
784
- summary: {
785
- description: "Short summary of the API operation.\n\nThis should be a concise description of the API operation, typically one\nsentence long. It should provide a quick overview of what the API does\nwithout going into too much detail.\n\nThis summary will be used in the OpenAPI documentation to give users a\nquick understanding of the API operation's purpose.\n\nIMPORTANT: The summary should clearly indicate which Prisma DB table this\noperation relates to, helping to ensure all tables have API coverage.\n\n> MUST be written in English. Never use other languages",
786
- type: "string"
787
- },
788
- path: {
789
- description: "HTTP path of the API operation.\n\nThe URL path for accessing this API operation, using path parameters\nenclosed in curly braces (e.g., `/shoppings/customers/sales/{saleId}`).\n\nIt must be corresponded to the {@link parameters path parameters}.\n\nThe path structure should clearly indicate which database entity this\noperation is manipulating, helping to ensure all entities have\nappropriate API coverage.\n\nPath validation rules:\n\n- Must start with a forward slash (/)\n- Can contain only: letters (a-z, A-Z), numbers (0-9), forward slashes (/),\n curly braces for parameters ({paramName}), hyphens (-), and underscores\n (_)\n- Parameters must be enclosed in curly braces: {paramName}\n- Resource names should be in camelCase\n- No quotes, spaces, or invalid special characters allowed\n- No domain or role-based prefixes\n\nValid examples:\n\n- \"/users\"\n- \"/users/{userId}\"\n- \"/articles/{articleId}/comments\"\n- \"/attachmentFiles\"\n- \"/orders/{orderId}/items/{itemId}\"\n\nInvalid examples:\n\n- \"'/users'\" (contains quotes)\n- \"/user profile\" (contains space)\n- \"/users/[userId]\" (wrong bracket format)\n- \"/admin/users\" (role prefix)\n- \"/api/v1/users\" (API prefix)",
790
- type: "string",
791
- pattern: "^\\/[a-zA-Z0-9\\/_{}.-]*$"
792
- },
793
- parameters: {
794
- description: "List of path parameters.\n\nNote that, the {@link AutoBeOpenApi.IParameter.name identifier name} of\npath parameter must be corresponded to the\n{@link path API operation path}.\n\nFor example, if there's an API operation which has {@link path} of\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nits list of {@link AutoBeOpenApi.IParameter.name path parameters} must be\nlike:\n\n- `saleId`\n- `questionId`\n- `commentId`",
795
- type: "array",
796
- items: {
797
- $ref: "#/$defs/AutoBeOpenApi.IParameter"
798
- }
799
- },
800
- requestBody: {
801
- description: "Request body of the API operation.\n\nDefines the payload structure for the request. Contains a description and\nschema reference to define the expected input data.\n\nShould be `null` for operations that don't require a request body, such\nas most \"get\" operations.",
802
- oneOf: [
803
- {
804
- type: "null"
805
- },
806
- {
807
- $ref: "#/$defs/AutoBeOpenApi.IRequestBody"
808
- }
809
- ]
810
- },
811
- responseBody: {
812
- description: "Response body of the API operation.\n\nDefines the structure of the successful response data. Contains a\ndescription and schema reference for the returned data.\n\nShould be null for operations that don't return any data.",
813
- oneOf: [
814
- {
815
- type: "null"
816
- },
817
- {
818
- $ref: "#/$defs/AutoBeOpenApi.IResponseBody"
819
- }
820
- ]
821
- },
822
- authorizationRole: {
823
- description: "Authorization role required to access this API operation.\n\nThis field specifies which user role is allowed to access this endpoint.\nThe role name must correspond exactly to the actual roles defined in your\nsystem's Prisma schema.\n\n## Naming Convention\n\nRole names MUST use camelCase.\n\n## Role-Based Path Convention\n\nWhen authorizationRole is specified, it should align with the path\nstructure:\n\n- If authorizationRole is \"admin\" \u2192 path might be \"/admin/resources/{id}\"\n- If authorizationRole is \"seller\" \u2192 path might be \"/seller/products\"\n- Special case: For user's own resources, use path prefix \"/my/\" regardless\n of role\n\n## Important Guidelines\n\n- Set to `null` for public endpoints that require no authentication\n- Set to specific role string for role-restricted endpoints\n- The role name MUST match exactly with the user type/role defined in the\n database\n- This role will be used by the Realize Agent to generate appropriate\n decorator and authorization logic in the provider functions\n- The controller will apply the corresponding authentication decorator\n based on this role\n\n## Examples\n\n- `null` - Public endpoint, no authentication required\n- `\"user\"` - Any authenticated user can access\n- `\"admin\"` - Only admin users can access\n- `\"seller\"` - Only seller users can access\n- `\"moderator\"` - Only moderator users can access\n\nNote: The actual authentication/authorization implementation will be\nhandled by decorators at the controller level, and the provider function\nwill receive the authenticated user object with the appropriate type.",
824
- oneOf: [
825
- {
826
- type: "null"
827
- },
828
- {
829
- type: "string",
830
- pattern: "^[a-z][a-zA-Z0-9]*$",
831
- minLength: 1
1158
+ },
1159
+ required: [
1160
+ "review",
1161
+ "plan",
1162
+ "content"
1163
+ ],
1164
+ additionalProperties: false,
1165
+ $defs: {
1166
+ "IAutoBeInterfaceOperationsReviewApplication.IOperation": {
1167
+ description: "Operation of the Restful API.\n\nThis interface defines a single API endpoint with its HTTP {@link method},\n{@link path}, {@link parameters path parameters},\n{@link requestBody request body}, and {@link responseBody} structure. It\ncorresponds to an individual operation in the paths section of an OpenAPI\ndocument.\n\nEach operation requires a detailed explanation of its purpose through the\nreason and description fields, making it clear why the API was designed and\nhow it should be used.\n\nAll request bodies and responses for this operation must be object types\nand must reference named types defined in the components section. The\ncontent-type is always `application/json`. For file upload/download\noperations, use `string & tags.Format<\"uri\">` in the appropriate schema\ninstead of binary data formats.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"/shoppings/customers/orders\": {\n \"post\": {\n \"description\": \"Create a new order application from shopping cart...\",\n \"parameters\": [...],\n \"requestBody\": {...},\n \"responses\": {...}\n }\n }\n}\n```",
1168
+ type: "object",
1169
+ properties: {
1170
+ prisma_schemas: {
1171
+ description: "Prisma schema models relevant to this operation.\n\nContains the complete Prisma schema definitions for all entities involved\nin this operation, including their fields, relations, and database\nconstraints. This enables comprehensive validation and schema-aware\noperation design.\n\nThe schema information serves multiple critical purposes:\n\n- **Field Verification**: Ensures all referenced fields actually exist in\n the database schema and have the correct types\n- **Relationship Validation**: Confirms that entity relationships are\n properly defined and can support the operation's data access patterns\n- **Soft-Delete Detection**: For DELETE operations, identifies whether\n entities have soft-delete fields (deleted_at, is_deleted, etc.) to\n determine if the operation should perform logical deletion instead of\n physical removal\n- **Constraint Awareness**: Understands unique constraints, required\n fields, and default values to generate accurate request/response\n schemas\n\nExample content might include:\n\n```prisma\nmodel User {\n id String",
1172
+ type: "string"
1173
+ },
1174
+ model_name: {
1175
+ description: "Primary Prisma model name for this operation.\n\nIdentifies the main database table/model that this operation targets.\nThis must match exactly with the Prisma model name defined in the schema.\nWhen soft deletion is specified, this model name indicates which table\nshould be soft-deleted.\n\nFor example:\n- In a \"GET /users/:id\" operation, this would be \"User\"\n- In a \"POST /articles\" operation, this would be \"Article\"\n- In a \"DELETE /comments/:id\" with soft delete, this specifies the \"Comment\" model to soft-delete\n\nThis property is essential for:\n- Determining the primary entity for CRUD operations\n- Identifying which table to apply soft deletion to\n- Validating operations against the correct Prisma model\n- Generating appropriate database queries and validations",
1176
+ type: "string"
1177
+ },
1178
+ soft_delete_column: {
1179
+ description: "Soft delete column name for the Prisma models.\n\nSpecifies the column name used for soft deletion in the database tables\nassociated with this operation. When set to a non-null value, it indicates\nthat the related entities support soft deletion through this column\n(typically a timestamp field like `deleted_at` or `deletedAt`).\n\nWhen null, it means the entities involved in this operation use hard\ndeletion or don't support deletion at all. This information is crucial\nfor generating appropriate CRUD operations and ensuring data integrity\npolicies are correctly implemented.\n\nCommon soft delete patterns:\n- `\"deleted_at\"`: Records deletion timestamp\n- `\"deletedAt\"`: Camel-cased deletion timestamp\n- `\"is_deleted\"`: Boolean flag for deletion status\n- `null`: No soft deletion (hard delete only)",
1180
+ oneOf: [
1181
+ {
1182
+ type: "null"
1183
+ },
1184
+ {
1185
+ type: "string"
1186
+ }
1187
+ ]
1188
+ },
1189
+ description: {
1190
+ description: "Detailed description about the API operation.\n\nIMPORTANT: This field MUST be extensively detailed and MUST reference the\ndescription comments from the related Prisma DB schema tables and\ncolumns. The description should be organized into MULTIPLE PARAGRAPHS\nseparated by line breaks to improve readability and comprehension.\n\nFor example, include separate paragraphs for:\n\n- The purpose and overview of the API operation\n- Security considerations and user permissions\n- Relationship to underlying database entities\n- Validation rules and business logic\n- Related API operations that might be used together with this one\n- Expected behavior and error handling\n\nWhen writing the description, be sure to incorporate the corresponding DB\nschema's description comments, matching the level of detail and style of\nthose comments. This ensures consistency between the API documentation\nand database structure.\n\nIf there's a dependency to other APIs, please describe the dependency API\noperation in this field with detailed reason. For example, if this API\noperation needs a pre-execution of other API operation, it must be\nexplicitly described.\n\n- `GET /shoppings/customers/sales` must be pre-executed to get entire list\n of summarized sales. Detailed sale information would be obtained by\n specifying the sale ID in the path parameter.\n\n**CRITICAL WARNING about soft delete keywords**:\nDO NOT use terms like \"soft delete\", \"soft-delete\", or similar variations\nin this description UNLESS the operation actually implements soft deletion.\nThese keywords trigger validation logic that expects a corresponding\nsoft_delete_column to be specified. Only use these terms when you intend\nto implement soft deletion (marking records as deleted without removing\nthem from the database).\n\nExample of problematic description:\n\u274C \"This would normally be a soft-delete, but we intentionally perform\npermanent deletion here\" - This triggers soft delete validation despite\nbeing a hard delete operation.\n\n> MUST be written in English. Never use other languages.",
1191
+ type: "string"
1192
+ },
1193
+ name: {
1194
+ description: "Functional name of the API endpoint.\n\nThis is a semantic identifier that represents the primary function or\npurpose of the API endpoint. It serves as a canonical name that can be\nused for code generation, SDK method names, and internal references.\n\n## Reserved Word Restrictions\n\nCRITICAL: The name MUST NOT be a TypeScript/JavaScript reserved word, as\nit will be used as a class method name in generated code. Avoid names\nlike:\n\n- `delete`, `for`, `if`, `else`, `while`, `do`, `switch`, `case`, `break`\n- `continue`, `function`, `return`, `with`, `in`, `of`, `instanceof`\n- `typeof`, `void`, `var`, `let`, `const`, `class`, `extends`, `import`\n- `export`, `default`, `try`, `catch`, `finally`, `throw`, `new`\n- `super`, `this`, `null`, `true`, `false`, `async`, `await`\n- `yield`, `static`, `private`, `protected`, `public`, `implements`\n- `interface`, `package`, `enum`, `debugger`\n\nInstead, use alternative names for these operations:\n\n- Use `erase` instead of `delete`\n- Use `iterate` instead of `for`\n- Use `when` instead of `if`\n- Use `cls` instead of `class`\n\n## Standard Endpoint Names\n\nUse these conventional names based on the endpoint's primary function:\n\n- **`index`**: List/search operations that return multiple entities\n\n - Typically used with PATCH method for complex queries\n - Example: `PATCH /users` \u2192 `name: \"index\"`\n- **`at`**: Retrieve a specific entity by identifier\n\n - Typically used with GET method on single resource\n - Example: `GET /users/{userId}` \u2192 `name: \"at\"`\n- **`create`**: Create a new entity\n\n - Typically used with POST method\n - Example: `POST /users` \u2192 `name: \"create\"`\n- **`update`**: Update an existing entity\n\n - Typically used with PUT method\n - Example: `PUT /users/{userId}` \u2192 `name: \"update\"`\n- **`erase`**: Delete/remove an entity (NOT `delete` - reserved word!)\n\n - Typically used with DELETE method\n - Example: `DELETE /users/{userId}` \u2192 `name: \"erase\"`\n\n## Custom Endpoint Names\n\nFor specialized operations beyond basic CRUD, use descriptive verbs:\n\n- **`activate`**: Enable or turn on a feature/entity\n- **`deactivate`**: Disable or turn off a feature/entity\n- **`approve`**: Approve a request or entity\n- **`reject`**: Reject a request or entity\n- **`publish`**: Make content publicly available\n- **`archive`**: Move to archived state\n- **`restore`**: Restore from archived/deleted state\n- **`duplicate`**: Create a copy of an entity\n- **`transfer`**: Move ownership or change assignment\n- **`validate`**: Validate data or state\n- **`process`**: Execute a business process or workflow\n- **`export`**: Generate downloadable data\n- **`import`**: Process uploaded data\n\n## Naming Guidelines\n\n- MUST use camelCase naming convention\n- Use singular verb forms\n- Be concise but descriptive\n- Avoid abbreviations unless widely understood\n- Ensure the name clearly represents the endpoint's primary action\n- For nested resources, focus on the action rather than hierarchy\n- NEVER use JavaScript/TypeScript reserved words\n\nValid Examples:\n\n- `index`, `create`, `update`, `erase` (single word)\n- `updatePassword`, `cancelOrder`, `publishArticle` (camelCase)\n- `validateEmail`, `generateReport`, `exportData` (camelCase)\n\nInvalid Examples:\n\n- `update_password` (snake_case not allowed)\n- `UpdatePassword` (PascalCase not allowed)\n- `update-password` (kebab-case not allowed)\n\nPath to Name Examples:\n\n- `GET /shopping/orders/{orderId}/items` \u2192 `name: \"index\"` (lists items)\n- `POST /shopping/orders/{orderId}/cancel` \u2192 `name: \"cancel\"`\n- `PUT /users/{userId}/password` \u2192 `name: \"updatePassword\"`\n\n## Uniqueness Rule\n\nThe `name` must be unique within the API's accessor namespace. The\naccessor is formed by combining the path segments (excluding parameters)\nwith the operation name.\n\nAccessor formation:\n\n1. Extract non-parameter segments from the path (remove `{...}` parts)\n2. Join segments with dots\n3. Append the operation name\n\nExamples:\n\n- Path: `/shopping/sale/{saleId}/review/{reviewId}`, Name: `at` \u2192 Accessor:\n `shopping.sale.review.at`\n- Path: `/users/{userId}/posts`, Name: `index` \u2192 Accessor:\n `users.posts.index`\n- Path: `/auth/login`, Name: `signIn` \u2192 Accessor: `auth.login.signIn`\n\nEach accessor must be globally unique across the entire API. This ensures\noperations can be uniquely identified in generated SDKs and prevents\nnaming conflicts.",
1195
+ type: "string",
1196
+ pattern: "^[a-z][a-zA-Z0-9]*$"
1197
+ },
1198
+ specification: {
1199
+ description: "Specification of the API operation.\n\nBefore defining the API operation interface, please describe what you're\nplanning to write in this `specification` field.\n\nThe specification must be fully detailed and clear, so that anyone can\nunderstand the purpose and functionality of the API operation and its\nrelated components (e.g., {@link path}, {@link parameters},\n{@link requestBody}).\n\nIMPORTANT: The specification MUST identify which Prisma DB table this\noperation is associated with, helping ensure complete coverage of all\ndatabase entities.",
1200
+ type: "string"
1201
+ },
1202
+ summary: {
1203
+ description: "Short summary of the API operation.\n\nThis should be a concise description of the API operation, typically one\nsentence long. It should provide a quick overview of what the API does\nwithout going into too much detail.\n\nThis summary will be used in the OpenAPI documentation to give users a\nquick understanding of the API operation's purpose.\n\nIMPORTANT: The summary should clearly indicate which Prisma DB table this\noperation relates to, helping to ensure all tables have API coverage.\n\n**CRITICAL WARNING about soft delete keywords**:\nDO NOT use terms like \"soft delete\", \"soft-delete\", or similar variations\nin this summary UNLESS the operation actually implements soft deletion.\nThese keywords trigger validation logic that expects a corresponding\nsoft_delete_column to be specified. Only use these terms when you intend\nto implement soft deletion (marking records as deleted without removing\nthem from the database).\n\n> MUST be written in English. Never use other languages",
1204
+ type: "string"
1205
+ },
1206
+ path: {
1207
+ description: "HTTP path of the API operation.\n\nThe URL path for accessing this API operation, using path parameters\nenclosed in curly braces (e.g., `/shoppings/customers/sales/{saleId}`).\n\nIt must be corresponded to the {@link parameters path parameters}.\n\nThe path structure should clearly indicate which database entity this\noperation is manipulating, helping to ensure all entities have\nappropriate API coverage.\n\nPath validation rules:\n\n- Must start with a forward slash (/)\n- Can contain only: letters (a-z, A-Z), numbers (0-9), forward slashes (/),\n curly braces for parameters ({paramName}), hyphens (-), and underscores\n (_)\n- Parameters must be enclosed in curly braces: {paramName}\n- Resource names should be in camelCase\n- No quotes, spaces, or invalid special characters allowed\n- No domain or role-based prefixes\n\nValid examples:\n\n- \"/users\"\n- \"/users/{userId}\"\n- \"/articles/{articleId}/comments\"\n- \"/attachmentFiles\"\n- \"/orders/{orderId}/items/{itemId}\"\n\nInvalid examples:\n\n- \"'/users'\" (contains quotes)\n- \"/user profile\" (contains space)\n- \"/users/[userId]\" (wrong bracket format)\n- \"/admin/users\" (role prefix)\n- \"/api/v1/users\" (API prefix)",
1208
+ type: "string",
1209
+ pattern: "^\\/[a-zA-Z0-9\\/_{}.-]*$"
1210
+ },
1211
+ parameters: {
1212
+ description: "List of path parameters.\n\nNote that, the {@link AutoBeOpenApi.IParameter.name identifier name} of\npath parameter must be corresponded to the\n{@link path API operation path}.\n\nFor example, if there's an API operation which has {@link path} of\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nits list of {@link AutoBeOpenApi.IParameter.name path parameters} must be\nlike:\n\n- `saleId`\n- `questionId`\n- `commentId`",
1213
+ type: "array",
1214
+ items: {
1215
+ $ref: "#/$defs/AutoBeOpenApi.IParameter"
832
1216
  }
833
- ]
1217
+ },
1218
+ requestBody: {
1219
+ description: "Request body of the API operation.\n\nDefines the payload structure for the request. Contains a description and\nschema reference to define the expected input data.\n\nShould be `null` for operations that don't require a request body, such\nas most \"get\" operations.",
1220
+ oneOf: [
1221
+ {
1222
+ type: "null"
1223
+ },
1224
+ {
1225
+ $ref: "#/$defs/AutoBeOpenApi.IRequestBody"
1226
+ }
1227
+ ]
1228
+ },
1229
+ responseBody: {
1230
+ description: "Response body of the API operation.\n\nDefines the structure of the successful response data. Contains a\ndescription and schema reference for the returned data.\n\nShould be null for operations that don't return any data.",
1231
+ oneOf: [
1232
+ {
1233
+ type: "null"
1234
+ },
1235
+ {
1236
+ $ref: "#/$defs/AutoBeOpenApi.IResponseBody"
1237
+ }
1238
+ ]
1239
+ },
1240
+ authorizationRole: {
1241
+ description: "Authorization role required to access this API operation.\n\nThis field specifies which user role is allowed to access this endpoint.\nThe role name must correspond exactly to the actual roles defined in your\nsystem's Prisma schema.\n\n## Naming Convention\n\nRole names MUST use camelCase.\n\n## Role-Based Path Convention\n\nWhen authorizationRole is specified, it should align with the path\nstructure:\n\n- If authorizationRole is \"admin\" \u2192 path might be \"/admin/resources/{id}\"\n- If authorizationRole is \"seller\" \u2192 path might be \"/seller/products\"\n- Special case: For user's own resources, use path prefix \"/my/\" regardless\n of role\n\n## Important Guidelines\n\n- Set to `null` for public endpoints that require no authentication\n- Set to specific role string for role-restricted endpoints\n- The role name MUST match exactly with the user type/role defined in the\n database\n- This role will be used by the Realize Agent to generate appropriate\n decorator and authorization logic in the provider functions\n- The controller will apply the corresponding authentication decorator\n based on this role\n\n## Examples\n\n- `null` - Public endpoint, no authentication required\n- `\"user\"` - Any authenticated user can access\n- `\"admin\"` - Only admin users can access\n- `\"seller\"` - Only seller users can access\n- `\"moderator\"` - Only moderator users can access\n\nNote: The actual authentication/authorization implementation will be\nhandled by decorators at the controller level, and the provider function\nwill receive the authenticated user object with the appropriate type.",
1242
+ oneOf: [
1243
+ {
1244
+ type: "null"
1245
+ },
1246
+ {
1247
+ type: "string",
1248
+ pattern: "^[a-z][a-zA-Z0-9]*$",
1249
+ minLength: 1
1250
+ }
1251
+ ]
1252
+ },
1253
+ method: {
1254
+ description: "HTTP method of the API operation.\n\n**IMPORTANT**: Methods must be written in lowercase only (e.g., \"get\", not \"GET\").\n\nNote that, if the API operation has {@link requestBody}, method must not\nbe `get`.\n\nAlso, even though the API operation has been designed to only get\ninformation, but it needs complicated request information, it must be\ndefined as `patch` method with {@link requestBody} data specification.\n\n- `get`: get information\n- `patch`: get information with complicated request data\n ({@link requestBody})\n- `post`: create new record\n- `put`: update existing record\n- `delete`: remove record",
1255
+ oneOf: [
1256
+ {
1257
+ "const": "get"
1258
+ },
1259
+ {
1260
+ "const": "post"
1261
+ },
1262
+ {
1263
+ "const": "put"
1264
+ },
1265
+ {
1266
+ "const": "delete"
1267
+ },
1268
+ {
1269
+ "const": "patch"
1270
+ }
1271
+ ]
1272
+ }
834
1273
  },
835
- method: {
836
- description: "HTTP method of the API operation.\n\nNote that, if the API operation has {@link requestBody}, method must not\nbe `get`.\n\nAlso, even though the API operation has been designed to only get\ninformation, but it needs complicated request information, it must be\ndefined as `patch` method with {@link requestBody} data specification.\n\n- `get`: get information\n- `patch`: get information with complicated request data\n ({@link requestBody})\n- `post`: create new record\n- `put`: update existing record\n- `delete`: remove record",
837
- oneOf: [
838
- {
839
- "const": "get"
840
- },
841
- {
842
- "const": "post"
843
- },
844
- {
845
- "const": "put"
846
- },
847
- {
848
- "const": "delete"
849
- },
850
- {
851
- "const": "patch"
852
- }
853
- ]
854
- }
1274
+ required: [
1275
+ "prisma_schemas",
1276
+ "model_name",
1277
+ "soft_delete_column",
1278
+ "description",
1279
+ "name",
1280
+ "specification",
1281
+ "summary",
1282
+ "path",
1283
+ "parameters",
1284
+ "requestBody",
1285
+ "responseBody",
1286
+ "authorizationRole",
1287
+ "method"
1288
+ ]
855
1289
  },
856
- required: [
857
- "prisma_schemas",
858
- "description",
859
- "name",
860
- "specification",
861
- "summary",
862
- "path",
863
- "parameters",
864
- "requestBody",
865
- "responseBody",
866
- "authorizationRole",
867
- "method"
868
- ]
869
- },
870
- "AutoBeOpenApi.IParameter": {
871
- description: "Path parameter information for API routes.\n\nThis interface defines a path parameter that appears in the URL of an API\nendpoint. Path parameters are enclosed in curly braces in the\n{@link AutoBeOpenApi.IOperation.path operation path} and must be defined\nwith their types and descriptions.\n\nFor example, if API operation path is\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nthe path parameters should be like below:\n\n```json\n{\n \"path\": \"/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}\",\n \"method\": \"get\",\n \"parameters\": [\n {\n \"name\": \"saleId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target sale's ID\"\n },\n {\n \"name\": \"questionId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target question's ID\"\n },\n {\n \"name\": \"commentId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target comment's ID\"\n }\n ]\n}\n```",
872
- type: "object",
873
- properties: {
874
- name: {
875
- description: "Identifier name of the path parameter.\n\nThis name must match exactly with the parameter name in the route path.\nIt must be corresponded to the\n{@link AutoBeOpenApi.IOperation.path API operation path}.\n\nMUST use camelCase naming convention.",
876
- type: "string",
877
- pattern: "^[a-z][a-zA-Z0-9]*$"
878
- },
879
- description: {
880
- description: "Description about the path parameter.\n\nMake short, concise and clear description about the path parameter.\n\n> MUST be written in English. Never use other languages.",
881
- type: "string"
882
- },
883
- schema: {
884
- description: "Type schema of the path parameter.\n\nPath parameters are typically primitive types like\n{@link AutoBeOpenApi.IJsonSchema.IString strings},\n{@link AutoBeOpenApi.IJsonSchema.IInteger integers},\n{@link AutoBeOpenApi.IJsonSchema.INumber numbers}.\n\nIf you need other types, please use request body instead with object type\nencapsulation.",
885
- oneOf: [
886
- {
887
- $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber"
888
- },
889
- {
890
- $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger"
891
- },
892
- {
893
- $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
894
- }
895
- ],
896
- discriminator: {
897
- propertyName: "type",
898
- mapping: {
899
- number: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber",
900
- integer: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger",
901
- string: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
1290
+ "AutoBeOpenApi.IParameter": {
1291
+ description: "Path parameter information for API routes.\n\nThis interface defines a path parameter that appears in the URL of an API\nendpoint. Path parameters are enclosed in curly braces in the\n{@link AutoBeOpenApi.IOperation.path operation path} and must be defined\nwith their types and descriptions.\n\nFor example, if API operation path is\n`/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}`,\nthe path parameters should be like below:\n\n```json\n{\n \"path\": \"/shoppings/customers/sales/{saleId}/questions/${questionId}/comments/${commentId}\",\n \"method\": \"get\",\n \"parameters\": [\n {\n \"name\": \"saleId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target sale's ID\"\n },\n {\n \"name\": \"questionId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target question's ID\"\n },\n {\n \"name\": \"commentId\",\n \"in\": \"path\",\n \"schema\": { \"type\": \"string\", \"format\": \"uuid\" },\n \"description\": \"Target comment's ID\"\n }\n ]\n}\n```",
1292
+ type: "object",
1293
+ properties: {
1294
+ name: {
1295
+ description: "Identifier name of the path parameter.\n\nThis name must match exactly with the parameter name in the route path.\nIt must be corresponded to the\n{@link AutoBeOpenApi.IOperation.path API operation path}.\n\nMUST use camelCase naming convention.",
1296
+ type: "string",
1297
+ pattern: "^[a-z][a-zA-Z0-9]*$"
1298
+ },
1299
+ description: {
1300
+ description: "Description about the path parameter.\n\nMake short, concise and clear description about the path parameter.\n\n> MUST be written in English. Never use other languages.",
1301
+ type: "string"
1302
+ },
1303
+ schema: {
1304
+ description: "Type schema of the path parameter.\n\nPath parameters are typically primitive types like\n{@link AutoBeOpenApi.IJsonSchema.IString strings},\n{@link AutoBeOpenApi.IJsonSchema.IInteger integers},\n{@link AutoBeOpenApi.IJsonSchema.INumber numbers}.\n\nIf you need other types, please use request body instead with object type\nencapsulation.",
1305
+ oneOf: [
1306
+ {
1307
+ $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber"
1308
+ },
1309
+ {
1310
+ $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger"
1311
+ },
1312
+ {
1313
+ $ref: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
1314
+ }
1315
+ ],
1316
+ discriminator: {
1317
+ propertyName: "type",
1318
+ mapping: {
1319
+ number: "#/$defs/AutoBeOpenApi.IJsonSchema.INumber",
1320
+ integer: "#/$defs/AutoBeOpenApi.IJsonSchema.IInteger",
1321
+ string: "#/$defs/AutoBeOpenApi.IJsonSchema.IString"
1322
+ }
902
1323
  }
903
1324
  }
904
- }
905
- },
906
- required: [
907
- "name",
908
- "description",
909
- "schema"
910
- ]
911
- },
912
- "AutoBeOpenApi.IJsonSchema.INumber": {
913
- description: "Number (double) type info.",
914
- type: "object",
915
- properties: {
916
- minimum: {
917
- description: "Minimum value restriction.",
918
- type: "number"
919
1325
  },
920
- maximum: {
921
- description: "Maximum value restriction.",
922
- type: "number"
923
- },
924
- exclusiveMinimum: {
925
- description: "Exclusive minimum value restriction.",
926
- type: "number"
927
- },
928
- exclusiveMaximum: {
929
- description: "Exclusive maximum value restriction.",
930
- type: "number"
931
- },
932
- multipleOf: {
933
- description: "Multiple of value restriction.",
934
- type: "number",
935
- exclusiveMinimum: 0
936
- },
937
- type: {
938
- description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
939
- "const": "number"
940
- }
1326
+ required: [
1327
+ "name",
1328
+ "description",
1329
+ "schema"
1330
+ ]
941
1331
  },
942
- required: [
943
- "type"
944
- ]
945
- },
946
- "AutoBeOpenApi.IJsonSchema.IInteger": {
947
- description: "Integer type info.",
948
- type: "object",
949
- properties: {
950
- minimum: {
951
- description: "Minimum value restriction.",
952
- type: "integer"
953
- },
954
- maximum: {
955
- description: "Maximum value restriction.",
956
- type: "integer"
957
- },
958
- exclusiveMinimum: {
959
- description: "Exclusive minimum value restriction.",
960
- type: "number"
961
- },
962
- exclusiveMaximum: {
963
- description: "Exclusive maximum value restriction.",
964
- type: "number"
965
- },
966
- multipleOf: {
967
- description: "Multiple of value restriction.",
968
- type: "integer",
969
- exclusiveMinimum: 0
1332
+ "AutoBeOpenApi.IJsonSchema.INumber": {
1333
+ description: "Number (double) type info.",
1334
+ type: "object",
1335
+ properties: {
1336
+ minimum: {
1337
+ description: "Minimum value restriction.",
1338
+ type: "number"
1339
+ },
1340
+ maximum: {
1341
+ description: "Maximum value restriction.",
1342
+ type: "number"
1343
+ },
1344
+ exclusiveMinimum: {
1345
+ description: "Exclusive minimum value restriction.",
1346
+ type: "number"
1347
+ },
1348
+ exclusiveMaximum: {
1349
+ description: "Exclusive maximum value restriction.",
1350
+ type: "number"
1351
+ },
1352
+ multipleOf: {
1353
+ description: "Multiple of value restriction.",
1354
+ type: "number",
1355
+ exclusiveMinimum: 0
1356
+ },
1357
+ type: {
1358
+ description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
1359
+ "const": "number"
1360
+ }
970
1361
  },
971
- type: {
972
- description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
973
- "const": "integer"
974
- }
1362
+ required: [
1363
+ "type"
1364
+ ]
975
1365
  },
976
- required: [
977
- "type"
978
- ]
979
- },
980
- "AutoBeOpenApi.IJsonSchema.IString": {
981
- description: "String type info.",
982
- type: "object",
983
- properties: {
984
- format: {
985
- description: "Format restriction.",
986
- type: "string"
987
- },
988
- pattern: {
989
- description: "Pattern restriction.",
990
- type: "string"
991
- },
992
- contentMediaType: {
993
- description: "Content media type restriction.",
994
- type: "string"
995
- },
996
- minLength: {
997
- description: "Minimum length restriction.",
998
- type: "integer",
999
- minimum: 0
1000
- },
1001
- maxLength: {
1002
- description: "Maximum length restriction.",
1003
- type: "integer",
1004
- minimum: 0
1366
+ "AutoBeOpenApi.IJsonSchema.IInteger": {
1367
+ description: "Integer type info.",
1368
+ type: "object",
1369
+ properties: {
1370
+ minimum: {
1371
+ description: "Minimum value restriction.",
1372
+ type: "integer"
1373
+ },
1374
+ maximum: {
1375
+ description: "Maximum value restriction.",
1376
+ type: "integer"
1377
+ },
1378
+ exclusiveMinimum: {
1379
+ description: "Exclusive minimum value restriction.",
1380
+ type: "number"
1381
+ },
1382
+ exclusiveMaximum: {
1383
+ description: "Exclusive maximum value restriction.",
1384
+ type: "number"
1385
+ },
1386
+ multipleOf: {
1387
+ description: "Multiple of value restriction.",
1388
+ type: "integer",
1389
+ exclusiveMinimum: 0
1390
+ },
1391
+ type: {
1392
+ description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
1393
+ "const": "integer"
1394
+ }
1005
1395
  },
1006
- type: {
1007
- description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
1008
- "const": "string"
1009
- }
1396
+ required: [
1397
+ "type"
1398
+ ]
1010
1399
  },
1011
- required: [
1012
- "type"
1013
- ]
1014
- },
1015
- "AutoBeOpenApi.IRequestBody": {
1016
- description: "Request body information of OpenAPI operation.\n\nThis interface defines the structure for request bodies in API routes. It\ncorresponds to the requestBody section in OpenAPI specifications, providing\nboth a description and schema reference for the request payload.\n\nThe content-type for all request bodies is always `application/json`. Even\nwhen file uploading is required, don't use `multipart/form-data` or\n`application/x-www-form-urlencoded` content types. Instead, just define an\nURI string property in the request body schema.\n\nNote that, all body schemas must be transformable to a\n{@link AutoBeOpenApi.IJsonSchema.IReference reference} type defined in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"requestBody\": {\n \"description\": \"Creation info of the order\",\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n }\n }\n }\n}\n```",
1017
- type: "object",
1018
- properties: {
1019
- description: {
1020
- description: "Description about the request body.\n\nMake short, concise and clear description about the request body.\n\n> MUST be written in English. Never use other languages.",
1021
- type: "string"
1400
+ "AutoBeOpenApi.IJsonSchema.IString": {
1401
+ description: "String type info.",
1402
+ type: "object",
1403
+ properties: {
1404
+ format: {
1405
+ description: "Format restriction.",
1406
+ type: "string"
1407
+ },
1408
+ pattern: {
1409
+ description: "Pattern restriction.",
1410
+ type: "string"
1411
+ },
1412
+ contentMediaType: {
1413
+ description: "Content media type restriction.",
1414
+ type: "string"
1415
+ },
1416
+ minLength: {
1417
+ description: "Minimum length restriction.",
1418
+ type: "integer",
1419
+ minimum: 0
1420
+ },
1421
+ maxLength: {
1422
+ description: "Maximum length restriction.",
1423
+ type: "integer",
1424
+ minimum: 0
1425
+ },
1426
+ type: {
1427
+ description: "Discriminator value of the type.\n\nCRITICAL: This MUST be a SINGLE string value, NOT an array. The type\nfield identifies the JSON Schema type and must be exactly one of:\n\"boolean\", \"integer\", \"number\", \"string\", \"array\", \"object\", or\n\"null\".\n\n\u274C INCORRECT: type: [\"string\", \"null\"] // This is WRONG! \u2705 CORRECT:\ntype: \"string\" // For nullable string, use oneOf instead\n\nIf you need to express a nullable type (e.g., string | null), you MUST\nuse the `IOneOf` structure:\n\n```typescript\n{\n \"oneOf\": [{ \"type\": \"string\" }, { \"type\": \"null\" }]\n}\n```\n\nNEVER use array notation in the type field. The type field is a\ndiscriminator that accepts only a single string value.",
1428
+ "const": "string"
1429
+ }
1022
1430
  },
1023
- typeName: {
1024
- description: "Request body type name.\n\nThis specifies the data structure expected in the request body, that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference reference}\ntype in the {@link AutoBeOpenApi.IComponents.schemas components section}\nas an {@link AutoBeOpenApi.IJsonSchema.Object object} type.\n\nHere is the naming convention for the request body type:\n\n- `IEntityName.ICreate`: Request body for creation operations (POST)\n- `IEntityName.IUpdate`: Request body for update operations (PUT)\n- `IEntityName.IRequest`: Request parameters for list operations (often\n with search/pagination)\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder.ICreate\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n}\n```",
1025
- type: "string"
1026
- }
1431
+ required: [
1432
+ "type"
1433
+ ]
1027
1434
  },
1028
- required: [
1029
- "description",
1030
- "typeName"
1031
- ]
1032
- },
1033
- "AutoBeOpenApi.IResponseBody": {
1034
- description: "Response body information for OpenAPI operation.\n\nThis interface defines the structure of a successful response from an API\noperation. It provides a description of the response and a schema reference\nto define the returned data structure.\n\nThe content-type for all responses is always `application/json`. Even when\nfile downloading is required, don't use `application/octet-stream` or\n`multipart/form-data` content types. Instead, just define an URI string\nproperty in the response body schema.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"responses\": {\n \"200\": {\n \"description\": \"Order information\",\n \"content\": {\n \"application/json\": {\n \"schema\": { \"$ref\": \"#/components/schemas/IShoppingOrder\" }\n }\n }\n }\n }\n}\n```",
1035
- type: "object",
1036
- properties: {
1037
- description: {
1038
- description: "Description about the response body.\n\nMake short, concise and clear description about the response body.\n\n> MUST be written in English. Never use other languages.",
1039
- type: "string"
1435
+ "AutoBeOpenApi.IRequestBody": {
1436
+ description: "Request body information of OpenAPI operation.\n\nThis interface defines the structure for request bodies in API routes. It\ncorresponds to the requestBody section in OpenAPI specifications, providing\nboth a description and schema reference for the request payload.\n\nThe content-type for all request bodies is always `application/json`. Even\nwhen file uploading is required, don't use `multipart/form-data` or\n`application/x-www-form-urlencoded` content types. Instead, just define an\nURI string property in the request body schema.\n\nNote that, all body schemas must be transformable to a\n{@link AutoBeOpenApi.IJsonSchema.IReference reference} type defined in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"requestBody\": {\n \"description\": \"Creation info of the order\",\n \"content\": {\n \"application/json\": {\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n }\n }\n }\n}\n```",
1437
+ type: "object",
1438
+ properties: {
1439
+ description: {
1440
+ description: "Description about the request body.\n\nMake short, concise and clear description about the request body.\n\n> MUST be written in English. Never use other languages.",
1441
+ type: "string"
1442
+ },
1443
+ typeName: {
1444
+ description: "Request body type name.\n\nThis specifies the data structure expected in the request body, that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference reference}\ntype in the {@link AutoBeOpenApi.IComponents.schemas components section}\nas an {@link AutoBeOpenApi.IJsonSchema.Object object} type.\n\nHere is the naming convention for the request body type:\n\n- `IEntityName.ICreate`: Request body for creation operations (POST)\n- `IEntityName.IUpdate`: Request body for update operations (PUT)\n- `IEntityName.IRequest`: Request parameters for list operations (often\n with search/pagination)\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder.ICreate\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder.ICreate\"\n }\n}\n```",
1445
+ type: "string"
1446
+ }
1040
1447
  },
1041
- typeName: {
1042
- description: "Response body's data type.\n\nSpecifies the structure of the returned data (response body), that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference} type in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nHere is the naming convention for the response body type:\n\n- `IEntityName`: Main entity with detailed information (e.g.,\n `IShoppingSale`)\n- `IEntityName.ISummary`: Simplified response version with essential\n properties\n- `IEntityName.IInvert`: Alternative view of an entity from a different\n perspective\n- `IPageIEntityName`: Paginated results container with `pagination` and\n `data` properties\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder\"\n }\n}\n```",
1043
- type: "string"
1044
- }
1448
+ required: [
1449
+ "description",
1450
+ "typeName"
1451
+ ]
1045
1452
  },
1046
- required: [
1047
- "description",
1048
- "typeName"
1049
- ]
1453
+ "AutoBeOpenApi.IResponseBody": {
1454
+ description: "Response body information for OpenAPI operation.\n\nThis interface defines the structure of a successful response from an API\noperation. It provides a description of the response and a schema reference\nto define the returned data structure.\n\nThe content-type for all responses is always `application/json`. Even when\nfile downloading is required, don't use `application/octet-stream` or\n`multipart/form-data` content types. Instead, just define an URI string\nproperty in the response body schema.\n\nIn OpenAPI, this might represent:\n\n```json\n{\n \"responses\": {\n \"200\": {\n \"description\": \"Order information\",\n \"content\": {\n \"application/json\": {\n \"schema\": { \"$ref\": \"#/components/schemas/IShoppingOrder\" }\n }\n }\n }\n }\n}\n```",
1455
+ type: "object",
1456
+ properties: {
1457
+ description: {
1458
+ description: "Description about the response body.\n\nMake short, concise and clear description about the response body.\n\n> MUST be written in English. Never use other languages.",
1459
+ type: "string"
1460
+ },
1461
+ typeName: {
1462
+ description: "Response body's data type.\n\nSpecifies the structure of the returned data (response body), that will\nbe transformed to {@link AutoBeOpenApi.IJsonSchema.IReference} type in the\n{@link AutoBeOpenApi.IComponents.schemas components section} as an\n{@link AutoBeOpenApi.IJsonSchema.IObject object} type.\n\nHere is the naming convention for the response body type:\n\n- `IEntityName`: Main entity with detailed information (e.g.,\n `IShoppingSale`)\n- `IEntityName.ISummary`: Simplified response version with essential\n properties\n- `IEntityName.IInvert`: Alternative view of an entity from a different\n perspective\n- `IPageIEntityName`: Paginated results container with `pagination` and\n `data` properties\n\nWhat you write:\n\n```json\n{\n \"typeName\": \"IShoppingOrder\"\n}\n```\n\nTransformed to:\n\n```json\n{\n \"schema\": {\n \"$ref\": \"#/components/schemas/IShoppingOrder\"\n }\n}\n```",
1463
+ type: "string"
1464
+ }
1465
+ },
1466
+ required: [
1467
+ "description",
1468
+ "typeName"
1469
+ ]
1470
+ }
1050
1471
  }
1051
- }
1052
- },
1053
- description: "Reviews a batch of API operations for quality and correctness.\n\nValidates each operation's request/response schemas, authentication\nhandling, error responses, and documentation completeness. Operations are\nmarked as passed or failed based on compliance with enterprise standards.",
1054
- validate: (() => { const _io0 = input => "string" === typeof input.review && "string" === typeof input.plan && (Array.isArray(input.content) && input.content.every(elem => "object" === typeof elem && null !== elem && _io1(elem))); const _io1 = input => "string" === typeof input.prisma_schemas && "string" === typeof input.description && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && "string" === typeof input.specification && "string" === typeof input.summary && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && (null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) && 1 <= input.authorizationRole.length)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
1055
- if ("number" === input.type)
1056
- return _io4(input);
1057
- else if ("integer" === input.type)
1058
- return _io3(input);
1059
- else if ("string" === input.type)
1060
- return _io5(input);
1061
- else
1062
- return false;
1063
- })(); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.review || _report(_exceptionable, {
1064
- path: _path + ".review",
1065
- expected: "string",
1066
- value: input.review
1067
- }), "string" === typeof input.plan || _report(_exceptionable, {
1068
- path: _path + ".plan",
1069
- expected: "string",
1070
- value: input.plan
1071
- }), (Array.isArray(input.content) || _report(_exceptionable, {
1072
- path: _path + ".content",
1073
- expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
1074
- value: input.content
1075
- })) && input.content.map((elem, _index3) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
1076
- path: _path + ".content[" + _index3 + "]",
1077
- expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
1078
- value: elem
1079
- })) && _vo1(elem, _path + ".content[" + _index3 + "]", true && _exceptionable) || _report(_exceptionable, {
1080
- path: _path + ".content[" + _index3 + "]",
1081
- expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
1082
- value: elem
1083
- })).every(flag => flag) || _report(_exceptionable, {
1084
- path: _path + ".content",
1085
- expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
1086
- value: input.content
1087
- })].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.prisma_schemas || _report(_exceptionable, {
1088
- path: _path + ".prisma_schemas",
1089
- expected: "string",
1090
- value: input.prisma_schemas
1091
- }), "string" === typeof input.description || _report(_exceptionable, {
1092
- path: _path + ".description",
1093
- expected: "string",
1094
- value: input.description
1095
- }), "string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
1096
- path: _path + ".name",
1097
- expected: "string & CamelPattern",
1098
- value: input.name
1099
- })) || _report(_exceptionable, {
1100
- path: _path + ".name",
1101
- expected: "(string & CamelPattern)",
1102
- value: input.name
1103
- }), "string" === typeof input.specification || _report(_exceptionable, {
1104
- path: _path + ".specification",
1105
- expected: "string",
1106
- value: input.specification
1107
- }), "string" === typeof input.summary || _report(_exceptionable, {
1108
- path: _path + ".summary",
1109
- expected: "string",
1110
- value: input.summary
1111
- }), "string" === typeof input.path && (RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) || _report(_exceptionable, {
1112
- path: _path + ".path",
1113
- expected: "string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">",
1114
- value: input.path
1115
- })) || _report(_exceptionable, {
1116
- path: _path + ".path",
1117
- expected: "(string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">)",
1118
- value: input.path
1119
- }), (Array.isArray(input.parameters) || _report(_exceptionable, {
1120
- path: _path + ".parameters",
1121
- expected: "Array<AutoBeOpenApi.IParameter>",
1122
- value: input.parameters
1123
- })) && input.parameters.map((elem, _index4) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
1124
- path: _path + ".parameters[" + _index4 + "]",
1125
- expected: "AutoBeOpenApi.IParameter",
1126
- value: elem
1127
- })) && _vo2(elem, _path + ".parameters[" + _index4 + "]", true && _exceptionable) || _report(_exceptionable, {
1128
- path: _path + ".parameters[" + _index4 + "]",
1129
- expected: "AutoBeOpenApi.IParameter",
1130
- value: elem
1131
- })).every(flag => flag) || _report(_exceptionable, {
1132
- path: _path + ".parameters",
1133
- expected: "Array<AutoBeOpenApi.IParameter>",
1134
- value: input.parameters
1135
- }), null === input.requestBody || ("object" === typeof input.requestBody && null !== input.requestBody || _report(_exceptionable, {
1136
- path: _path + ".requestBody",
1137
- expected: "(AutoBeOpenApi.IRequestBody | null)",
1138
- value: input.requestBody
1139
- })) && _vo6(input.requestBody, _path + ".requestBody", true && _exceptionable) || _report(_exceptionable, {
1140
- path: _path + ".requestBody",
1141
- expected: "(AutoBeOpenApi.IRequestBody | null)",
1142
- value: input.requestBody
1143
- }), null === input.responseBody || ("object" === typeof input.responseBody && null !== input.responseBody || _report(_exceptionable, {
1144
- path: _path + ".responseBody",
1145
- expected: "(AutoBeOpenApi.IResponseBody | null)",
1146
- value: input.responseBody
1147
- })) && _vo7(input.responseBody, _path + ".responseBody", true && _exceptionable) || _report(_exceptionable, {
1148
- path: _path + ".responseBody",
1149
- expected: "(AutoBeOpenApi.IResponseBody | null)",
1150
- value: input.responseBody
1151
- }), null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) || _report(_exceptionable, {
1152
- path: _path + ".authorizationRole",
1153
- expected: "string & CamelPattern",
1154
- value: input.authorizationRole
1155
- })) && (1 <= input.authorizationRole.length || _report(_exceptionable, {
1156
- path: _path + ".authorizationRole",
1157
- expected: "string & MinLength<1>",
1158
- value: input.authorizationRole
1159
- })) || _report(_exceptionable, {
1160
- path: _path + ".authorizationRole",
1161
- expected: "((string & CamelPattern & MinLength<1>) | null)",
1162
- value: input.authorizationRole
1163
- }), "get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method || _report(_exceptionable, {
1164
- path: _path + ".method",
1165
- expected: "(\"delete\" | \"get\" | \"patch\" | \"post\" | \"put\")",
1166
- value: input.method
1167
- })].every(flag => flag); const _vo2 = (input, _path, _exceptionable = true) => ["string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
1168
- path: _path + ".name",
1169
- expected: "string & CamelPattern",
1170
- value: input.name
1171
- })) || _report(_exceptionable, {
1172
- path: _path + ".name",
1173
- expected: "(string & CamelPattern)",
1174
- value: input.name
1175
- }), "string" === typeof input.description || _report(_exceptionable, {
1176
- path: _path + ".description",
1177
- expected: "string",
1178
- value: input.description
1179
- }), ("object" === typeof input.schema && null !== input.schema || _report(_exceptionable, {
1180
- path: _path + ".schema",
1181
- expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
1182
- value: input.schema
1183
- })) && _vu0(input.schema, _path + ".schema", true && _exceptionable) || _report(_exceptionable, {
1184
- path: _path + ".schema",
1185
- expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
1186
- value: input.schema
1187
- })].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000 || _report(_exceptionable, {
1188
- path: _path + ".minimum",
1189
- expected: "number & Type<\"int64\">",
1190
- value: input.minimum
1191
- })) || _report(_exceptionable, {
1192
- path: _path + ".minimum",
1193
- expected: "((number & Type<\"int64\">) | undefined)",
1194
- value: input.minimum
1195
- }), undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000 || _report(_exceptionable, {
1196
- path: _path + ".maximum",
1197
- expected: "number & Type<\"int64\">",
1198
- value: input.maximum
1199
- })) || _report(_exceptionable, {
1200
- path: _path + ".maximum",
1201
- expected: "((number & Type<\"int64\">) | undefined)",
1202
- value: input.maximum
1203
- }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
1204
- path: _path + ".exclusiveMinimum",
1205
- expected: "(number | undefined)",
1206
- value: input.exclusiveMinimum
1207
- }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
1208
- path: _path + ".exclusiveMaximum",
1209
- expected: "(number | undefined)",
1210
- value: input.exclusiveMaximum
1211
- }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 || _report(_exceptionable, {
1212
- path: _path + ".multipleOf",
1213
- expected: "number & Type<\"uint64\">",
1214
- value: input.multipleOf
1215
- })) && (0 < input.multipleOf || _report(_exceptionable, {
1216
- path: _path + ".multipleOf",
1217
- expected: "number & ExclusiveMinimum<0>",
1218
- value: input.multipleOf
1219
- })) || _report(_exceptionable, {
1220
- path: _path + ".multipleOf",
1221
- expected: "((number & Type<\"uint64\"> & ExclusiveMinimum<0>) | undefined)",
1222
- value: input.multipleOf
1223
- }), "integer" === input.type || _report(_exceptionable, {
1224
- path: _path + ".type",
1225
- expected: "\"integer\"",
1226
- value: input.type
1227
- })].every(flag => flag); const _vo4 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum || _report(_exceptionable, {
1228
- path: _path + ".minimum",
1229
- expected: "(number | undefined)",
1230
- value: input.minimum
1231
- }), undefined === input.maximum || "number" === typeof input.maximum || _report(_exceptionable, {
1232
- path: _path + ".maximum",
1233
- expected: "(number | undefined)",
1234
- value: input.maximum
1235
- }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
1236
- path: _path + ".exclusiveMinimum",
1237
- expected: "(number | undefined)",
1238
- value: input.exclusiveMinimum
1239
- }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
1240
- path: _path + ".exclusiveMaximum",
1241
- expected: "(number | undefined)",
1242
- value: input.exclusiveMaximum
1243
- }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (0 < input.multipleOf || _report(_exceptionable, {
1244
- path: _path + ".multipleOf",
1245
- expected: "number & ExclusiveMinimum<0>",
1246
- value: input.multipleOf
1247
- })) || _report(_exceptionable, {
1248
- path: _path + ".multipleOf",
1249
- expected: "((number & ExclusiveMinimum<0>) | undefined)",
1250
- value: input.multipleOf
1251
- }), "number" === input.type || _report(_exceptionable, {
1252
- path: _path + ".type",
1253
- expected: "\"number\"",
1254
- value: input.type
1255
- })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || "string" === typeof input.format || _report(_exceptionable, {
1256
- path: _path + ".format",
1257
- expected: "(string | undefined)",
1258
- value: input.format
1259
- }), undefined === input.pattern || "string" === typeof input.pattern || _report(_exceptionable, {
1260
- path: _path + ".pattern",
1261
- expected: "(string | undefined)",
1262
- value: input.pattern
1263
- }), undefined === input.contentMediaType || "string" === typeof input.contentMediaType || _report(_exceptionable, {
1264
- path: _path + ".contentMediaType",
1265
- expected: "(string | undefined)",
1266
- value: input.contentMediaType
1267
- }), undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000 || _report(_exceptionable, {
1268
- path: _path + ".minLength",
1269
- expected: "number & Type<\"uint64\">",
1270
- value: input.minLength
1271
- })) || _report(_exceptionable, {
1272
- path: _path + ".minLength",
1273
- expected: "((number & Type<\"uint64\">) | undefined)",
1274
- value: input.minLength
1275
- }), undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000 || _report(_exceptionable, {
1276
- path: _path + ".maxLength",
1277
- expected: "number & Type<\"uint64\">",
1278
- value: input.maxLength
1279
- })) || _report(_exceptionable, {
1280
- path: _path + ".maxLength",
1281
- expected: "((number & Type<\"uint64\">) | undefined)",
1282
- value: input.maxLength
1283
- }), "string" === input.type || _report(_exceptionable, {
1284
- path: _path + ".type",
1285
- expected: "\"string\"",
1286
- value: input.type
1287
- })].every(flag => flag); const _vo6 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
1288
- path: _path + ".description",
1289
- expected: "string",
1290
- value: input.description
1291
- }), "string" === typeof input.typeName || _report(_exceptionable, {
1292
- path: _path + ".typeName",
1293
- expected: "string",
1294
- value: input.typeName
1295
- })].every(flag => flag); const _vo7 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
1296
- path: _path + ".description",
1297
- expected: "string",
1298
- value: input.description
1299
- }), "string" === typeof input.typeName || _report(_exceptionable, {
1300
- path: _path + ".typeName",
1301
- expected: "string",
1302
- value: input.typeName
1303
- })].every(flag => flag); const _vu0 = (input, _path, _exceptionable = true) => (() => {
1304
- if ("number" === input.type)
1305
- return _vo4(input, _path, true && _exceptionable);
1306
- else if ("integer" === input.type)
1307
- return _vo3(input, _path, true && _exceptionable);
1308
- else if ("string" === input.type)
1309
- return _vo5(input, _path, true && _exceptionable);
1310
- else
1311
- return _report(_exceptionable, {
1312
- path: _path,
1313
- expected: "(AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.IString)",
1314
- value: input
1315
- });
1316
- })(); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
1317
- if (false === __is(input)) {
1318
- errors = [];
1319
- _report = __typia_transform__validateReport._validateReport(errors);
1320
- ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
1321
- path: _path + "",
1322
- expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
1323
- value: input
1324
- })) && _vo0(input, _path + "", true) || _report(true, {
1325
- path: _path + "",
1326
- expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
1327
- value: input
1328
- }))(input, "$input", true);
1329
- const success = 0 === errors.length;
1330
- return success ? {
1331
- success,
1332
- data: input
1333
- } : {
1334
- success,
1335
- errors,
1472
+ },
1473
+ description: "Reviews a batch of API operations for quality and correctness.\n\nValidates each operation's request/response schemas, authentication\nhandling, error responses, and documentation completeness. Operations are\nmarked as passed or failed based on compliance with enterprise standards.",
1474
+ validate: (() => { const _io0 = input => "string" === typeof input.review && "string" === typeof input.plan && (Array.isArray(input.content) && input.content.every(elem => "object" === typeof elem && null !== elem && _io1(elem))); const _io1 = input => "string" === typeof input.prisma_schemas && "string" === typeof input.model_name && (null === input.soft_delete_column || "string" === typeof input.soft_delete_column) && "string" === typeof input.description && ("string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name)) && "string" === typeof input.specification && "string" === typeof input.summary && ("string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path)) && (Array.isArray(input.parameters) && input.parameters.every(elem => "object" === typeof elem && null !== elem && _io2(elem))) && (null === input.requestBody || "object" === typeof input.requestBody && null !== input.requestBody && _io6(input.requestBody)) && (null === input.responseBody || "object" === typeof input.responseBody && null !== input.responseBody && _io7(input.responseBody)) && (null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) && 1 <= input.authorizationRole.length)) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _io2 = input => "string" === typeof input.name && RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) && "string" === typeof input.description && ("object" === typeof input.schema && null !== input.schema && _iu0(input.schema)); const _io3 = input => (undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000)) && (undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000)) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 && 0 < input.multipleOf)) && "integer" === input.type; const _io4 = input => (undefined === input.minimum || "number" === typeof input.minimum) && (undefined === input.maximum || "number" === typeof input.maximum) && (undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum) && (undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum) && (undefined === input.multipleOf || "number" === typeof input.multipleOf && 0 < input.multipleOf) && "number" === input.type; const _io5 = input => (undefined === input.format || "string" === typeof input.format) && (undefined === input.pattern || "string" === typeof input.pattern) && (undefined === input.contentMediaType || "string" === typeof input.contentMediaType) && (undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000)) && (undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000)) && "string" === input.type; const _io6 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _io7 = input => "string" === typeof input.description && "string" === typeof input.typeName; const _iu0 = input => (() => {
1475
+ if ("number" === input.type)
1476
+ return _io4(input);
1477
+ else if ("integer" === input.type)
1478
+ return _io3(input);
1479
+ else if ("string" === input.type)
1480
+ return _io5(input);
1481
+ else
1482
+ return false;
1483
+ })(); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.review || _report(_exceptionable, {
1484
+ path: _path + ".review",
1485
+ expected: "string",
1486
+ value: input.review
1487
+ }), "string" === typeof input.plan || _report(_exceptionable, {
1488
+ path: _path + ".plan",
1489
+ expected: "string",
1490
+ value: input.plan
1491
+ }), (Array.isArray(input.content) || _report(_exceptionable, {
1492
+ path: _path + ".content",
1493
+ expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
1494
+ value: input.content
1495
+ })) && input.content.map((elem, _index3) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
1496
+ path: _path + ".content[" + _index3 + "]",
1497
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
1498
+ value: elem
1499
+ })) && _vo1(elem, _path + ".content[" + _index3 + "]", true && _exceptionable) || _report(_exceptionable, {
1500
+ path: _path + ".content[" + _index3 + "]",
1501
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IOperation",
1502
+ value: elem
1503
+ })).every(flag => flag) || _report(_exceptionable, {
1504
+ path: _path + ".content",
1505
+ expected: "Array<IAutoBeInterfaceOperationsReviewApplication.IOperation>",
1506
+ value: input.content
1507
+ })].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.prisma_schemas || _report(_exceptionable, {
1508
+ path: _path + ".prisma_schemas",
1509
+ expected: "string",
1510
+ value: input.prisma_schemas
1511
+ }), "string" === typeof input.model_name || _report(_exceptionable, {
1512
+ path: _path + ".model_name",
1513
+ expected: "string",
1514
+ value: input.model_name
1515
+ }), null === input.soft_delete_column || "string" === typeof input.soft_delete_column || _report(_exceptionable, {
1516
+ path: _path + ".soft_delete_column",
1517
+ expected: "(null | string)",
1518
+ value: input.soft_delete_column
1519
+ }), "string" === typeof input.description || _report(_exceptionable, {
1520
+ path: _path + ".description",
1521
+ expected: "string",
1522
+ value: input.description
1523
+ }), "string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
1524
+ path: _path + ".name",
1525
+ expected: "string & CamelPattern",
1526
+ value: input.name
1527
+ })) || _report(_exceptionable, {
1528
+ path: _path + ".name",
1529
+ expected: "(string & CamelPattern)",
1530
+ value: input.name
1531
+ }), "string" === typeof input.specification || _report(_exceptionable, {
1532
+ path: _path + ".specification",
1533
+ expected: "string",
1534
+ value: input.specification
1535
+ }), "string" === typeof input.summary || _report(_exceptionable, {
1536
+ path: _path + ".summary",
1537
+ expected: "string",
1538
+ value: input.summary
1539
+ }), "string" === typeof input.path && (RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) || _report(_exceptionable, {
1540
+ path: _path + ".path",
1541
+ expected: "string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">",
1542
+ value: input.path
1543
+ })) || _report(_exceptionable, {
1544
+ path: _path + ".path",
1545
+ expected: "(string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">)",
1546
+ value: input.path
1547
+ }), (Array.isArray(input.parameters) || _report(_exceptionable, {
1548
+ path: _path + ".parameters",
1549
+ expected: "Array<AutoBeOpenApi.IParameter>",
1550
+ value: input.parameters
1551
+ })) && input.parameters.map((elem, _index4) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
1552
+ path: _path + ".parameters[" + _index4 + "]",
1553
+ expected: "AutoBeOpenApi.IParameter",
1554
+ value: elem
1555
+ })) && _vo2(elem, _path + ".parameters[" + _index4 + "]", true && _exceptionable) || _report(_exceptionable, {
1556
+ path: _path + ".parameters[" + _index4 + "]",
1557
+ expected: "AutoBeOpenApi.IParameter",
1558
+ value: elem
1559
+ })).every(flag => flag) || _report(_exceptionable, {
1560
+ path: _path + ".parameters",
1561
+ expected: "Array<AutoBeOpenApi.IParameter>",
1562
+ value: input.parameters
1563
+ }), null === input.requestBody || ("object" === typeof input.requestBody && null !== input.requestBody || _report(_exceptionable, {
1564
+ path: _path + ".requestBody",
1565
+ expected: "(AutoBeOpenApi.IRequestBody | null)",
1566
+ value: input.requestBody
1567
+ })) && _vo6(input.requestBody, _path + ".requestBody", true && _exceptionable) || _report(_exceptionable, {
1568
+ path: _path + ".requestBody",
1569
+ expected: "(AutoBeOpenApi.IRequestBody | null)",
1570
+ value: input.requestBody
1571
+ }), null === input.responseBody || ("object" === typeof input.responseBody && null !== input.responseBody || _report(_exceptionable, {
1572
+ path: _path + ".responseBody",
1573
+ expected: "(AutoBeOpenApi.IResponseBody | null)",
1574
+ value: input.responseBody
1575
+ })) && _vo7(input.responseBody, _path + ".responseBody", true && _exceptionable) || _report(_exceptionable, {
1576
+ path: _path + ".responseBody",
1577
+ expected: "(AutoBeOpenApi.IResponseBody | null)",
1578
+ value: input.responseBody
1579
+ }), null === input.authorizationRole || "string" === typeof input.authorizationRole && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.authorizationRole) || _report(_exceptionable, {
1580
+ path: _path + ".authorizationRole",
1581
+ expected: "string & CamelPattern",
1582
+ value: input.authorizationRole
1583
+ })) && (1 <= input.authorizationRole.length || _report(_exceptionable, {
1584
+ path: _path + ".authorizationRole",
1585
+ expected: "string & MinLength<1>",
1586
+ value: input.authorizationRole
1587
+ })) || _report(_exceptionable, {
1588
+ path: _path + ".authorizationRole",
1589
+ expected: "((string & CamelPattern & MinLength<1>) | null)",
1590
+ value: input.authorizationRole
1591
+ }), "get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method || _report(_exceptionable, {
1592
+ path: _path + ".method",
1593
+ expected: "(\"delete\" | \"get\" | \"patch\" | \"post\" | \"put\")",
1594
+ value: input.method
1595
+ })].every(flag => flag); const _vo2 = (input, _path, _exceptionable = true) => ["string" === typeof input.name && (RegExp("^[a-z][a-zA-Z0-9]*$").test(input.name) || _report(_exceptionable, {
1596
+ path: _path + ".name",
1597
+ expected: "string & CamelPattern",
1598
+ value: input.name
1599
+ })) || _report(_exceptionable, {
1600
+ path: _path + ".name",
1601
+ expected: "(string & CamelPattern)",
1602
+ value: input.name
1603
+ }), "string" === typeof input.description || _report(_exceptionable, {
1604
+ path: _path + ".description",
1605
+ expected: "string",
1606
+ value: input.description
1607
+ }), ("object" === typeof input.schema && null !== input.schema || _report(_exceptionable, {
1608
+ path: _path + ".schema",
1609
+ expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
1610
+ value: input.schema
1611
+ })) && _vu0(input.schema, _path + ".schema", true && _exceptionable) || _report(_exceptionable, {
1612
+ path: _path + ".schema",
1613
+ expected: "(AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IString)",
1614
+ value: input.schema
1615
+ })].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum && (Math.floor(input.minimum) === input.minimum && -9223372036854776000 <= input.minimum && input.minimum <= 9223372036854776000 || _report(_exceptionable, {
1616
+ path: _path + ".minimum",
1617
+ expected: "number & Type<\"int64\">",
1618
+ value: input.minimum
1619
+ })) || _report(_exceptionable, {
1620
+ path: _path + ".minimum",
1621
+ expected: "((number & Type<\"int64\">) | undefined)",
1622
+ value: input.minimum
1623
+ }), undefined === input.maximum || "number" === typeof input.maximum && (Math.floor(input.maximum) === input.maximum && -9223372036854776000 <= input.maximum && input.maximum <= 9223372036854776000 || _report(_exceptionable, {
1624
+ path: _path + ".maximum",
1625
+ expected: "number & Type<\"int64\">",
1626
+ value: input.maximum
1627
+ })) || _report(_exceptionable, {
1628
+ path: _path + ".maximum",
1629
+ expected: "((number & Type<\"int64\">) | undefined)",
1630
+ value: input.maximum
1631
+ }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
1632
+ path: _path + ".exclusiveMinimum",
1633
+ expected: "(number | undefined)",
1634
+ value: input.exclusiveMinimum
1635
+ }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
1636
+ path: _path + ".exclusiveMaximum",
1637
+ expected: "(number | undefined)",
1638
+ value: input.exclusiveMaximum
1639
+ }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (Math.floor(input.multipleOf) === input.multipleOf && 0 <= input.multipleOf && input.multipleOf <= 18446744073709552000 || _report(_exceptionable, {
1640
+ path: _path + ".multipleOf",
1641
+ expected: "number & Type<\"uint64\">",
1642
+ value: input.multipleOf
1643
+ })) && (0 < input.multipleOf || _report(_exceptionable, {
1644
+ path: _path + ".multipleOf",
1645
+ expected: "number & ExclusiveMinimum<0>",
1646
+ value: input.multipleOf
1647
+ })) || _report(_exceptionable, {
1648
+ path: _path + ".multipleOf",
1649
+ expected: "((number & Type<\"uint64\"> & ExclusiveMinimum<0>) | undefined)",
1650
+ value: input.multipleOf
1651
+ }), "integer" === input.type || _report(_exceptionable, {
1652
+ path: _path + ".type",
1653
+ expected: "\"integer\"",
1654
+ value: input.type
1655
+ })].every(flag => flag); const _vo4 = (input, _path, _exceptionable = true) => [undefined === input.minimum || "number" === typeof input.minimum || _report(_exceptionable, {
1656
+ path: _path + ".minimum",
1657
+ expected: "(number | undefined)",
1658
+ value: input.minimum
1659
+ }), undefined === input.maximum || "number" === typeof input.maximum || _report(_exceptionable, {
1660
+ path: _path + ".maximum",
1661
+ expected: "(number | undefined)",
1662
+ value: input.maximum
1663
+ }), undefined === input.exclusiveMinimum || "number" === typeof input.exclusiveMinimum || _report(_exceptionable, {
1664
+ path: _path + ".exclusiveMinimum",
1665
+ expected: "(number | undefined)",
1666
+ value: input.exclusiveMinimum
1667
+ }), undefined === input.exclusiveMaximum || "number" === typeof input.exclusiveMaximum || _report(_exceptionable, {
1668
+ path: _path + ".exclusiveMaximum",
1669
+ expected: "(number | undefined)",
1670
+ value: input.exclusiveMaximum
1671
+ }), undefined === input.multipleOf || "number" === typeof input.multipleOf && (0 < input.multipleOf || _report(_exceptionable, {
1672
+ path: _path + ".multipleOf",
1673
+ expected: "number & ExclusiveMinimum<0>",
1674
+ value: input.multipleOf
1675
+ })) || _report(_exceptionable, {
1676
+ path: _path + ".multipleOf",
1677
+ expected: "((number & ExclusiveMinimum<0>) | undefined)",
1678
+ value: input.multipleOf
1679
+ }), "number" === input.type || _report(_exceptionable, {
1680
+ path: _path + ".type",
1681
+ expected: "\"number\"",
1682
+ value: input.type
1683
+ })].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => [undefined === input.format || "string" === typeof input.format || _report(_exceptionable, {
1684
+ path: _path + ".format",
1685
+ expected: "(string | undefined)",
1686
+ value: input.format
1687
+ }), undefined === input.pattern || "string" === typeof input.pattern || _report(_exceptionable, {
1688
+ path: _path + ".pattern",
1689
+ expected: "(string | undefined)",
1690
+ value: input.pattern
1691
+ }), undefined === input.contentMediaType || "string" === typeof input.contentMediaType || _report(_exceptionable, {
1692
+ path: _path + ".contentMediaType",
1693
+ expected: "(string | undefined)",
1694
+ value: input.contentMediaType
1695
+ }), undefined === input.minLength || "number" === typeof input.minLength && (Math.floor(input.minLength) === input.minLength && 0 <= input.minLength && input.minLength <= 18446744073709552000 || _report(_exceptionable, {
1696
+ path: _path + ".minLength",
1697
+ expected: "number & Type<\"uint64\">",
1698
+ value: input.minLength
1699
+ })) || _report(_exceptionable, {
1700
+ path: _path + ".minLength",
1701
+ expected: "((number & Type<\"uint64\">) | undefined)",
1702
+ value: input.minLength
1703
+ }), undefined === input.maxLength || "number" === typeof input.maxLength && (Math.floor(input.maxLength) === input.maxLength && 0 <= input.maxLength && input.maxLength <= 18446744073709552000 || _report(_exceptionable, {
1704
+ path: _path + ".maxLength",
1705
+ expected: "number & Type<\"uint64\">",
1706
+ value: input.maxLength
1707
+ })) || _report(_exceptionable, {
1708
+ path: _path + ".maxLength",
1709
+ expected: "((number & Type<\"uint64\">) | undefined)",
1710
+ value: input.maxLength
1711
+ }), "string" === input.type || _report(_exceptionable, {
1712
+ path: _path + ".type",
1713
+ expected: "\"string\"",
1714
+ value: input.type
1715
+ })].every(flag => flag); const _vo6 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
1716
+ path: _path + ".description",
1717
+ expected: "string",
1718
+ value: input.description
1719
+ }), "string" === typeof input.typeName || _report(_exceptionable, {
1720
+ path: _path + ".typeName",
1721
+ expected: "string",
1722
+ value: input.typeName
1723
+ })].every(flag => flag); const _vo7 = (input, _path, _exceptionable = true) => ["string" === typeof input.description || _report(_exceptionable, {
1724
+ path: _path + ".description",
1725
+ expected: "string",
1726
+ value: input.description
1727
+ }), "string" === typeof input.typeName || _report(_exceptionable, {
1728
+ path: _path + ".typeName",
1729
+ expected: "string",
1730
+ value: input.typeName
1731
+ })].every(flag => flag); const _vu0 = (input, _path, _exceptionable = true) => (() => {
1732
+ if ("number" === input.type)
1733
+ return _vo4(input, _path, true && _exceptionable);
1734
+ else if ("integer" === input.type)
1735
+ return _vo3(input, _path, true && _exceptionable);
1736
+ else if ("string" === input.type)
1737
+ return _vo5(input, _path, true && _exceptionable);
1738
+ else
1739
+ return _report(_exceptionable, {
1740
+ path: _path,
1741
+ expected: "(AutoBeOpenApi.IJsonSchema.INumber | AutoBeOpenApi.IJsonSchema.IInteger | AutoBeOpenApi.IJsonSchema.IString)",
1742
+ value: input
1743
+ });
1744
+ })(); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
1745
+ if (false === __is(input)) {
1746
+ errors = [];
1747
+ _report = __typia_transform__validateReport._validateReport(errors);
1748
+ ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
1749
+ path: _path + "",
1750
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
1751
+ value: input
1752
+ })) && _vo0(input, _path + "", true) || _report(true, {
1753
+ path: _path + "",
1754
+ expected: "IAutoBeInterfaceOperationsReviewApplication.IProps",
1755
+ value: input
1756
+ }))(input, "$input", true);
1757
+ const success = 0 === errors.length;
1758
+ return success ? {
1759
+ success,
1760
+ data: input
1761
+ } : {
1762
+ success,
1763
+ errors,
1764
+ data: input
1765
+ };
1766
+ }
1767
+ return {
1768
+ success: true,
1336
1769
  data: input
1337
1770
  };
1338
- }
1339
- return {
1340
- success: true,
1341
- data: input
1342
- };
1343
- }; })()
1344
- }
1345
- ]
1346
- },
1771
+ }; })()
1772
+ }
1773
+ ]
1774
+ };
1775
+ __typia_transform__llmApplicationFinalize._llmApplicationFinalize(application, Object.assign(Object.assign({}, {
1776
+ validate: {
1777
+ reviewOperations: validate,
1778
+ },
1779
+ }), { equals: false }));
1780
+ return application;
1781
+ })(),
1347
1782
  };
1348
1783
  //# sourceMappingURL=orchestrateInterfaceOperationsReview.js.map