From 872e27e7e40d67f5422e29d83d772efd3b0cb42e Mon Sep 17 00:00:00 2001 From: ewandor Date: Wed, 16 Apr 2025 22:39:09 +0200 Subject: [PATCH] Initializable Firm --- api/rpk-api/firm/core/depends.py | 2 +- api/rpk-api/firm/current_firm/__init__.py | 24 +++++++++----- api/rpk-api/firm/current_firm/routes.py | 38 ++++++++++++++++------- 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/api/rpk-api/firm/core/depends.py b/api/rpk-api/firm/core/depends.py index 6275bab..c0254a0 100644 --- a/api/rpk-api/firm/core/depends.py +++ b/api/rpk-api/firm/core/depends.py @@ -12,7 +12,7 @@ class Registry: self.instance = instance self.firm = firm - self.current_firm = CurrentFirmModel.get(self.db) + self.current_firm = CurrentFirmModel.get_current(self.db) def set_user(self, user): for firm in user.firms: diff --git a/api/rpk-api/firm/current_firm/__init__.py b/api/rpk-api/firm/current_firm/__init__.py index bcd41ca..a25b942 100644 --- a/api/rpk-api/firm/current_firm/__init__.py +++ b/api/rpk-api/firm/current_firm/__init__.py @@ -1,5 +1,6 @@ from typing import Any +from beanie import PydanticObjectId from pydantic import Field from firm.core.models import CrudDocument @@ -8,12 +9,11 @@ from firm.entity.schemas import EntityIndividualCreate, EntityCorporationCreate class CurrentFirmModel(CrudDocument): - instance: str - firm: str - name: str = Field(nullable=False) - - # primary_color: str = Field() - # secondary_color: str = Field() + instance: str = Field() + firm: str = Field() + entity_id: PydanticObjectId = Field() + primary_color: str = Field() + secondary_color: str = Field() def __eq__(self, other: Any) -> bool: if isinstance(other, dict): @@ -21,10 +21,10 @@ class CurrentFirmModel(CrudDocument): return super().__eq__(other) def compute_label(self) -> str: - return self.name + return f"{self.instance} / {self.firm}" @classmethod - async def get(cls, db): + async def get_current(cls, db): document = await cls._get_collection(db).find_one({}) if not document: return None @@ -39,7 +39,15 @@ class CurrentFirmSchemaRead(Reader): class CurrentFirmSchemaCreate(Writer): corporation: EntityCorporationCreate = Field(title="Informations sur la firme") owner: EntityIndividualCreate = Field(title="Informations sur le dirigeant") + position: str = Field(title="Poste") + + primary_color: str = Field() + secondary_color: str = Field() class CurrentFirmSchemaUpdate(Writer): pass + +class Partner(CrudDocument): + user_id: PydanticObjectId = Field() + entity_id: PydanticObjectId = Field() diff --git a/api/rpk-api/firm/current_firm/routes.py b/api/rpk-api/firm/current_firm/routes.py index 1107fa1..fa45bff 100644 --- a/api/rpk-api/firm/current_firm/routes.py +++ b/api/rpk-api/firm/current_firm/routes.py @@ -1,22 +1,36 @@ from fastapi import APIRouter, Depends -from firm.core.depends import get_logged_tenant_db_cursor, get_uninitialized_tenant_db_cursor -from firm.current_firm import CurrentFirmModel, CurrentFirmSchemaRead, CurrentFirmSchemaCreate, CurrentFirmSchemaUpdate +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 current_firm_router = APIRouter() @current_firm_router.get("/", response_model=CurrentFirmSchemaRead, response_description=f"Current Firm records retrieved") -async def read(db=Depends(get_logged_tenant_db_cursor)) -> CurrentFirmSchemaRead: - return CurrentFirmSchemaRead.from_model(**CurrentFirmModel.get(db)) +async def read(reg=Depends(get_authed_tenant_registry)) -> CurrentFirmSchemaRead: + document = await CurrentFirmModel.get_current(reg.db) + return CurrentFirmSchemaRead.from_model(document) @current_firm_router.post("/", response_description=f"Current Firm added to the database") -async def create(schema: CurrentFirmSchemaCreate, db=Depends(get_uninitialized_tenant_db_cursor)) -> CurrentFirmSchemaRead: - await schema.validate_foreign_key(db) - record = await CurrentFirmModel.create(db, schema) - return CurrentFirmSchemaRead.from_model(record) +async def create(schema: CurrentFirmSchemaCreate, reg=Depends(get_uninitialized_registry)) -> CurrentFirmSchemaRead: + owner_entity = await Entity.create(reg.db, schema.owner) + 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 await CurrentFirmSchemaRead.from_model(document) @current_firm_router.put("/", response_description=f"Current Firm record updated") -async def update(schema: CurrentFirmSchemaUpdate, db=Depends(get_logged_tenant_db_cursor)) -> CurrentFirmSchemaRead: - record = await CurrentFirmModel.get(db) - record = await CurrentFirmModel.update(db, record, schema) - return CurrentFirmSchemaRead.from_model(record) +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)