Moving requests to resource

This commit is contained in:
2025-02-12 20:11:59 +01:00
parent 171875f915
commit 539410c18b
5 changed files with 56 additions and 196 deletions

View File

@@ -1,68 +1,58 @@
from sqlmodel import select
from account.models import Account
class AccountResource:
@classmethod
def get_by_path(cls, session, path):
if not path:
return None
return session.exec(select(cls).where(cls.path == path)).first()
return session.exec(select(Account).where(Account.path == path)).first()
def get_parent(self, session):
if self.parent_account_id is None:
@classmethod
def get_parent(cls, session, model):
if model.parent_account_id is None:
return None
self.parent_account = self.get(session, self.parent_account_id)
return self.parent_account
def compute_path(self, session):
if self.parent_account_id is None:
self.path = self.get_root_path()
else:
self.parent_account = self.get(session, self.parent_account_id)
self.path = self.parent_account.get_child_path(self)
return self.path
def compute_family(self):
if self.type in Asset:
self.family = AccountFamily.Asset.value
elif self.type in Liability:
self.family = AccountFamily.Liability.value
else:
self.family = self.type
return self.family
model.parent_account = cls.get(session, model.parent_account_id)
return model.parent_account
@classmethod
def schema_to_model(cls, session, schema, model=None):
try:
if model:
model = cls.model_validate(model, update=schema)
model = Account.model_validate(model, update=schema)
else:
schema.path = ""
schema.family = ""
model = cls.model_validate(schema)
model = Account.model_validate(schema)
except Exception as e:
print(e)
raise
model.compute_family()
model.validate_parent(session)
model.compute_path(session)
cls.validate_parent(session, model)
model.compute_path()
return model
def validate_parent(self, session):
if self.parent_account_id is None:
@classmethod
def validate_parent(cls, session, model):
if model.parent_account_id is None:
return True
parent = self.get_parent(session)
parent = cls.get_parent(session, model)
if not parent:
raise KeyError("Parent account not found.")
if parent.family != self.family:
if parent.family != model.family:
raise ValueError("Account family mismatch with parent account..")
if self.path and parent.path.startswith(self.path):
if model.path and parent.path.startswith(model.path):
raise ValueError("Parent Account is descendant")
return True
model.parent_account = parent
return model
@classmethod
def create(cls, account, session):