@llm-dev-ops/agentics-cli 1.4.94 → 1.5.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 (121) hide show
  1. package/dist/agents/system-prompts.d.ts.map +1 -1
  2. package/dist/agents/system-prompts.js +25 -3
  3. package/dist/agents/system-prompts.js.map +1 -1
  4. package/dist/commands/export.d.ts.map +1 -1
  5. package/dist/commands/export.js +20 -1
  6. package/dist/commands/export.js.map +1 -1
  7. package/dist/infrastructure/db-adapter.d.ts +67 -0
  8. package/dist/infrastructure/db-adapter.d.ts.map +1 -0
  9. package/dist/infrastructure/db-adapter.js +151 -0
  10. package/dist/infrastructure/db-adapter.js.map +1 -0
  11. package/dist/infrastructure/sap-adapter.d.ts +95 -0
  12. package/dist/infrastructure/sap-adapter.d.ts.map +1 -0
  13. package/dist/infrastructure/sap-adapter.js +651 -0
  14. package/dist/infrastructure/sap-adapter.js.map +1 -0
  15. package/dist/routing/graph-loader.d.ts +1 -1
  16. package/dist/routing/graph-loader.d.ts.map +1 -1
  17. package/dist/routing/graph-loader.js +42 -38
  18. package/dist/routing/graph-loader.js.map +1 -1
  19. package/dist/server/routes/erpsurface.d.ts +3 -1
  20. package/dist/server/routes/erpsurface.d.ts.map +1 -1
  21. package/dist/server/routes/erpsurface.js +548 -7
  22. package/dist/server/routes/erpsurface.js.map +1 -1
  23. package/package.json +1 -1
  24. package/dist/__tests__/api_gateway.test.d.ts +0 -1
  25. package/dist/__tests__/api_gateway.test.js +0 -50
  26. package/dist/__tests__/domain_enterprise_solution.test.d.ts +0 -1
  27. package/dist/__tests__/domain_enterprise_solution.test.js +0 -50
  28. package/dist/__tests__/health.test.d.ts +0 -1
  29. package/dist/__tests__/health.test.js +0 -19
  30. package/dist/__tests__/monitoring_alerts.test.d.ts +0 -1
  31. package/dist/__tests__/monitoring_alerts.test.js +0 -50
  32. package/dist/__tests__/ongoing_regular_stakeholder.test.d.ts +0 -1
  33. package/dist/__tests__/ongoing_regular_stakeholder.test.js +0 -50
  34. package/dist/__tests__/re_evaluate_risk.test.d.ts +0 -1
  35. package/dist/__tests__/re_evaluate_risk.test.js +0 -50
  36. package/dist/__tests__/recommendation.test.d.ts +0 -1
  37. package/dist/__tests__/recommendation.test.js +0 -50
  38. package/dist/__tests__/risk_mitigation_plan.test.d.ts +0 -1
  39. package/dist/__tests__/risk_mitigation_plan.test.js +0 -50
  40. package/dist/__tests__/scoped_pilot_reduce.test.d.ts +0 -1
  41. package/dist/__tests__/scoped_pilot_reduce.test.js +0 -50
  42. package/dist/__tests__/target_enterprise_system.test.d.ts +0 -1
  43. package/dist/__tests__/target_enterprise_system.test.js +0 -50
  44. package/dist/__tests__/underwriting.test.d.ts +0 -1
  45. package/dist/__tests__/underwriting.test.js +0 -50
  46. package/dist/api-gateway/infra/api-gateway-adapter.d.ts +0 -27
  47. package/dist/api-gateway/infra/api-gateway-adapter.js +0 -54
  48. package/dist/api-gateway/ports/api-gateway.d.ts +0 -26
  49. package/dist/api-gateway/ports/api-gateway.js +0 -2
  50. package/dist/contracts/contract-validation.d.ts +0 -11
  51. package/dist/contracts/contract-validation.js +0 -21
  52. package/dist/domain-enterprise-solution/infra/api-gateway-seam-adapter.d.ts +0 -21
  53. package/dist/domain-enterprise-solution/infra/api-gateway-seam-adapter.js +0 -42
  54. package/dist/domain-enterprise-solution/infra/domain-enterprise-solution-adapter.d.ts +0 -25
  55. package/dist/domain-enterprise-solution/infra/domain-enterprise-solution-adapter.js +0 -47
  56. package/dist/domain-enterprise-solution/ports/api-gateway-seam.d.ts +0 -20
  57. package/dist/domain-enterprise-solution/ports/api-gateway-seam.js +0 -2
  58. package/dist/domain-enterprise-solution/ports/domain-enterprise-solution.d.ts +0 -24
  59. package/dist/domain-enterprise-solution/ports/domain-enterprise-solution.js +0 -2
  60. package/dist/enterprise/index.d.ts +0 -15
  61. package/dist/enterprise/index.js +0 -16
  62. package/dist/erp-client/client.d.ts +0 -42
  63. package/dist/erp-client/client.js +0 -235
  64. package/dist/erp-client/mapper.d.ts +0 -9
  65. package/dist/erp-client/mapper.js +0 -116
  66. package/dist/erp-client/retry.d.ts +0 -17
  67. package/dist/erp-client/retry.js +0 -74
  68. package/dist/erp-client/types.d.ts +0 -155
  69. package/dist/erp-client/types.js +0 -2
  70. package/dist/infra/clients.d.ts +0 -27
  71. package/dist/infra/clients.js +0 -16
  72. package/dist/infra/connection-pool.d.ts +0 -16
  73. package/dist/infra/connection-pool.js +0 -13
  74. package/dist/infra/iam-helper.d.ts +0 -1
  75. package/dist/infra/iam-helper.js +0 -138
  76. package/dist/infra/telemetry.d.ts +0 -26
  77. package/dist/infra/telemetry.js +0 -39
  78. package/dist/monitoring-alerts/infra/monitoring-alerts-adapter.d.ts +0 -25
  79. package/dist/monitoring-alerts/infra/monitoring-alerts-adapter.js +0 -47
  80. package/dist/monitoring-alerts/ports/monitoring-alerts.d.ts +0 -24
  81. package/dist/monitoring-alerts/ports/monitoring-alerts.js +0 -2
  82. package/dist/ongoing-regular-stakeholder/infra/ongoing-regular-stakeholder-adapter.d.ts +0 -25
  83. package/dist/ongoing-regular-stakeholder/infra/ongoing-regular-stakeholder-adapter.js +0 -47
  84. package/dist/ongoing-regular-stakeholder/ports/ongoing-regular-stakeholder.d.ts +0 -24
  85. package/dist/ongoing-regular-stakeholder/ports/ongoing-regular-stakeholder.js +0 -2
  86. package/dist/re-evaluate-risk/infra/re-evaluate-risk-adapter.d.ts +0 -25
  87. package/dist/re-evaluate-risk/infra/re-evaluate-risk-adapter.js +0 -47
  88. package/dist/re-evaluate-risk/ports/re-evaluate-risk.d.ts +0 -24
  89. package/dist/re-evaluate-risk/ports/re-evaluate-risk.js +0 -2
  90. package/dist/recommendation/infra/recommendation-adapter.d.ts +0 -25
  91. package/dist/recommendation/infra/recommendation-adapter.js +0 -47
  92. package/dist/recommendation/ports/recommendation.d.ts +0 -24
  93. package/dist/recommendation/ports/recommendation.js +0 -2
  94. package/dist/risk-mitigation-plan/infra/risk-mitigation-plan-adapter.d.ts +0 -25
  95. package/dist/risk-mitigation-plan/infra/risk-mitigation-plan-adapter.js +0 -47
  96. package/dist/risk-mitigation-plan/ports/risk-mitigation-plan.d.ts +0 -24
  97. package/dist/risk-mitigation-plan/ports/risk-mitigation-plan.js +0 -2
  98. package/dist/scoped-pilot-reduce/infra/scoped-pilot-reduce-adapter.d.ts +0 -25
  99. package/dist/scoped-pilot-reduce/infra/scoped-pilot-reduce-adapter.js +0 -47
  100. package/dist/scoped-pilot-reduce/ports/scoped-pilot-reduce.d.ts +0 -24
  101. package/dist/scoped-pilot-reduce/ports/scoped-pilot-reduce.js +0 -2
  102. package/dist/server/dependencies.d.ts +0 -178
  103. package/dist/server/dependencies.js +0 -321
  104. package/dist/server/health.d.ts +0 -2
  105. package/dist/server/health.js +0 -9
  106. package/dist/server/main.d.ts +0 -1
  107. package/dist/server/main.js +0 -21
  108. package/dist/server/middleware.d.ts +0 -4
  109. package/dist/server/middleware.js +0 -106
  110. package/dist/server/routes.d.ts +0 -5
  111. package/dist/server/routes.js +0 -1100
  112. package/dist/server/schemas.d.ts +0 -217
  113. package/dist/server/schemas.js +0 -185
  114. package/dist/target-enterprise-system/infra/target-enterprise-system-adapter.d.ts +0 -25
  115. package/dist/target-enterprise-system/infra/target-enterprise-system-adapter.js +0 -47
  116. package/dist/target-enterprise-system/ports/target-enterprise-system.d.ts +0 -24
  117. package/dist/target-enterprise-system/ports/target-enterprise-system.js +0 -2
  118. package/dist/underwriting/infra/underwriting-adapter.d.ts +0 -25
  119. package/dist/underwriting/infra/underwriting-adapter.js +0 -47
  120. package/dist/underwriting/ports/underwriting.d.ts +0 -24
  121. package/dist/underwriting/ports/underwriting.js +0 -2
@@ -1,1100 +0,0 @@
1
- // Generated by Phase 4 pipeline — do not edit manually
2
- import { Hono } from 'hono';
3
- import { correlationMiddleware, iamMiddleware, loggingMiddleware } from './middleware.js';
4
- import { healthRouter } from './health.js';
5
- import { createDependencies } from './dependencies.js';
6
- import { InforClient } from '../erp-client/client.js';
7
- import { ManageDomainEnterpriseSchema, QueryDomainEnterpriseSchema, GetDomainEnterpriseSolutionSchema, GetDomainEnterpriseSolutionByIdSchema, ManageMonitoringAlertsSchema, QueryMonitoringAlertsSchema, GetMonitoringAlertsSchema, GetMonitoringAlertsByIdSchema, ManageOngoingRegularSchema, QueryOngoingRegularSchema, GetOngoingRegularStakeholderSchema, GetOngoingRegularStakeholderByIdSchema, ManageRiskMitigationSchema, QueryRiskMitigationSchema, GetRiskMitigationPlanSchema, GetRiskMitigationPlanByIdSchema, ManageTargetEnterpriseSchema, QueryTargetEnterpriseSchema, GetManageTargetEnterpriseSchema, GetQueryTargetEnterpriseSchema, GetTargetEnterpriseSystemSchema, GetTargetEnterpriseSystemByIdSchema, ManageUnderwritingSchema, QueryUnderwritingSchema, ListUnderwritingSchema, GetUnderwritingByIdSchema, ManageScopedPilotSchema, QueryScopedPilotSchema, GetScopedPilotReduceSchema, GetScopedPilotReduceByIdSchema, ManageReEvaluateSchema, QueryReEvaluateSchema, GetReEvaluateRiskSchema, GetReEvaluateRiskByIdSchema, ManageRecommendationSchema, QueryRecommendationSchema, ListRecommendationSchema, GetRecommendationByIdSchema, RouteRequestsSchema, AuthenticateSchema, RateLimitSchema, GetApiGatewaySchema, GetApiGatewayByIdSchema, } from './schemas.js';
8
- function validationError(correlationId, issues) {
9
- return { error: { code: 'VALIDATION_ERROR', message: 'Request validation failed', details: issues }, correlationId };
10
- }
11
- function serverError(correlationId, message) {
12
- return { error: { code: 'INTERNAL_ERROR', message }, correlationId };
13
- }
14
- // ============================================================================
15
- // DI Bootstrap
16
- // ============================================================================
17
- const dbClient = {
18
- async query(sql, params) {
19
- void sql;
20
- void params;
21
- return [];
22
- },
23
- async execute(sql, params) {
24
- void sql;
25
- void params;
26
- },
27
- };
28
- const erpClient = {
29
- async invoke(operation, data) {
30
- void operation;
31
- void data;
32
- return {};
33
- },
34
- };
35
- const deps = createDependencies(dbClient, erpClient);
36
- // InforClient ACL client with governance enforcement
37
- const governanceConfig = {
38
- read_only: (process.env.ERP_READ_ONLY ?? 'true') === 'true',
39
- audit_enabled: true,
40
- pii_redaction: true,
41
- max_tokens_per_request: 4096,
42
- };
43
- const erpClientInstance = new InforClient({
44
- baseUrl: process.env.INFOR_BASE_URL ?? 'https://infor.example.com',
45
- serviceAccountEmail: process.env.INFOR_SA_EMAIL ?? 'infor-sa@project.iam.gserviceaccount.com',
46
- governance: governanceConfig,
47
- audit: {
48
- async log(entityType, entityId, action, actor, payload) {
49
- await deps.audit.log(entityType, entityId, action, actor, payload);
50
- },
51
- },
52
- });
53
- // ============================================================================
54
- // App & Middleware
55
- // ============================================================================
56
- const app = new Hono();
57
- app.use('*', correlationMiddleware);
58
- app.use('*', iamMiddleware);
59
- app.use('*', loggingMiddleware);
60
- app.route('/health', healthRouter);
61
- // ============================================================================
62
- // Bounded Context: DomainEnterpriseSolution
63
- // ============================================================================
64
- app.post('/api/v1/domain-enterprise-solution/manage-domain-enterprise', async (c) => {
65
- const correlationId = c.get('correlationId');
66
- const startTime = Date.now();
67
- try {
68
- const body = await c.req.json();
69
- const parsed = ManageDomainEnterpriseSchema.safeParse(body);
70
- if (!parsed.success) {
71
- return c.json(validationError(correlationId, parsed.error.issues), 400);
72
- }
73
- const result = await deps.domainEnterpriseSolutionPort.execute('ManageDomainEnterprise', parsed.data);
74
- await deps.audit.log('domain-enterprise-solution', result?.id ?? correlationId, 'manage-domain-enterprise', correlationId, parsed.data);
75
- return c.json({
76
- correlationId,
77
- status: 'completed',
78
- data: result,
79
- metadata: { response_time_ms: Date.now() - startTime },
80
- }, 201);
81
- }
82
- catch (err) {
83
- const message = err instanceof Error ? err.message : 'Unknown error';
84
- return c.json(serverError(correlationId, message), 500);
85
- }
86
- });
87
- app.post('/api/v1/domain-enterprise-solution/query-domain-enterprise', async (c) => {
88
- const correlationId = c.get('correlationId');
89
- const startTime = Date.now();
90
- try {
91
- const body = await c.req.json();
92
- const parsed = QueryDomainEnterpriseSchema.safeParse(body);
93
- if (!parsed.success) {
94
- return c.json(validationError(correlationId, parsed.error.issues), 400);
95
- }
96
- const result = await deps.domainEnterpriseSolutionPort.execute('QueryDomainEnterprise', parsed.data);
97
- await deps.audit.log('domain-enterprise-solution', result?.id ?? correlationId, 'query-domain-enterprise', correlationId, parsed.data);
98
- return c.json({
99
- correlationId,
100
- status: 'completed',
101
- data: result,
102
- metadata: { response_time_ms: Date.now() - startTime },
103
- }, 201);
104
- }
105
- catch (err) {
106
- const message = err instanceof Error ? err.message : 'Unknown error';
107
- return c.json(serverError(correlationId, message), 500);
108
- }
109
- });
110
- app.get('/api/v1/domain-enterprise-solution/get-domain-enterprise-solution', async (c) => {
111
- const correlationId = c.get('correlationId');
112
- const startTime = Date.now();
113
- try {
114
- const params = c.req.query();
115
- const parsed = GetDomainEnterpriseSolutionSchema.safeParse(params);
116
- if (!parsed.success) {
117
- return c.json(validationError(correlationId, parsed.error.issues), 400);
118
- }
119
- const result = await deps.domainEnterpriseSolutionPort.query('GetDomainEnterpriseSolution', parsed.data);
120
- return c.json({
121
- correlationId,
122
- status: 'ok',
123
- data: result.rows,
124
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
125
- metadata: { response_time_ms: Date.now() - startTime },
126
- }, 200);
127
- }
128
- catch (err) {
129
- const message = err instanceof Error ? err.message : 'Unknown error';
130
- return c.json(serverError(correlationId, message), 500);
131
- }
132
- });
133
- app.get('/api/v1/domain-enterprise-solution/get-domain-enterprise-solution-by-id', async (c) => {
134
- const correlationId = c.get('correlationId');
135
- const startTime = Date.now();
136
- try {
137
- const params = c.req.query();
138
- const parsed = GetDomainEnterpriseSolutionByIdSchema.safeParse(params);
139
- if (!parsed.success) {
140
- return c.json(validationError(correlationId, parsed.error.issues), 400);
141
- }
142
- const result = await deps.domainEnterpriseSolutionPort.query('GetDomainEnterpriseSolutionById', parsed.data);
143
- return c.json({
144
- correlationId,
145
- status: 'ok',
146
- data: result.rows,
147
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
148
- metadata: { response_time_ms: Date.now() - startTime },
149
- }, 200);
150
- }
151
- catch (err) {
152
- const message = err instanceof Error ? err.message : 'Unknown error';
153
- return c.json(serverError(correlationId, message), 500);
154
- }
155
- });
156
- // ============================================================================
157
- // Bounded Context: MonitoringAlerts
158
- // ============================================================================
159
- app.post('/api/v1/monitoring-alerts/manage-monitoring-alerts', async (c) => {
160
- const correlationId = c.get('correlationId');
161
- const startTime = Date.now();
162
- try {
163
- const body = await c.req.json();
164
- const parsed = ManageMonitoringAlertsSchema.safeParse(body);
165
- if (!parsed.success) {
166
- return c.json(validationError(correlationId, parsed.error.issues), 400);
167
- }
168
- const result = await deps.monitoringAlertsPort.execute('ManageMonitoringAlerts', parsed.data);
169
- await deps.audit.log('monitoring-alerts', result?.id ?? correlationId, 'manage-monitoring-alerts', correlationId, parsed.data);
170
- return c.json({
171
- correlationId,
172
- status: 'completed',
173
- data: result,
174
- metadata: { response_time_ms: Date.now() - startTime },
175
- }, 201);
176
- }
177
- catch (err) {
178
- const message = err instanceof Error ? err.message : 'Unknown error';
179
- return c.json(serverError(correlationId, message), 500);
180
- }
181
- });
182
- app.post('/api/v1/monitoring-alerts/query-monitoring-alerts', async (c) => {
183
- const correlationId = c.get('correlationId');
184
- const startTime = Date.now();
185
- try {
186
- const body = await c.req.json();
187
- const parsed = QueryMonitoringAlertsSchema.safeParse(body);
188
- if (!parsed.success) {
189
- return c.json(validationError(correlationId, parsed.error.issues), 400);
190
- }
191
- const result = await deps.monitoringAlertsPort.execute('QueryMonitoringAlerts', parsed.data);
192
- await deps.audit.log('monitoring-alerts', result?.id ?? correlationId, 'query-monitoring-alerts', correlationId, parsed.data);
193
- return c.json({
194
- correlationId,
195
- status: 'completed',
196
- data: result,
197
- metadata: { response_time_ms: Date.now() - startTime },
198
- }, 201);
199
- }
200
- catch (err) {
201
- const message = err instanceof Error ? err.message : 'Unknown error';
202
- return c.json(serverError(correlationId, message), 500);
203
- }
204
- });
205
- app.get('/api/v1/monitoring-alerts/get-monitoring-alerts', async (c) => {
206
- const correlationId = c.get('correlationId');
207
- const startTime = Date.now();
208
- try {
209
- const params = c.req.query();
210
- const parsed = GetMonitoringAlertsSchema.safeParse(params);
211
- if (!parsed.success) {
212
- return c.json(validationError(correlationId, parsed.error.issues), 400);
213
- }
214
- const result = await deps.monitoringAlertsPort.query('GetMonitoringAlerts', parsed.data);
215
- return c.json({
216
- correlationId,
217
- status: 'ok',
218
- data: result.rows,
219
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
220
- metadata: { response_time_ms: Date.now() - startTime },
221
- }, 200);
222
- }
223
- catch (err) {
224
- const message = err instanceof Error ? err.message : 'Unknown error';
225
- return c.json(serverError(correlationId, message), 500);
226
- }
227
- });
228
- app.get('/api/v1/monitoring-alerts/get-monitoring-alerts-by-id', async (c) => {
229
- const correlationId = c.get('correlationId');
230
- const startTime = Date.now();
231
- try {
232
- const params = c.req.query();
233
- const parsed = GetMonitoringAlertsByIdSchema.safeParse(params);
234
- if (!parsed.success) {
235
- return c.json(validationError(correlationId, parsed.error.issues), 400);
236
- }
237
- const result = await deps.monitoringAlertsPort.query('GetMonitoringAlertsById', parsed.data);
238
- return c.json({
239
- correlationId,
240
- status: 'ok',
241
- data: result.rows,
242
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
243
- metadata: { response_time_ms: Date.now() - startTime },
244
- }, 200);
245
- }
246
- catch (err) {
247
- const message = err instanceof Error ? err.message : 'Unknown error';
248
- return c.json(serverError(correlationId, message), 500);
249
- }
250
- });
251
- // ============================================================================
252
- // Bounded Context: OngoingRegularStakeholder
253
- // ============================================================================
254
- app.post('/api/v1/ongoing-regular-stakeholder/manage-ongoing-regular', async (c) => {
255
- const correlationId = c.get('correlationId');
256
- const startTime = Date.now();
257
- try {
258
- const body = await c.req.json();
259
- const parsed = ManageOngoingRegularSchema.safeParse(body);
260
- if (!parsed.success) {
261
- return c.json(validationError(correlationId, parsed.error.issues), 400);
262
- }
263
- const result = await deps.ongoingRegularStakeholderPort.execute('ManageOngoingRegular', parsed.data);
264
- await deps.audit.log('ongoing-regular-stakeholder', result?.id ?? correlationId, 'manage-ongoing-regular', correlationId, parsed.data);
265
- return c.json({
266
- correlationId,
267
- status: 'completed',
268
- data: result,
269
- metadata: { response_time_ms: Date.now() - startTime },
270
- }, 201);
271
- }
272
- catch (err) {
273
- const message = err instanceof Error ? err.message : 'Unknown error';
274
- return c.json(serverError(correlationId, message), 500);
275
- }
276
- });
277
- app.post('/api/v1/ongoing-regular-stakeholder/query-ongoing-regular', async (c) => {
278
- const correlationId = c.get('correlationId');
279
- const startTime = Date.now();
280
- try {
281
- const body = await c.req.json();
282
- const parsed = QueryOngoingRegularSchema.safeParse(body);
283
- if (!parsed.success) {
284
- return c.json(validationError(correlationId, parsed.error.issues), 400);
285
- }
286
- const result = await deps.ongoingRegularStakeholderPort.execute('QueryOngoingRegular', parsed.data);
287
- await deps.audit.log('ongoing-regular-stakeholder', result?.id ?? correlationId, 'query-ongoing-regular', correlationId, parsed.data);
288
- return c.json({
289
- correlationId,
290
- status: 'completed',
291
- data: result,
292
- metadata: { response_time_ms: Date.now() - startTime },
293
- }, 201);
294
- }
295
- catch (err) {
296
- const message = err instanceof Error ? err.message : 'Unknown error';
297
- return c.json(serverError(correlationId, message), 500);
298
- }
299
- });
300
- app.get('/api/v1/ongoing-regular-stakeholder/get-ongoing-regular-stakeholder', async (c) => {
301
- const correlationId = c.get('correlationId');
302
- const startTime = Date.now();
303
- try {
304
- const params = c.req.query();
305
- const parsed = GetOngoingRegularStakeholderSchema.safeParse(params);
306
- if (!parsed.success) {
307
- return c.json(validationError(correlationId, parsed.error.issues), 400);
308
- }
309
- const result = await deps.ongoingRegularStakeholderPort.query('GetOngoingRegularStakeholder', parsed.data);
310
- return c.json({
311
- correlationId,
312
- status: 'ok',
313
- data: result.rows,
314
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
315
- metadata: { response_time_ms: Date.now() - startTime },
316
- }, 200);
317
- }
318
- catch (err) {
319
- const message = err instanceof Error ? err.message : 'Unknown error';
320
- return c.json(serverError(correlationId, message), 500);
321
- }
322
- });
323
- app.get('/api/v1/ongoing-regular-stakeholder/get-ongoing-regular-stakeholder-by-id', async (c) => {
324
- const correlationId = c.get('correlationId');
325
- const startTime = Date.now();
326
- try {
327
- const params = c.req.query();
328
- const parsed = GetOngoingRegularStakeholderByIdSchema.safeParse(params);
329
- if (!parsed.success) {
330
- return c.json(validationError(correlationId, parsed.error.issues), 400);
331
- }
332
- const result = await deps.ongoingRegularStakeholderPort.query('GetOngoingRegularStakeholderById', parsed.data);
333
- return c.json({
334
- correlationId,
335
- status: 'ok',
336
- data: result.rows,
337
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
338
- metadata: { response_time_ms: Date.now() - startTime },
339
- }, 200);
340
- }
341
- catch (err) {
342
- const message = err instanceof Error ? err.message : 'Unknown error';
343
- return c.json(serverError(correlationId, message), 500);
344
- }
345
- });
346
- // ============================================================================
347
- // Bounded Context: RiskMitigationPlan
348
- // ============================================================================
349
- app.post('/api/v1/risk-mitigation-plan/manage-risk-mitigation', async (c) => {
350
- const correlationId = c.get('correlationId');
351
- const startTime = Date.now();
352
- try {
353
- const body = await c.req.json();
354
- const parsed = ManageRiskMitigationSchema.safeParse(body);
355
- if (!parsed.success) {
356
- return c.json(validationError(correlationId, parsed.error.issues), 400);
357
- }
358
- const result = await deps.riskMitigationPlanPort.execute('ManageRiskMitigation', parsed.data);
359
- await deps.audit.log('risk-mitigation-plan', result?.id ?? correlationId, 'manage-risk-mitigation', correlationId, parsed.data);
360
- return c.json({
361
- correlationId,
362
- status: 'completed',
363
- data: result,
364
- metadata: { response_time_ms: Date.now() - startTime },
365
- }, 201);
366
- }
367
- catch (err) {
368
- const message = err instanceof Error ? err.message : 'Unknown error';
369
- return c.json(serverError(correlationId, message), 500);
370
- }
371
- });
372
- app.post('/api/v1/risk-mitigation-plan/query-risk-mitigation', async (c) => {
373
- const correlationId = c.get('correlationId');
374
- const startTime = Date.now();
375
- try {
376
- const body = await c.req.json();
377
- const parsed = QueryRiskMitigationSchema.safeParse(body);
378
- if (!parsed.success) {
379
- return c.json(validationError(correlationId, parsed.error.issues), 400);
380
- }
381
- const result = await deps.riskMitigationPlanPort.execute('QueryRiskMitigation', parsed.data);
382
- await deps.audit.log('risk-mitigation-plan', result?.id ?? correlationId, 'query-risk-mitigation', correlationId, parsed.data);
383
- return c.json({
384
- correlationId,
385
- status: 'completed',
386
- data: result,
387
- metadata: { response_time_ms: Date.now() - startTime },
388
- }, 201);
389
- }
390
- catch (err) {
391
- const message = err instanceof Error ? err.message : 'Unknown error';
392
- return c.json(serverError(correlationId, message), 500);
393
- }
394
- });
395
- app.get('/api/v1/risk-mitigation-plan/get-risk-mitigation-plan', async (c) => {
396
- const correlationId = c.get('correlationId');
397
- const startTime = Date.now();
398
- try {
399
- const params = c.req.query();
400
- const parsed = GetRiskMitigationPlanSchema.safeParse(params);
401
- if (!parsed.success) {
402
- return c.json(validationError(correlationId, parsed.error.issues), 400);
403
- }
404
- const result = await deps.riskMitigationPlanPort.query('GetRiskMitigationPlan', parsed.data);
405
- return c.json({
406
- correlationId,
407
- status: 'ok',
408
- data: result.rows,
409
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
410
- metadata: { response_time_ms: Date.now() - startTime },
411
- }, 200);
412
- }
413
- catch (err) {
414
- const message = err instanceof Error ? err.message : 'Unknown error';
415
- return c.json(serverError(correlationId, message), 500);
416
- }
417
- });
418
- app.get('/api/v1/risk-mitigation-plan/get-risk-mitigation-plan-by-id', async (c) => {
419
- const correlationId = c.get('correlationId');
420
- const startTime = Date.now();
421
- try {
422
- const params = c.req.query();
423
- const parsed = GetRiskMitigationPlanByIdSchema.safeParse(params);
424
- if (!parsed.success) {
425
- return c.json(validationError(correlationId, parsed.error.issues), 400);
426
- }
427
- const result = await deps.riskMitigationPlanPort.query('GetRiskMitigationPlanById', parsed.data);
428
- return c.json({
429
- correlationId,
430
- status: 'ok',
431
- data: result.rows,
432
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
433
- metadata: { response_time_ms: Date.now() - startTime },
434
- }, 200);
435
- }
436
- catch (err) {
437
- const message = err instanceof Error ? err.message : 'Unknown error';
438
- return c.json(serverError(correlationId, message), 500);
439
- }
440
- });
441
- // ============================================================================
442
- // Bounded Context: TargetEnterpriseSystem
443
- // ============================================================================
444
- app.post('/api/v1/target-enterprise-system/manage-target-enterprise', async (c) => {
445
- const correlationId = c.get('correlationId');
446
- const startTime = Date.now();
447
- try {
448
- const body = await c.req.json();
449
- const parsed = ManageTargetEnterpriseSchema.safeParse(body);
450
- if (!parsed.success) {
451
- return c.json(validationError(correlationId, parsed.error.issues), 400);
452
- }
453
- const result = await deps.targetEnterpriseSystemPort.execute('ManageTargetEnterprise', parsed.data);
454
- await deps.audit.log('target-enterprise-system', result?.id ?? correlationId, 'manage-target-enterprise', correlationId, parsed.data);
455
- return c.json({
456
- correlationId,
457
- status: 'completed',
458
- data: result,
459
- metadata: { response_time_ms: Date.now() - startTime },
460
- }, 201);
461
- }
462
- catch (err) {
463
- const message = err instanceof Error ? err.message : 'Unknown error';
464
- return c.json(serverError(correlationId, message), 500);
465
- }
466
- });
467
- app.post('/api/v1/target-enterprise-system/query-target-enterprise', async (c) => {
468
- const correlationId = c.get('correlationId');
469
- const startTime = Date.now();
470
- try {
471
- const body = await c.req.json();
472
- const parsed = QueryTargetEnterpriseSchema.safeParse(body);
473
- if (!parsed.success) {
474
- return c.json(validationError(correlationId, parsed.error.issues), 400);
475
- }
476
- const result = await deps.targetEnterpriseSystemPort.execute('QueryTargetEnterprise', parsed.data);
477
- await deps.audit.log('target-enterprise-system', result?.id ?? correlationId, 'query-target-enterprise', correlationId, parsed.data);
478
- return c.json({
479
- correlationId,
480
- status: 'completed',
481
- data: result,
482
- metadata: { response_time_ms: Date.now() - startTime },
483
- }, 201);
484
- }
485
- catch (err) {
486
- const message = err instanceof Error ? err.message : 'Unknown error';
487
- return c.json(serverError(correlationId, message), 500);
488
- }
489
- });
490
- app.get('/api/v1/target-enterprise-system/get-manage-target-enterprise', async (c) => {
491
- const correlationId = c.get('correlationId');
492
- const startTime = Date.now();
493
- try {
494
- const params = c.req.query();
495
- const parsed = GetManageTargetEnterpriseSchema.safeParse(params);
496
- if (!parsed.success) {
497
- return c.json(validationError(correlationId, parsed.error.issues), 400);
498
- }
499
- const result = await deps.targetEnterpriseSystemPort.query('GetManageTargetEnterprise', parsed.data);
500
- return c.json({
501
- correlationId,
502
- status: 'ok',
503
- data: result.rows,
504
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
505
- metadata: { response_time_ms: Date.now() - startTime },
506
- }, 200);
507
- }
508
- catch (err) {
509
- const message = err instanceof Error ? err.message : 'Unknown error';
510
- return c.json(serverError(correlationId, message), 500);
511
- }
512
- });
513
- app.get('/api/v1/target-enterprise-system/get-query-target-enterprise', async (c) => {
514
- const correlationId = c.get('correlationId');
515
- const startTime = Date.now();
516
- try {
517
- const params = c.req.query();
518
- const parsed = GetQueryTargetEnterpriseSchema.safeParse(params);
519
- if (!parsed.success) {
520
- return c.json(validationError(correlationId, parsed.error.issues), 400);
521
- }
522
- const result = await deps.targetEnterpriseSystemPort.query('GetQueryTargetEnterprise', parsed.data);
523
- return c.json({
524
- correlationId,
525
- status: 'ok',
526
- data: result.rows,
527
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
528
- metadata: { response_time_ms: Date.now() - startTime },
529
- }, 200);
530
- }
531
- catch (err) {
532
- const message = err instanceof Error ? err.message : 'Unknown error';
533
- return c.json(serverError(correlationId, message), 500);
534
- }
535
- });
536
- app.get('/api/v1/target-enterprise-system/get-target-enterprise-system', async (c) => {
537
- const correlationId = c.get('correlationId');
538
- const startTime = Date.now();
539
- try {
540
- const params = c.req.query();
541
- const parsed = GetTargetEnterpriseSystemSchema.safeParse(params);
542
- if (!parsed.success) {
543
- return c.json(validationError(correlationId, parsed.error.issues), 400);
544
- }
545
- const result = await deps.targetEnterpriseSystemPort.query('GetTargetEnterpriseSystem', parsed.data);
546
- return c.json({
547
- correlationId,
548
- status: 'ok',
549
- data: result.rows,
550
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
551
- metadata: { response_time_ms: Date.now() - startTime },
552
- }, 200);
553
- }
554
- catch (err) {
555
- const message = err instanceof Error ? err.message : 'Unknown error';
556
- return c.json(serverError(correlationId, message), 500);
557
- }
558
- });
559
- app.get('/api/v1/target-enterprise-system/get-target-enterprise-system-by-id', async (c) => {
560
- const correlationId = c.get('correlationId');
561
- const startTime = Date.now();
562
- try {
563
- const params = c.req.query();
564
- const parsed = GetTargetEnterpriseSystemByIdSchema.safeParse(params);
565
- if (!parsed.success) {
566
- return c.json(validationError(correlationId, parsed.error.issues), 400);
567
- }
568
- const result = await deps.targetEnterpriseSystemPort.query('GetTargetEnterpriseSystemById', parsed.data);
569
- return c.json({
570
- correlationId,
571
- status: 'ok',
572
- data: result.rows,
573
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
574
- metadata: { response_time_ms: Date.now() - startTime },
575
- }, 200);
576
- }
577
- catch (err) {
578
- const message = err instanceof Error ? err.message : 'Unknown error';
579
- return c.json(serverError(correlationId, message), 500);
580
- }
581
- });
582
- // ============================================================================
583
- // Bounded Context: Underwriting
584
- // ============================================================================
585
- app.post('/api/v1/underwriting/manage-underwriting', async (c) => {
586
- const correlationId = c.get('correlationId');
587
- const startTime = Date.now();
588
- try {
589
- const body = await c.req.json();
590
- const parsed = ManageUnderwritingSchema.safeParse(body);
591
- if (!parsed.success) {
592
- return c.json(validationError(correlationId, parsed.error.issues), 400);
593
- }
594
- const result = await deps.underwritingPort.execute('ManageUnderwriting', parsed.data);
595
- await deps.audit.log('underwriting', result?.id ?? correlationId, 'manage-underwriting', correlationId, parsed.data);
596
- return c.json({
597
- correlationId,
598
- status: 'completed',
599
- data: result,
600
- metadata: { response_time_ms: Date.now() - startTime },
601
- }, 201);
602
- }
603
- catch (err) {
604
- const message = err instanceof Error ? err.message : 'Unknown error';
605
- return c.json(serverError(correlationId, message), 500);
606
- }
607
- });
608
- app.post('/api/v1/underwriting/query-underwriting', async (c) => {
609
- const correlationId = c.get('correlationId');
610
- const startTime = Date.now();
611
- try {
612
- const body = await c.req.json();
613
- const parsed = QueryUnderwritingSchema.safeParse(body);
614
- if (!parsed.success) {
615
- return c.json(validationError(correlationId, parsed.error.issues), 400);
616
- }
617
- const result = await deps.underwritingPort.execute('QueryUnderwriting', parsed.data);
618
- await deps.audit.log('underwriting', result?.id ?? correlationId, 'query-underwriting', correlationId, parsed.data);
619
- return c.json({
620
- correlationId,
621
- status: 'completed',
622
- data: result,
623
- metadata: { response_time_ms: Date.now() - startTime },
624
- }, 201);
625
- }
626
- catch (err) {
627
- const message = err instanceof Error ? err.message : 'Unknown error';
628
- return c.json(serverError(correlationId, message), 500);
629
- }
630
- });
631
- app.get('/api/v1/underwriting/list-underwriting', async (c) => {
632
- const correlationId = c.get('correlationId');
633
- const startTime = Date.now();
634
- try {
635
- const params = c.req.query();
636
- const parsed = ListUnderwritingSchema.safeParse(params);
637
- if (!parsed.success) {
638
- return c.json(validationError(correlationId, parsed.error.issues), 400);
639
- }
640
- const result = await deps.underwritingPort.query('ListUnderwriting', parsed.data);
641
- return c.json({
642
- correlationId,
643
- status: 'ok',
644
- data: result.rows,
645
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
646
- metadata: { response_time_ms: Date.now() - startTime },
647
- }, 200);
648
- }
649
- catch (err) {
650
- const message = err instanceof Error ? err.message : 'Unknown error';
651
- return c.json(serverError(correlationId, message), 500);
652
- }
653
- });
654
- app.get('/api/v1/underwriting/get-underwriting-by-id', async (c) => {
655
- const correlationId = c.get('correlationId');
656
- const startTime = Date.now();
657
- try {
658
- const params = c.req.query();
659
- const parsed = GetUnderwritingByIdSchema.safeParse(params);
660
- if (!parsed.success) {
661
- return c.json(validationError(correlationId, parsed.error.issues), 400);
662
- }
663
- const result = await deps.underwritingPort.query('GetUnderwritingById', parsed.data);
664
- return c.json({
665
- correlationId,
666
- status: 'ok',
667
- data: result.rows,
668
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
669
- metadata: { response_time_ms: Date.now() - startTime },
670
- }, 200);
671
- }
672
- catch (err) {
673
- const message = err instanceof Error ? err.message : 'Unknown error';
674
- return c.json(serverError(correlationId, message), 500);
675
- }
676
- });
677
- // ============================================================================
678
- // Bounded Context: ScopedPilotReduce
679
- // ============================================================================
680
- app.post('/api/v1/scoped-pilot-reduce/manage-scoped-pilot', async (c) => {
681
- const correlationId = c.get('correlationId');
682
- const startTime = Date.now();
683
- try {
684
- const body = await c.req.json();
685
- const parsed = ManageScopedPilotSchema.safeParse(body);
686
- if (!parsed.success) {
687
- return c.json(validationError(correlationId, parsed.error.issues), 400);
688
- }
689
- const result = await deps.scopedPilotReducePort.execute('ManageScopedPilot', parsed.data);
690
- await deps.audit.log('scoped-pilot-reduce', result?.id ?? correlationId, 'manage-scoped-pilot', correlationId, parsed.data);
691
- return c.json({
692
- correlationId,
693
- status: 'completed',
694
- data: result,
695
- metadata: { response_time_ms: Date.now() - startTime },
696
- }, 201);
697
- }
698
- catch (err) {
699
- const message = err instanceof Error ? err.message : 'Unknown error';
700
- return c.json(serverError(correlationId, message), 500);
701
- }
702
- });
703
- app.post('/api/v1/scoped-pilot-reduce/query-scoped-pilot', async (c) => {
704
- const correlationId = c.get('correlationId');
705
- const startTime = Date.now();
706
- try {
707
- const body = await c.req.json();
708
- const parsed = QueryScopedPilotSchema.safeParse(body);
709
- if (!parsed.success) {
710
- return c.json(validationError(correlationId, parsed.error.issues), 400);
711
- }
712
- const result = await deps.scopedPilotReducePort.execute('QueryScopedPilot', parsed.data);
713
- await deps.audit.log('scoped-pilot-reduce', result?.id ?? correlationId, 'query-scoped-pilot', correlationId, parsed.data);
714
- return c.json({
715
- correlationId,
716
- status: 'completed',
717
- data: result,
718
- metadata: { response_time_ms: Date.now() - startTime },
719
- }, 201);
720
- }
721
- catch (err) {
722
- const message = err instanceof Error ? err.message : 'Unknown error';
723
- return c.json(serverError(correlationId, message), 500);
724
- }
725
- });
726
- app.get('/api/v1/scoped-pilot-reduce/get-scoped-pilot-reduce', async (c) => {
727
- const correlationId = c.get('correlationId');
728
- const startTime = Date.now();
729
- try {
730
- const params = c.req.query();
731
- const parsed = GetScopedPilotReduceSchema.safeParse(params);
732
- if (!parsed.success) {
733
- return c.json(validationError(correlationId, parsed.error.issues), 400);
734
- }
735
- const result = await deps.scopedPilotReducePort.query('GetScopedPilotReduce', parsed.data);
736
- return c.json({
737
- correlationId,
738
- status: 'ok',
739
- data: result.rows,
740
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
741
- metadata: { response_time_ms: Date.now() - startTime },
742
- }, 200);
743
- }
744
- catch (err) {
745
- const message = err instanceof Error ? err.message : 'Unknown error';
746
- return c.json(serverError(correlationId, message), 500);
747
- }
748
- });
749
- app.get('/api/v1/scoped-pilot-reduce/get-scoped-pilot-reduce-by-id', async (c) => {
750
- const correlationId = c.get('correlationId');
751
- const startTime = Date.now();
752
- try {
753
- const params = c.req.query();
754
- const parsed = GetScopedPilotReduceByIdSchema.safeParse(params);
755
- if (!parsed.success) {
756
- return c.json(validationError(correlationId, parsed.error.issues), 400);
757
- }
758
- const result = await deps.scopedPilotReducePort.query('GetScopedPilotReduceById', parsed.data);
759
- return c.json({
760
- correlationId,
761
- status: 'ok',
762
- data: result.rows,
763
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
764
- metadata: { response_time_ms: Date.now() - startTime },
765
- }, 200);
766
- }
767
- catch (err) {
768
- const message = err instanceof Error ? err.message : 'Unknown error';
769
- return c.json(serverError(correlationId, message), 500);
770
- }
771
- });
772
- // ============================================================================
773
- // Bounded Context: ReEvaluateRisk
774
- // ============================================================================
775
- app.post('/api/v1/re-evaluate-risk/manage-re-evaluate', async (c) => {
776
- const correlationId = c.get('correlationId');
777
- const startTime = Date.now();
778
- try {
779
- const body = await c.req.json();
780
- const parsed = ManageReEvaluateSchema.safeParse(body);
781
- if (!parsed.success) {
782
- return c.json(validationError(correlationId, parsed.error.issues), 400);
783
- }
784
- const result = await deps.reEvaluateRiskPort.execute('ManageReEvaluate', parsed.data);
785
- await deps.audit.log('re-evaluate-risk', result?.id ?? correlationId, 'manage-re-evaluate', correlationId, parsed.data);
786
- return c.json({
787
- correlationId,
788
- status: 'completed',
789
- data: result,
790
- metadata: { response_time_ms: Date.now() - startTime },
791
- }, 201);
792
- }
793
- catch (err) {
794
- const message = err instanceof Error ? err.message : 'Unknown error';
795
- return c.json(serverError(correlationId, message), 500);
796
- }
797
- });
798
- app.post('/api/v1/re-evaluate-risk/query-re-evaluate', async (c) => {
799
- const correlationId = c.get('correlationId');
800
- const startTime = Date.now();
801
- try {
802
- const body = await c.req.json();
803
- const parsed = QueryReEvaluateSchema.safeParse(body);
804
- if (!parsed.success) {
805
- return c.json(validationError(correlationId, parsed.error.issues), 400);
806
- }
807
- const result = await deps.reEvaluateRiskPort.execute('QueryReEvaluate', parsed.data);
808
- await deps.audit.log('re-evaluate-risk', result?.id ?? correlationId, 'query-re-evaluate', correlationId, parsed.data);
809
- return c.json({
810
- correlationId,
811
- status: 'completed',
812
- data: result,
813
- metadata: { response_time_ms: Date.now() - startTime },
814
- }, 201);
815
- }
816
- catch (err) {
817
- const message = err instanceof Error ? err.message : 'Unknown error';
818
- return c.json(serverError(correlationId, message), 500);
819
- }
820
- });
821
- app.get('/api/v1/re-evaluate-risk/get-re-evaluate-risk', async (c) => {
822
- const correlationId = c.get('correlationId');
823
- const startTime = Date.now();
824
- try {
825
- const params = c.req.query();
826
- const parsed = GetReEvaluateRiskSchema.safeParse(params);
827
- if (!parsed.success) {
828
- return c.json(validationError(correlationId, parsed.error.issues), 400);
829
- }
830
- const result = await deps.reEvaluateRiskPort.query('GetReEvaluateRisk', parsed.data);
831
- return c.json({
832
- correlationId,
833
- status: 'ok',
834
- data: result.rows,
835
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
836
- metadata: { response_time_ms: Date.now() - startTime },
837
- }, 200);
838
- }
839
- catch (err) {
840
- const message = err instanceof Error ? err.message : 'Unknown error';
841
- return c.json(serverError(correlationId, message), 500);
842
- }
843
- });
844
- app.get('/api/v1/re-evaluate-risk/get-re-evaluate-risk-by-id', async (c) => {
845
- const correlationId = c.get('correlationId');
846
- const startTime = Date.now();
847
- try {
848
- const params = c.req.query();
849
- const parsed = GetReEvaluateRiskByIdSchema.safeParse(params);
850
- if (!parsed.success) {
851
- return c.json(validationError(correlationId, parsed.error.issues), 400);
852
- }
853
- const result = await deps.reEvaluateRiskPort.query('GetReEvaluateRiskById', parsed.data);
854
- return c.json({
855
- correlationId,
856
- status: 'ok',
857
- data: result.rows,
858
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
859
- metadata: { response_time_ms: Date.now() - startTime },
860
- }, 200);
861
- }
862
- catch (err) {
863
- const message = err instanceof Error ? err.message : 'Unknown error';
864
- return c.json(serverError(correlationId, message), 500);
865
- }
866
- });
867
- // ============================================================================
868
- // Bounded Context: Recommendation
869
- // ============================================================================
870
- app.post('/api/v1/recommendation/manage-recommendation', async (c) => {
871
- const correlationId = c.get('correlationId');
872
- const startTime = Date.now();
873
- try {
874
- const body = await c.req.json();
875
- const parsed = ManageRecommendationSchema.safeParse(body);
876
- if (!parsed.success) {
877
- return c.json(validationError(correlationId, parsed.error.issues), 400);
878
- }
879
- const result = await deps.recommendationPort.execute('ManageRecommendation', parsed.data);
880
- await deps.audit.log('recommendation', result?.id ?? correlationId, 'manage-recommendation', correlationId, parsed.data);
881
- return c.json({
882
- correlationId,
883
- status: 'completed',
884
- data: result,
885
- metadata: { response_time_ms: Date.now() - startTime },
886
- }, 201);
887
- }
888
- catch (err) {
889
- const message = err instanceof Error ? err.message : 'Unknown error';
890
- return c.json(serverError(correlationId, message), 500);
891
- }
892
- });
893
- app.post('/api/v1/recommendation/query-recommendation', async (c) => {
894
- const correlationId = c.get('correlationId');
895
- const startTime = Date.now();
896
- try {
897
- const body = await c.req.json();
898
- const parsed = QueryRecommendationSchema.safeParse(body);
899
- if (!parsed.success) {
900
- return c.json(validationError(correlationId, parsed.error.issues), 400);
901
- }
902
- const result = await deps.recommendationPort.execute('QueryRecommendation', parsed.data);
903
- await deps.audit.log('recommendation', result?.id ?? correlationId, 'query-recommendation', correlationId, parsed.data);
904
- return c.json({
905
- correlationId,
906
- status: 'completed',
907
- data: result,
908
- metadata: { response_time_ms: Date.now() - startTime },
909
- }, 201);
910
- }
911
- catch (err) {
912
- const message = err instanceof Error ? err.message : 'Unknown error';
913
- return c.json(serverError(correlationId, message), 500);
914
- }
915
- });
916
- app.get('/api/v1/recommendation/list-recommendation', async (c) => {
917
- const correlationId = c.get('correlationId');
918
- const startTime = Date.now();
919
- try {
920
- const params = c.req.query();
921
- const parsed = ListRecommendationSchema.safeParse(params);
922
- if (!parsed.success) {
923
- return c.json(validationError(correlationId, parsed.error.issues), 400);
924
- }
925
- const result = await deps.recommendationPort.query('ListRecommendation', parsed.data);
926
- return c.json({
927
- correlationId,
928
- status: 'ok',
929
- data: result.rows,
930
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
931
- metadata: { response_time_ms: Date.now() - startTime },
932
- }, 200);
933
- }
934
- catch (err) {
935
- const message = err instanceof Error ? err.message : 'Unknown error';
936
- return c.json(serverError(correlationId, message), 500);
937
- }
938
- });
939
- app.get('/api/v1/recommendation/get-recommendation-by-id', async (c) => {
940
- const correlationId = c.get('correlationId');
941
- const startTime = Date.now();
942
- try {
943
- const params = c.req.query();
944
- const parsed = GetRecommendationByIdSchema.safeParse(params);
945
- if (!parsed.success) {
946
- return c.json(validationError(correlationId, parsed.error.issues), 400);
947
- }
948
- const result = await deps.recommendationPort.query('GetRecommendationById', parsed.data);
949
- return c.json({
950
- correlationId,
951
- status: 'ok',
952
- data: result.rows,
953
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
954
- metadata: { response_time_ms: Date.now() - startTime },
955
- }, 200);
956
- }
957
- catch (err) {
958
- const message = err instanceof Error ? err.message : 'Unknown error';
959
- return c.json(serverError(correlationId, message), 500);
960
- }
961
- });
962
- // ============================================================================
963
- // Bounded Context: ApiGateway
964
- // ============================================================================
965
- app.post('/api/v1/api-gateway/route-requests', async (c) => {
966
- const correlationId = c.get('correlationId');
967
- const startTime = Date.now();
968
- try {
969
- const body = await c.req.json();
970
- const parsed = RouteRequestsSchema.safeParse(body);
971
- if (!parsed.success) {
972
- return c.json(validationError(correlationId, parsed.error.issues), 400);
973
- }
974
- const result = await deps.apiGatewayPort.execute('RouteRequests', parsed.data);
975
- await deps.audit.log('api-gateway', result?.id ?? correlationId, 'route-requests', correlationId, parsed.data);
976
- return c.json({
977
- correlationId,
978
- status: 'completed',
979
- data: result,
980
- metadata: { response_time_ms: Date.now() - startTime },
981
- }, 201);
982
- }
983
- catch (err) {
984
- const message = err instanceof Error ? err.message : 'Unknown error';
985
- return c.json(serverError(correlationId, message), 500);
986
- }
987
- });
988
- app.post('/api/v1/api-gateway/authenticate', async (c) => {
989
- const correlationId = c.get('correlationId');
990
- const startTime = Date.now();
991
- try {
992
- const body = await c.req.json();
993
- const parsed = AuthenticateSchema.safeParse(body);
994
- if (!parsed.success) {
995
- return c.json(validationError(correlationId, parsed.error.issues), 400);
996
- }
997
- const result = await deps.apiGatewayPort.execute('Authenticate', parsed.data);
998
- await deps.audit.log('api-gateway', result?.id ?? correlationId, 'authenticate', correlationId, parsed.data);
999
- return c.json({
1000
- correlationId,
1001
- status: 'completed',
1002
- data: result,
1003
- metadata: { response_time_ms: Date.now() - startTime },
1004
- }, 201);
1005
- }
1006
- catch (err) {
1007
- const message = err instanceof Error ? err.message : 'Unknown error';
1008
- return c.json(serverError(correlationId, message), 500);
1009
- }
1010
- });
1011
- app.post('/api/v1/api-gateway/rate-limit', async (c) => {
1012
- const correlationId = c.get('correlationId');
1013
- const startTime = Date.now();
1014
- try {
1015
- const body = await c.req.json();
1016
- const parsed = RateLimitSchema.safeParse(body);
1017
- if (!parsed.success) {
1018
- return c.json(validationError(correlationId, parsed.error.issues), 400);
1019
- }
1020
- const result = await deps.apiGatewayPort.execute('RateLimit', parsed.data);
1021
- await deps.audit.log('api-gateway', result?.id ?? correlationId, 'rate-limit', correlationId, parsed.data);
1022
- return c.json({
1023
- correlationId,
1024
- status: 'completed',
1025
- data: result,
1026
- metadata: { response_time_ms: Date.now() - startTime },
1027
- }, 201);
1028
- }
1029
- catch (err) {
1030
- const message = err instanceof Error ? err.message : 'Unknown error';
1031
- return c.json(serverError(correlationId, message), 500);
1032
- }
1033
- });
1034
- app.get('/api/v1/api-gateway/get-api-gateway', async (c) => {
1035
- const correlationId = c.get('correlationId');
1036
- const startTime = Date.now();
1037
- try {
1038
- const params = c.req.query();
1039
- const parsed = GetApiGatewaySchema.safeParse(params);
1040
- if (!parsed.success) {
1041
- return c.json(validationError(correlationId, parsed.error.issues), 400);
1042
- }
1043
- const result = await deps.apiGatewayPort.query('GetApiGateway', parsed.data);
1044
- return c.json({
1045
- correlationId,
1046
- status: 'ok',
1047
- data: result.rows,
1048
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
1049
- metadata: { response_time_ms: Date.now() - startTime },
1050
- }, 200);
1051
- }
1052
- catch (err) {
1053
- const message = err instanceof Error ? err.message : 'Unknown error';
1054
- return c.json(serverError(correlationId, message), 500);
1055
- }
1056
- });
1057
- app.get('/api/v1/api-gateway/get-api-gateway-by-id', async (c) => {
1058
- const correlationId = c.get('correlationId');
1059
- const startTime = Date.now();
1060
- try {
1061
- const params = c.req.query();
1062
- const parsed = GetApiGatewayByIdSchema.safeParse(params);
1063
- if (!parsed.success) {
1064
- return c.json(validationError(correlationId, parsed.error.issues), 400);
1065
- }
1066
- const result = await deps.apiGatewayPort.query('GetApiGatewayById', parsed.data);
1067
- return c.json({
1068
- correlationId,
1069
- status: 'ok',
1070
- data: result.rows,
1071
- pagination: { limit: parsed.data.limit ?? 50, offset: parsed.data.offset ?? 0, total: result.total },
1072
- metadata: { response_time_ms: Date.now() - startTime },
1073
- }, 200);
1074
- }
1075
- catch (err) {
1076
- const message = err instanceof Error ? err.message : 'Unknown error';
1077
- return c.json(serverError(correlationId, message), 500);
1078
- }
1079
- });
1080
- // ============================================================================
1081
- // GET /api/v1/erp/sync-status — ERP sync queue and circuit breaker
1082
- // ============================================================================
1083
- app.get('/api/v1/erp/sync-status', async (c) => {
1084
- const correlationId = c.get('correlationId');
1085
- const startTime = Date.now();
1086
- try {
1087
- const status = erpClientInstance.getSyncStatus();
1088
- return c.json({
1089
- correlationId,
1090
- status: 'ok',
1091
- data: status,
1092
- metadata: { response_time_ms: Date.now() - startTime },
1093
- }, 200);
1094
- }
1095
- catch (err) {
1096
- const message = err instanceof Error ? err.message : 'Unknown error';
1097
- return c.json(serverError(correlationId, message), 500);
1098
- }
1099
- });
1100
- export { app, erpClientInstance };