"""Domain dataclasses for JIGAIDO bounty tracker.""" from dataclasses import dataclass @dataclass class Bounty: """A bounty created by a user. The created_by_user_id field always refers to the user who created the bounty. It does NOT indicate whether the bounty is a group or personal bounty. """ id: int text: str | None link: str | None due_date_ts: int | None created_at: int created_by_user_id: int @dataclass class TrackedBounty: """A bounty that a user is tracking. Use TrackedBounty when you need to record that a user is tracking a specific bounty from a specific room. The room_id indicates which room the bounty was tracked from (useful when users can track bounties across multiple rooms). For simple tracking lists, just use bounty_id and created_at. """ bounty_id: int created_at: int room_id: int @dataclass class RoomData: """All data for a room (group or DM). The room_id can be negative for Telegram groups or positive for DMs. The next_id field is used to generate unique bounty IDs within this room. """ room_id: int bounties: list[Bounty] next_id: int @dataclass class TrackingData: """User tracking state within a group. TrackingData vs TrackedBounty: - Use TrackingData to store ALL tracked bounties for a user in a specific group. It contains the group_id, user_id, and a list of TrackedBounty entries. - Use TrackedBounty to represent a single tracked bounty entry within that list. TrackingData is the container, TrackedBounty is the item. """ group_id: int user_id: int tracked: list[TrackedBounty]