Files
basic-erp/apps/api/src/sapdb/sapdb.controller.ts
T

31 lines
1.2 KiB
TypeScript

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 ?? '');
}
}