2026-04-06 21:32:13 -04:00

50 lines
1.2 KiB
Python

from typing import Literal
from pydantic import ConfigDict
from .base import BaseModel, UTCDatetime
from .play_session import PlaySessionIngestResponse
class SyncOperationSchema(BaseModel):
action: Literal["upload", "download", "conflict", "no_op"]
rom_id: int
save_id: int | None = None
file_name: str
slot: str | None = None
emulator: str | None = None
reason: str
server_updated_at: UTCDatetime | None = None
server_content_hash: str | None = None
class SyncNegotiateResponse(BaseModel):
session_id: int
operations: list[SyncOperationSchema]
total_upload: int
total_download: int
total_conflict: int
total_no_op: int
class SyncSessionSchema(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
device_id: str
user_id: int
status: str
initiated_at: UTCDatetime
completed_at: UTCDatetime | None = None
operations_planned: int
operations_completed: int
operations_failed: int
error_message: str | None = None
created_at: UTCDatetime
updated_at: UTCDatetime
class SyncCompleteResponse(BaseModel):
session: SyncSessionSchema
play_session_ingest: PlaySessionIngestResponse | None = None