from sqlmodel import select, func from account.models import Account from transaction.models import Transaction, Split class TransactionResource: @classmethod def get_sequence_number(cls, session): stmt = select(func.max(Transaction.sequence)).select_from(Transaction) sequence = session.execute(stmt).first() return sequence[0] + 1 if sequence[0] else 1 @classmethod def create(cls, session, transaction): transaction_db = Transaction.model_validate(transaction) transaction_db.sequence = cls.get_sequence_number(session) session.add(transaction_db) session.commit() session.refresh(transaction_db) return transaction_db @classmethod def list(cls): return select(Transaction).join(Split).join(Account) @classmethod def get(cls, session, transaction_id): return session.get(Transaction, transaction_id) @classmethod def update(cls, session, transaction_db, transaction_data): transaction_db.sqlmodel_update(Transaction.model_validate(transaction_data)) session.add(transaction_db) session.commit() session.refresh(transaction_db) return transaction_db @classmethod def delete(cls, session, transaction): session.delete(transaction) session.commit()