feat(api): módulo de consultas de solo lectura a la base de SAP (HANA con hdb): consultas registradas con parámetros con nombre, cola, auditoría y extensión por cliente

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5.5 committed 2026-10-20 07:31:17 -05:00
1 parent 9118985d96
commit 3e27f370dc
21 files changed
+770 -2

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
import { Body, Controller, Get, HttpCode, Param, Post, Req } from '@nestjs/common';
import { z } from 'zod';
import type { AuthenticatedRequest } from '../auth/auth.types.js';
import { ZodValidationPipe } from '../common/zod-validation.pipe.js';
import { SapDbService } from './sapdb.service.js';
const nameSchema = z.string().regex(/^[a-z0-9][a-z0-9-]{0,59}$/, 'Nombre de consulta inválido');
const bodySchema = z.object({ params: z.record(z.string(), z.union([z.string().max(200), z.number()])).default({}) });
type Body_ = z.infer<typeof bodySchema>;
/** Consultas de solo lectura a la base de datos de SAP (las registradas; el permiso lo declara cada una). */
@Controller('sapdb')
export class SapDbController {
constructor(private readonly sapdb: SapDbService) {}
@Get('queries')
queries(@Req() req: AuthenticatedRequest) {
return this.sapdb.available(req.user);
}
@Post('queries/:name')
@HttpCode(200)
run(
@Req() req: AuthenticatedRequest,
@Param('name', new ZodValidationPipe(nameSchema)) name: string,
@Body(new ZodValidationPipe(bodySchema)) body: Body_,
) {
return this.sapdb.run(req.user, name, body.params, req.ip ?? '');
}
}