diff --git a/autosync/autosync/models/episode.py b/autosync/autosync/models/episode.py new file mode 100644 index 00000000..047344a6 --- /dev/null +++ b/autosync/autosync/models/episode.py @@ -0,0 +1,10 @@ +from typing import Literal +from dataclasses import dataclass + +from .metadataid import MetadataID + + +@dataclass +class Episode: + external_id: dict[str, MetadataID] + kind: Literal["episode"] diff --git a/autosync/autosync/models/metadataid.py b/autosync/autosync/models/metadataid.py new file mode 100644 index 00000000..87bfc915 --- /dev/null +++ b/autosync/autosync/models/metadataid.py @@ -0,0 +1,8 @@ +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class MetadataID: + data_id: str + link: Optional[str] diff --git a/autosync/autosync/models/movie.py b/autosync/autosync/models/movie.py new file mode 100644 index 00000000..6d886868 --- /dev/null +++ b/autosync/autosync/models/movie.py @@ -0,0 +1,17 @@ +from typing import Literal, Optional +from datetime import date +from dataclasses import dataclass + +from .metadataid import MetadataID + + +@dataclass +class Movie: + name: str + air_date: Optional[date] + external_id: dict[str, MetadataID] + kind: Literal["movie"] + + @property + def year(self): + return self.air_date.year if self.air_date is not None else None diff --git a/autosync/autosync/models/show.py b/autosync/autosync/models/show.py new file mode 100644 index 00000000..364dd5b3 --- /dev/null +++ b/autosync/autosync/models/show.py @@ -0,0 +1,17 @@ +from typing import Literal, Optional +from datetime import date +from dataclasses import dataclass + +from .metadataid import MetadataID + + +@dataclass +class Show: + name: str + start_air: Optional[date] + external_id: dict[str, MetadataID] + kind: Literal["show"] + + @property + def year(self): + return self.start_air.year if self.start_air is not None else None diff --git a/autosync/autosync/models/user.py b/autosync/autosync/models/user.py new file mode 100644 index 00000000..653af8eb --- /dev/null +++ b/autosync/autosync/models/user.py @@ -0,0 +1,30 @@ +from datetime import datetime, time +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class JwtToken: + token_type: str + access_token: str + refresh_token: str + expire_in: time + expire_at: datetime + + +@dataclass +class ExternalToken: + id: str + username: str + profileUrl: Optional[str] + token: JwtToken + + +@dataclass +class User: + id: str + username: str + email: str + permissions: list[str] + settings: dict[str, str] + external_id: dict[str, ExternalToken] diff --git a/autosync/autosync/models/watch_status.py b/autosync/autosync/models/watch_status.py new file mode 100644 index 00000000..5f42ab9d --- /dev/null +++ b/autosync/autosync/models/watch_status.py @@ -0,0 +1,21 @@ +from datetime import date +from dataclasses import dataclass +from typing import Optional +from enum import Enum + + +class Status(str, Enum): + COMPLETED = "completed" + WATCHING = "watching" + DROPED = "droped" + PLANNED = "planned" + DELETED = "deleted" + + +@dataclass +class WatchStatus: + added_date: date + played_date: date + status: Status + watched_time: Optional[int] + watched_percent: Optional[int]