Files
Abacus/backend/models.py
2025-11-23 16:34:11 +01:00

53 lines
1.6 KiB
Python

from typing import List, Optional
from sqlmodel import Field, Relationship, SQLModel
from enum import Enum
import uuid
from datetime import datetime
class OperationType(str, Enum):
INCOME = 'income'
EXPENSE = 'expense'
class Association(SQLModel, table=True):
id: str = Field(default_factory=lambda: str(uuid.uuid4()), primary_key=True)
name: str
password: str
balances: List["Balance"] = Relationship(back_populates="association")
class Balance(SQLModel, table=True):
id: str = Field(default_factory=lambda: str(uuid.uuid4()), primary_key=True)
name: str
initialAmount: float
association_id: Optional[str] = Field(default=None, foreign_key="association.id")
association: Optional[Association] = Relationship(back_populates="balances")
operations: List["Operation"] = Relationship(back_populates="balance")
position: int = Field(default=0)
class Operation(SQLModel, table=True):
id: str = Field(default_factory=lambda: str(uuid.uuid4()), primary_key=True)
name: str
description: str
group: str
amount: float
type: OperationType
date: datetime
invoice: Optional[str] = None
balance_id: Optional[str] = Field(default=None, foreign_key="balance.id")
balance: Optional[Balance] = Relationship(back_populates="operations")
class BalanceRead(SQLModel):
id: str
name: str
initialAmount: float
position: int = 0
operations: List[Operation] = []
class AssociationRead(SQLModel):
id: str
name: str
balances: List[BalanceRead] = []
operations: List[Operation] = []