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:
1 parent
9118985d96
commit
3e27f370dc
21 files changed
+770
-2
No files matched your search
@@ -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 ?? '');
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user