43 lines
1.7 KiB
Python
43 lines
1.7 KiB
Python
from beanie import PydanticObjectId
|
|
from fastapi import HTTPException, Depends
|
|
|
|
from ..core.routes import get_crud_router, get_logged_tenant_db_cursor
|
|
from ..user.manager import get_current_user
|
|
|
|
from .models import ContractDraft, ContractDraftStatus, ContractDraftFilters
|
|
from .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)
|