from fastapi import Depends, HTTPException, File, UploadFile, APIRouter import shutil from uuid import UUID from .models import Contract, Party from ..core.routes import get_tenant_db_cursor signature_router = APIRouter() @signature_router.get("/{signature_id}", response_description="") async def get_signature(signature_id: UUID, db=Depends(get_tenant_db_cursor)) -> Party: contract = await Contract.find_by_signature_id(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(...), db=Depends(get_tenant_db_cursor)) -> bool: contract = await Contract.find_by_signature_id(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(db, signature_index) return True