Coverage for dibbler / queries / transfer.py: 20%
14 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-13 07:50 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-13 07:50 +0000
1from datetime import datetime
3from sqlalchemy.orm import Session
5from dibbler.models import Transaction, User
8def transfer(
9 sql_session: Session,
10 from_user: User,
11 to_user: User,
12 amount: int,
13 time: datetime | None = None,
14 message: str | None = None,
15) -> Transaction:
16 if from_user.id is None:
17 raise ValueError("From user must be persisted in the database.")
19 if to_user.id is None:
20 raise ValueError("To user must be persisted in the database.")
22 if amount <= 0:
23 raise ValueError("Amount must be positive.")
25 # TODO: verify time is not behind last transaction's time
27 transaction = Transaction.transfer(
28 user_id=from_user.id,
29 transfer_user_id=to_user.id,
30 amount=amount,
31 time=time,
32 message=message,
33 )
35 sql_session.add(transaction)
36 sql_session.commit()
38 return transaction