Implementing the partner into the db and contracts

This commit is contained in:
2025-05-02 00:03:08 +02:00
parent 6683d60be5
commit f9b6aae927
5 changed files with 35 additions and 16 deletions

View File

@@ -1,11 +1,15 @@
from fastapi import HTTPException, Depends
from hub.auth import get_current_user
from firm.current_firm import CurrentFirmModel, Partner
from firm.db import get_db_client
from firm.current_firm import CurrentFirmModel
from firm.entity.models import Entity
class Registry:
user = None
partner = None
def __init__(self, db_client, instance, firm):
self.db = db_client[f"tenant_{instance}_{firm}"]
@@ -14,11 +18,14 @@ class Registry:
self.current_firm = CurrentFirmModel.get_current(self.db)
def set_user(self, user):
async def set_user(self, user):
for firm in user.firms:
if firm.instance == self.instance and firm.firm == self.firm:
partner = await Partner.get_by_user_id(self.db, user.id)
partner_entity = await Entity.get(self.db, partner.entity_id)
self.user = user
self.db.user = user
self.partner = partner_entity
self.db.partner = partner_entity
return
raise PermissionError
@@ -30,9 +37,9 @@ async def get_tenant_registry(instance: str, firm: str, db_client=Depends(get_db
return registry
def get_authed_tenant_registry(registry=Depends(get_tenant_registry), user=Depends(get_current_user)) -> Registry:
async def get_authed_tenant_registry(registry=Depends(get_tenant_registry), user=Depends(get_current_user)) -> Registry:
try:
registry.set_user(user)
await registry.set_user(user)
except PermissionError:
raise HTTPException(status_code=404, detail="This firm doesn't exist or you are not allowed to access it.")
@@ -44,7 +51,7 @@ async def get_uninitialized_registry(instance: str, firm: str, db_client=Depends
raise HTTPException(status_code=409, detail="Firm configuration already exists")
try:
registry.set_user(user)
await registry.set_user(user)
except PermissionError:
raise HTTPException(status_code=404, detail="This firm doesn't exist or you are not allowed to access it.")

View File

@@ -37,7 +37,7 @@ class CrudDocument(BaseModel):
@classmethod
async def create(cls, db, create_schema):
model_dict = create_schema.model_dump() | {"created_by": db.user.id, "updated_by": db.user.id}
model_dict = create_schema.model_dump() | {"created_by": db.partner.id, "updated_by": db.partner.id}
document = cls.model_validate(model_dict).model_dump(mode="json")
result = await cls._get_collection(db).insert_one(document)
@@ -52,8 +52,13 @@ class CrudDocument(BaseModel):
}
@classmethod
def list(cls, db):
return cls._get_collection(db).find({})
async def list(cls, db, criteria={}):
result = []
for document in await cls._get_collection(db).find(criteria).to_list():
document["id"] = document.pop("_id")
result.append(cls.model_validate(document))
return result
@classmethod
async def get(cls, db, model_id):
@@ -66,7 +71,7 @@ class CrudDocument(BaseModel):
@classmethod
async def update(cls, db, model, update_schema):
model_dict = update_schema.model_dump(mode="json") | {"updated_by": db.user.id}
model_dict = update_schema.model_dump(mode="json") | {"updated_by": db.partner.id}
update_query = {
"$set": {field: value for field, value in model_dict.items() if field!= "id" }
}