78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Get,
|
|
Param,
|
|
ParseUUIDPipe,
|
|
Post,
|
|
Req,
|
|
UploadedFile,
|
|
UseInterceptors,
|
|
} from '@nestjs/common';
|
|
import { FileInterceptor } from '@nestjs/platform-express';
|
|
import { CurrentAuth } from '../auth/decorators/current-auth.decorator';
|
|
import { Public } from '../auth/decorators/public.decorator';
|
|
import { SkipCsrf } from '../auth/decorators/skip-csrf.decorator';
|
|
import { RequirePermissions } from '../authorization/decorators/require-permissions.decorator';
|
|
import type { AuthPrincipal, RequestWithContext } from '../common/http/request-context';
|
|
import { CompanySignatureInviteService } from './company-signature-invite.service';
|
|
import {
|
|
CreateCompanySignatureInviteDto,
|
|
PublicCompanyRefusalDto,
|
|
PublicCompanySignatureDto,
|
|
} from './dto/company-signature-invite.dto';
|
|
import {
|
|
MAX_INSPECTION_SIGNATURE_BYTES,
|
|
type UploadedInspectionSignatureFile,
|
|
} from './inspection-signature-file';
|
|
|
|
@Controller('inspection-acts/:actId/company-signature-invitations')
|
|
export class CompanySignatureInviteController {
|
|
constructor(private readonly invites: CompanySignatureInviteService) {}
|
|
|
|
@Post()
|
|
@RequirePermissions('inspection_closure.sign')
|
|
create(
|
|
@Param('actId', new ParseUUIDPipe({ version: '4' })) actId: string,
|
|
@Body() dto: CreateCompanySignatureInviteDto,
|
|
@CurrentAuth() principal: AuthPrincipal,
|
|
@Req() request: RequestWithContext,
|
|
) {
|
|
return this.invites.create(actId, dto, principal, request);
|
|
}
|
|
}
|
|
|
|
@Public()
|
|
@SkipCsrf()
|
|
@Controller('public/company-signatures')
|
|
export class PublicCompanySignatureController {
|
|
constructor(private readonly invites: CompanySignatureInviteService) {}
|
|
|
|
@Get(':token')
|
|
view(@Param('token') token: string) {
|
|
return this.invites.view(token);
|
|
}
|
|
|
|
@Post(':token/sign')
|
|
@UseInterceptors(FileInterceptor('file', {
|
|
limits: { fileSize: MAX_INSPECTION_SIGNATURE_BYTES, files: 1 },
|
|
}))
|
|
sign(
|
|
@Param('token') token: string,
|
|
@Body() dto: PublicCompanySignatureDto,
|
|
@UploadedFile() file: UploadedInspectionSignatureFile | undefined,
|
|
@Req() request: RequestWithContext,
|
|
) {
|
|
return this.invites.sign(token, dto, file, request);
|
|
}
|
|
|
|
@Post(':token/refuse')
|
|
refuse(
|
|
@Param('token') token: string,
|
|
@Body() dto: PublicCompanyRefusalDto,
|
|
@Req() request: RequestWithContext,
|
|
) {
|
|
return this.invites.refuse(token, dto, request);
|
|
}
|
|
}
|