import { Body,Controller,Get,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 { FiscalExportJobService } from '../application/fiscal-export-job.service';
import { FiscalExportWorker } from '../workers/fiscal-export.worker';
import { ZodValidationPipe } from '../../../common/validation/zod-validation.pipe';
import { fiscalProviderExportSchema } from '../../../common/validation/critical-write.schemas';
import type { z } from 'zod';
@Controller('/fiscal/exports')
@UseGuards(AuthGuard,OrganizationContextGuard,LocationContextGuard,PermissionGuard)
export class FiscalExportsController {
constructor(
private readonly exports:FiscalExportJobService,
private readonly worker:FiscalExportWorker,
) {}
@Get()
@RequirePermissions('fiscal.exports.read')
list(@Req() req:LocationScopedRequest) {
return this.exports.list({organizationId:req.organizationId!,locationId:req.locationId!});
}
@Post()
@RequirePermissions('fiscal.exports.create')
create(@Req() req:LocationScopedRequest,@Body(new ZodValidationPipe(fiscalProviderExportSchema)) body:z.infer<typeof fiscalProviderExportSchema>) {
return this.exports.create({
organizationId:req.organizationId!,locationId:req.locationId!,
connectionId:body.connectionId,exportType:body.exportType,
periodStart:body.periodStart,periodEnd:body.periodEnd,userId:req.auth?.userId,
});
}
@Post('/workers/run')
@RequirePermissions('fiscal.exports.create')
run(){return this.worker.runBatch();}
}
