Changing Account/category structure and Adding transactions and splits
This commit is contained in:
76
api/app/payee/models.py
Normal file
76
api/app/payee/models.py
Normal file
@@ -0,0 +1,76 @@
|
||||
from uuid import UUID, uuid4
|
||||
from typing import Optional
|
||||
|
||||
from fastapi_filter.contrib.sqlalchemy import Filter
|
||||
from sqlmodel import Field, SQLModel, select, Relationship
|
||||
from pydantic import Field as PydField
|
||||
|
||||
from account.models import Account, AccountRead
|
||||
|
||||
|
||||
class PayeeBase(SQLModel):
|
||||
name: str = Field(index=True)
|
||||
default_account_id: UUID | None = Field(default=None, foreign_key="account.id")
|
||||
|
||||
class PayeeBaseId(PayeeBase):
|
||||
id: UUID | None = Field(default_factory=uuid4, primary_key=True)
|
||||
|
||||
class Payee(PayeeBaseId, table=True):
|
||||
default_account: Account | None = Relationship()
|
||||
|
||||
@classmethod
|
||||
def create(cls, payee, session):
|
||||
payee_db = cls.model_validate(payee)
|
||||
session.add(payee_db)
|
||||
session.commit()
|
||||
session.refresh(payee_db)
|
||||
|
||||
return payee_db
|
||||
|
||||
@classmethod
|
||||
def list(cls, filters):
|
||||
return filters.filter(select(cls)).join(Account)
|
||||
|
||||
@classmethod
|
||||
def get(cls, session, payee_id):
|
||||
return session.get(Payee, payee_id)
|
||||
|
||||
@classmethod
|
||||
def update(cls, session, payee_db, payee_data):
|
||||
payee_db.sqlmodel_update(payee_data)
|
||||
session.add(payee_db)
|
||||
session.commit()
|
||||
session.refresh(payee_db)
|
||||
return payee_db
|
||||
|
||||
@classmethod
|
||||
def delete(cls, session, payee):
|
||||
session.delete(payee)
|
||||
session.commit()
|
||||
|
||||
class PayeeRead(PayeeBaseId):
|
||||
default_account: AccountRead
|
||||
|
||||
class PayeeWrite(PayeeBase):
|
||||
default_account_id: UUID = PydField(default=None, json_schema_extra={
|
||||
"foreign_key": {
|
||||
"reference": {
|
||||
"resource": "accounts",
|
||||
"schema": "AccountRead",
|
||||
"label": "name"
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
class PayeeCreate(PayeeWrite):
|
||||
pass
|
||||
|
||||
class PayeeUpdate(PayeeWrite):
|
||||
pass
|
||||
|
||||
class PayeeFilters(Filter):
|
||||
name__like: Optional[str] = None
|
||||
|
||||
class Constants(Filter.Constants):
|
||||
model = Payee
|
||||
search_model_fields = ["name"]
|
||||
Reference in New Issue
Block a user