import { Body,Controller,Get,Param,Post,Req,UseGuards } from '@nestjs/common';
import { AuthGuard } from '../../../common/auth/auth.guard';
import { OrganizationContextGuard } from '../../../common/auth/organization-context.guard';
import { LocationContextGuard,type LocationScopedRequest } from '../../../common/auth/location-context.guard';
import { PermissionGuard } from '../../../common/auth/permission.guard';
import { RequirePermissions } from '../../../common/auth/permissions.decorator';
import { RequireStepUp } from '../../../common/auth/step-up.decorator';
import { StepUpGuard } from '../../../common/auth/step-up.guard';
import { FiscalRecoveryManagementService } from '../application/fiscal-recovery-management.service';
import { ZodValidationPipe } from '../../../common/validation/zod-validation.pipe';
import { fiscalRecoveryResolveSchema } from '../../../common/validation/critical-write.schemas';
import type { z } from 'zod';
@Controller('/fiscal/recovery')
@UseGuards(AuthGuard,OrganizationContextGuard,LocationContextGuard,PermissionGuard)
export class FiscalRecoveryController {
constructor(private readonly recovery:FiscalRecoveryManagementService) {}
@Get()
@RequirePermissions('fiscal.recovery.manage')
@RequireStepUp('fiscal.recovery')
@UseGuards(StepUpGuard)
list(@Req() req:LocationScopedRequest) {
return this.recovery.list({organizationId:req.organizationId!,locationId:req.locationId!});
}
@Post('/:id/resolve')
@RequirePermissions('fiscal.recovery.manage')
@RequireStepUp('fiscal.recovery')
@UseGuards(StepUpGuard)
resolve(@Req() req:LocationScopedRequest,@Param('id') id:string,@Body(new ZodValidationPipe(fiscalRecoveryResolveSchema)) body:z.infer<typeof fiscalRecoveryResolveSchema>) {
return this.recovery.resolve({
organizationId:req.organizationId!,
locationId:req.locationId!,
caseId:id,
action:body.action,
userId:req.auth?.userId,
note:body.note,
});
}
}
