add reusable per-user contract signatures with profile prefill and approval

This commit is contained in:
Marshal
2026-06-16 13:34:04 +00:00
parent 62ce2dc64f
commit 524d3b6418
12 changed files with 307 additions and 3 deletions

View File

@@ -0,0 +1,39 @@
import { Body, Controller, Get, Put, Request } from '@nestjs/common';
import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
import { SignaturesService } from './signatures.service';
import { SaveSignatureDto, SavedSignatureDto } from './dto/save-signature.dto';
@ApiTags('Signatures')
@Controller('me/signature')
export class SignaturesController {
constructor(private readonly signaturesService: SignaturesService) {}
@Get()
@ApiOkResponse({ type: SavedSignatureDto })
@ApiOperation({ summary: "Current user's reusable saved signature" })
getMySignature(
@Request() req: { user?: { id?: string; sub?: string } },
): Promise<SavedSignatureDto | null> {
const userId = req.user?.id ?? req.user?.sub;
if (!userId) return Promise.resolve(null);
return this.signaturesService.getForUser(userId);
}
@Put()
@ApiOkResponse({ type: SavedSignatureDto })
@ApiOperation({ summary: 'Create or update the reusable saved signature' })
async saveMySignature(
@Body() dto: SaveSignatureDto,
@Request() req: { user?: { id?: string; sub?: string } },
): Promise<SavedSignatureDto | null> {
const userId = req.user?.id ?? req.user?.sub;
if (!userId) return null;
await this.signaturesService.upsertForUser({
userId,
signerDisplayName: dto.signerDisplayName,
signatureImageBase64: dto.signatureImageBase64,
});
return this.signaturesService.getForUser(userId);
}
}