from __future__ import annotations from dataclasses import dataclass, field from datetime import UTC, datetime from uuid import uuid4 @dataclass(slots=True) class PointsTransaction: id: str user_id: str account_id: str type: str # earn / spend / refund source: str amount: int balance_after: int description: str = "" ref_id: str = "" created_at: datetime = field(default_factory=lambda: datetime.now(UTC)) @classmethod def create( cls, user_id: str, account_id: str, type: str, source: str, amount: int, balance_after: int, description: str = "", ref_id: str = "", ) -> "PointsTransaction": return cls( id=uuid4().hex, user_id=user_id, account_id=account_id, type=type, source=source, amount=amount, balance_after=balance_after, description=description, ref_id=ref_id, )