"""Domain dataclasses for JIGAIDO bounty tracker.""" from dataclasses import dataclass from typing import Optional @dataclass class Bounty: """Bounty - used for both group and personal bounties. Use created_by_user_id to distinguish: if set, it's a group bounty created by that user. If None, it's a personal/DM bounty. """ id: int text: Optional[str] link: Optional[str] due_date_ts: Optional[int] created_at: int created_by_user_id: Optional[int] = None @dataclass class TrackedBounty: """A bounty that a user is tracking.""" bounty_id: int created_at: int @dataclass class RoomData: """All data for a room (group or DM). For groups: is_group=True, room_id is negative (Telegram group ID) For DMs: is_group=False, room_id is the user_id (positive) next_id is used to generate unique bounty IDs within this room. """ room_id: int is_group: bool bounties: list[Bounty] next_id: int @dataclass class TrackingData: """User tracking data within a group. group_id is the Telegram group ID (always negative). """ group_id: int user_id: int tracked: list[TrackedBounty]