Coverage for dibbler / queries / adjust_interest.py: 100%
12 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-13 08:11 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-13 08:11 +0000
1from datetime import datetime
3from sqlalchemy.orm import Session
5from dibbler.models import Transaction, User
7# TODO: this type of transaction should be password protected.
8# the password can be set as a string literal in the config file.
11def adjust_interest(
12 sql_session: Session,
13 user: User,
14 new_interest: int,
15 time: datetime | None = None,
16 message: str | None = None,
17) -> Transaction:
18 if new_interest < 0:
19 raise ValueError("Interest rate cannot be negative")
21 if user.id is None:
22 raise ValueError("User must be persisted in the database.")
24 # TODO: verify time is not behind last transaction's time
26 transaction = Transaction.adjust_interest(
27 user_id=user.id,
28 interest_rate_percent=new_interest,
29 time=time,
30 message=message,
31 )
33 sql_session.add(transaction)
34 sql_session.commit()
36 return transaction