from fastapi import APIRouter, Depends from firm.core.depends import get_authed_tenant_registry, get_uninitialized_registry from firm.current_firm import CurrentFirmModel, 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 CurrentFirmModel.get_current(reg.db) 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) return CurrentFirmSchemaRead.from_model_and_entities(document, EntityRead.from_model(entity), EntityRead.from_model(partner)) @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) document = await CurrentFirmModel.create(reg.db, CurrentFirmModel( instance=reg.instance, firm=reg.firm, entity_id=corp.id, primary_color=schema.primary_color, secondary_color=schema.secondary_color, )) return CurrentFirmSchemaRead.from_model(document) @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 CurrentFirmModel.get_current(reg.db) document = await CurrentFirmModel.update(reg.db, document, schema) return CurrentFirmSchemaRead.from_model(document)