77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import annotations
|
|
|
|
import datetime
|
|
import uuid
|
|
|
|
import pydantic
|
|
|
|
from hotpocket_common.constants import AssociationsSearchMode
|
|
|
|
from .base import ModelOut, Query
|
|
from .saves import SaveOut
|
|
|
|
|
|
class AssociationOut(ModelOut):
|
|
archived_at: datetime.datetime | None
|
|
starred_at: datetime.datetime | None
|
|
target_uuid: uuid.UUID = pydantic.Field(alias='target_id')
|
|
target_meta: dict
|
|
target_title: str | None
|
|
target_description: str | None
|
|
|
|
@property
|
|
def is_starred(self) -> bool:
|
|
return self.starred_at is not None
|
|
|
|
def get_title(self) -> str | None:
|
|
return (
|
|
self.target_title
|
|
if self.target_title is not None
|
|
else self.target_meta.get('title', None)
|
|
)
|
|
|
|
def get_description(self) -> str | None:
|
|
return (
|
|
self.target_description
|
|
if self.target_description is not None
|
|
else self.target_meta.get('description', None)
|
|
)
|
|
|
|
@property
|
|
def title(self) -> str | None:
|
|
return self.get_title()
|
|
|
|
@property
|
|
def description(self) -> str | None:
|
|
return self.get_description()
|
|
|
|
|
|
class AssociationWithTargetOut(AssociationOut):
|
|
target: SaveOut
|
|
|
|
@property
|
|
def title(self) -> str | None:
|
|
return self.get_title() or self.target.title
|
|
|
|
@property
|
|
def description(self) -> str | None:
|
|
return self.get_description() or self.target.description
|
|
|
|
|
|
class AssociationIn(pydantic.BaseModel):
|
|
archived_at: datetime.datetime | None
|
|
|
|
|
|
class AssociationsQuery(Query):
|
|
account_uuid: uuid.UUID
|
|
before: uuid.UUID | None = pydantic.Field(default=None)
|
|
after: uuid.UUID | None = pydantic.Field(default=None)
|
|
search: str | None = pydantic.Field(default=None)
|
|
mode: AssociationsSearchMode = pydantic.Field(default=AssociationsSearchMode.DEFAULT)
|
|
|
|
|
|
class AssociationUpdateIn(pydantic.BaseModel):
|
|
target_title: str | None = pydantic.Field(default=None)
|
|
target_description: str | None = pydantic.Field(default=None)
|