43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from uuid import UUID
|
|
from uuid import uuid4
|
|
|
|
from sqlalchemy import BigInteger
|
|
from sqlalchemy import Column
|
|
from sqlalchemy import ForeignKey
|
|
from sqlmodel import Field
|
|
from sqlmodel import Relationship
|
|
from sqlmodel import SQLModel
|
|
|
|
from app.models.item import Item
|
|
from app.models.user import User
|
|
|
|
|
|
class BaseTransaction(SQLModel):
|
|
title: str = Field(nullable=False)
|
|
|
|
|
|
class Transaction(BaseTransaction, table=True):
|
|
id: UUID = Field(default_factory=uuid4, primary_key=True)
|
|
payer_id: int = Field(
|
|
sa_column=Column(BigInteger(), ForeignKey('user.id'))
|
|
)
|
|
payer: User = Relationship(back_populates='transactions')
|
|
event_id: UUID = Field(foreign_key='event.id')
|
|
event: 'Event' = Relationship(back_populates='transactions')
|
|
closed: bool = Field(nullable=False, default=False)
|
|
items: list['Item'] = Relationship(back_populates='transaction')
|
|
|
|
async def add_participant(self, participant: User):
|
|
self.participants.append(participant)
|
|
|
|
async def add_item(self, item: Item):
|
|
self.items.append(item)
|
|
|
|
|
|
class OutputTransaction(BaseTransaction):
|
|
id: UUID
|
|
payer: User
|
|
event_id: UUID
|
|
closed: bool
|
|
items: list['Item']
|