56 lines
2.6 KiB
Python
56 lines
2.6 KiB
Python
from fastapi import APIRouter, Depends
|
|
|
|
from firm.core.depends import get_authed_tenant_registry, get_uninitialized_registry
|
|
from firm.current_firm import CurrentFirm, CurrentFirmSchemaRead, CurrentFirmSchemaCreate, CurrentFirmSchemaUpdate, Partner
|
|
from firm.entity.models import Entity, Employee
|
|
from firm.entity.schemas import EntityRead
|
|
|
|
current_firm_router = APIRouter()
|
|
|
|
@current_firm_router.get("/", response_model=CurrentFirmSchemaRead, response_description=f"Current Firm records retrieved")
|
|
async def read(reg=Depends(get_authed_tenant_registry)) -> CurrentFirmSchemaRead:
|
|
document = await CurrentFirm.get_current(reg.db)
|
|
firm_entity = await Entity.get(reg.db, document.entity_id)
|
|
partner = await Partner.get_by_user_id(reg.db, reg.user.id)
|
|
partner = await Entity.get(reg.db, partner.entity_id)
|
|
partner_list = await Partner.list(reg.db)
|
|
partner_list = await Entity.list(reg.db, {"_id": {"$in": [p.entity_id for p in partner_list]}})
|
|
return CurrentFirmSchemaRead.from_model_and_entities(
|
|
document,
|
|
EntityRead.from_model(firm_entity),
|
|
EntityRead.from_model(partner),
|
|
[EntityRead.from_model(p) for p in partner_list]
|
|
)
|
|
|
|
@current_firm_router.post("/", response_description=f"Current Firm added to the database")
|
|
async def create(schema: CurrentFirmSchemaCreate, reg=Depends(get_uninitialized_registry)) -> CurrentFirmSchemaRead:
|
|
owner_entity = await Entity.create(reg.db, schema.owner)
|
|
await Partner.create(reg.db, Partner(user_id=reg.user.id, entity_id=owner_entity.id))
|
|
|
|
corporation_schema = schema.corporation
|
|
corporation_schema.entity_data.employees.append(Employee(entity_id=owner_entity.id, position=schema.position))
|
|
corp = await Entity.create(reg.db, corporation_schema)
|
|
|
|
firm = await CurrentFirm.create(reg.db, CurrentFirm(
|
|
instance=reg.instance,
|
|
firm=reg.firm,
|
|
entity_id=corp.id,
|
|
primary_color=schema.primary_color,
|
|
secondary_color=schema.secondary_color,
|
|
))
|
|
|
|
await Partner.create(Partner(user_id=reg.user.id, entity_id=owner_entity.id))
|
|
|
|
return CurrentFirmSchemaRead.from_model_and_entities(
|
|
firm,
|
|
EntityRead.from_model(corp),
|
|
EntityRead.from_model(owner_entity),
|
|
[EntityRead.from_model(owner_entity)]
|
|
)
|
|
|
|
@current_firm_router.put("/", response_description=f"Current Firm record updated")
|
|
async def update(schema: CurrentFirmSchemaUpdate, reg=Depends(get_authed_tenant_registry)) -> CurrentFirmSchemaRead:
|
|
document = await CurrentFirm.get_current(reg.db)
|
|
document = await CurrentFirm.update(reg.db, document, schema)
|
|
return CurrentFirmSchemaRead.from_model(document)
|