from beanie import PydanticObjectId from fastapi import HTTPException, Depends from firm.core.routes import get_crud_router, get_logged_tenant_db_cursor from firm.contract.models import ContractDraft, ContractDraftStatus, ContractDraftFilters from firm.contract.schemas import ContractDraftCreate, ContractDraftRead, ContractDraftUpdate draft_router = get_crud_router(ContractDraft, ContractDraftCreate, ContractDraftRead, ContractDraftUpdate, ContractDraftFilters) del(draft_router.routes[3]) #update route del(draft_router.routes[1]) #post route @draft_router.post("/", response_description="Contract Draft added to the database") async def create(schema: ContractDraftCreate, db=Depends(get_logged_tenant_db_cursor)) -> ContractDraftRead: await schema.validate_foreign_key(db) record = await ContractDraft.create(db, schema) await record.check_is_ready(db) return ContractDraftRead.from_model(record) @draft_router.put("/{record_id}", response_description="Contract Draft record updated") async def update(record_id: PydanticObjectId, schema: ContractDraftUpdate, db=Depends(get_logged_tenant_db_cursor)) -> ContractDraftRead: record = await ContractDraft.get(db, record_id) if not record: raise HTTPException( status_code=404, detail="Contract Draft record not found!" ) if record.status == ContractDraftStatus.published: raise HTTPException( status_code=400, detail="Contract Draft has already been published" ) record = await ContractDraft.update(db, record, schema) await record.check_is_ready(db) return ContractDraftRead.from_model(record)