from fastapi import Depends, HTTPException, File, UploadFile, APIRouter import shutil from uuid import UUID from firm.contract.models import Contract, Party from firm.core.depends import get_tenant_registry signature_router = APIRouter() @signature_router.get("/{signature_id}", response_description="") async def get_signature(signature_id: UUID, reg=Depends(get_tenant_registry)) -> Party: contract = await Contract.find_by_signature_id(reg.db, signature_id) signature = contract.get_signature(signature_id) return signature @signature_router.post("/{signature_id}", response_description="") async def affix_signature(signature_id: UUID, signature_file: UploadFile = File(...), reg=Depends(get_tenant_registry)) -> bool: contract = await Contract.find_by_signature_id(reg.db, signature_id) if not contract: raise HTTPException(status_code=404, detail="Contract record not found!") signature_index = contract.get_signature_index(signature_id) signature = contract.parties[signature_index] if signature.signature_affixed: raise HTTPException(status_code=400, detail="Signature already affixed") with open(f'media/signatures/{signature_id}.png', "wb") as buffer: shutil.copyfileobj(signature_file.file, buffer) await contract.affix_signature(reg.db, signature_index) return True