feat: Announcementに関するモデルと型を作り直した

pull/110/head
yupix 10 months ago
parent 3abf722877
commit d4c434d024
No known key found for this signature in database
GPG Key ID: 2FF705F5C56D9C06

@ -1985,7 +1985,7 @@
"Announcement": {
"name": "Announcement",
"hash": "2cf968f3b8466df7c59f31dfca7a314929ed4cf6fc7cc074d4c1a8fd998c9994",
"status": "notSupported"
"status": "supported"
},
"App": {
"name": "App",
@ -2103,4 +2103,4 @@
"status": "notSupported"
}
}
}
}

@ -1,22 +1,19 @@
from __future__ import annotations
from datetime import datetime
from typing import TYPE_CHECKING, Generic, TypeVar
from typing import TYPE_CHECKING
from mipac.abstract.model import AbstractModel
from mipac.types.announcement import IAnnouncement, IAnnouncementCommon, IAnnouncementSystem
from mipac.types.announcement import IAnnouncement, IAnnouncementDetailed
from mipac.utils.format import str_to_datetime
if TYPE_CHECKING:
from mipac.actions.admins.announcement import AdminAnnouncementClientActions
from mipac.manager.client import ClientManager
T = TypeVar("T", bound=IAnnouncementCommon)
class AnnouncementCommon(Generic[T], AbstractModel):
def __init__(self, announcement: T, *, client: ClientManager) -> None:
self.__announcement: T = announcement
class Announcement:
def __init__(self, announcement: IAnnouncement, *, client: ClientManager) -> None:
self.__announcement: IAnnouncement = announcement
self.__client: ClientManager = client
@property
@ -25,13 +22,13 @@ class AnnouncementCommon(Generic[T], AbstractModel):
@property
def created_at(self) -> datetime:
return str_to_datetime(self.__announcement["created_at"])
return str_to_datetime(self.__announcement["createdAt"])
@property
def updated_at(self) -> datetime | None:
return (
str_to_datetime(self.__announcement["updated_at"])
if self.__announcement["updated_at"]
str_to_datetime(self.__announcement["updatedAt"])
if self.__announcement["updatedAt"]
else None
)
@ -45,13 +42,31 @@ class AnnouncementCommon(Generic[T], AbstractModel):
@property
def image_url(self) -> str | None:
return self.__announcement["image_url"]
return self.__announcement["imageUrl"]
@property
def action(self) -> AdminAnnouncementClientActions:
return self.__client.admin.announcement._create_client_announcement_instance(
announce_id=self.id
)
def icon(self) -> str | None:
return self.__announcement["icon"]
@property
def display(self) -> str:
return self.__announcement["display"]
@property
def need_confirmation_to_read(self) -> bool:
return self.__announcement["needConfirmationToRead"]
@property
def silence(self) -> bool:
return self.__announcement["silence"]
@property
def for_you(self) -> bool:
return self.__announcement["forYou"]
@property
def is_read(self) -> bool | None:
return self.__announcement["isRead"]
def __eq__(self, __value: object) -> bool:
return isinstance(__value, Announcement) and self.id == __value.id
@ -59,22 +74,87 @@ class AnnouncementCommon(Generic[T], AbstractModel):
def __ne__(self, __value: object) -> bool:
return not self.__eq__(__value)
@property
def action(self) -> AdminAnnouncementClientActions:
return self.__client.admin.announcement._create_client_announcement_instance(
announce_id=self.id
)
class Announcement(AnnouncementCommon):
def __init__(self, announcement: IAnnouncement, *, client: ClientManager) -> None:
super().__init__(announcement, client=client)
self.__announcement: IAnnouncement
class AnnouncementDetailed:
def __init__(self, raw_announcement: IAnnouncementDetailed, *, client: ClientManager) -> None:
self.__raw_announcement: IAnnouncementDetailed = raw_announcement
self.__client: ClientManager = client
@property
def id(self) -> str:
return self.__raw_announcement["id"]
@property
def created_at(self) -> datetime:
return str_to_datetime(self.__raw_announcement["created_at"])
@property
def updated_at(self) -> datetime | None:
return (
str_to_datetime(self.__raw_announcement["updated_at"])
if self.__raw_announcement["updated_at"]
else None
)
@property
def is_read(self) -> bool:
return self.__announcement["is_read"]
def title(self) -> str:
return self.__raw_announcement["title"]
@property
def text(self) -> str:
return self.__raw_announcement["text"]
class AnnouncementSystem(AnnouncementCommon):
def __init__(self, announcement: IAnnouncementSystem, *, client: ClientManager) -> None:
super().__init__(announcement, client=client)
self.__announcement: IAnnouncementSystem
@property
def image_url(self) -> str | None:
return self.__raw_announcement["image_url"]
@property
def icon(self) -> str | None:
return self.__raw_announcement["icon"]
@property
def display(self) -> str:
return self.__raw_announcement["display"]
@property
def is_active(self) -> bool:
return self.__raw_announcement["is_active"]
@property
def for_existing_users(self) -> bool:
return self.__raw_announcement["for_existing_users"]
@property
def silence(self) -> bool:
return self.__raw_announcement["silence"]
@property
def need_confirmation_to_read(self) -> bool:
return self.__raw_announcement["need_confirmation_to_read"]
@property
def user_id(self) -> str | None:
return self.__raw_announcement["user_id"]
@property
def reads(self) -> int:
return self.__announcement["reads"]
"""Returns the number of reads of the announcement."""
return self.__raw_announcement["reads"]
def __eq__(self, __value: object) -> bool:
return isinstance(__value, AnnouncementDetailed) and self.id == __value.id
def __ne__(self, __value: object) -> bool:
return not self.__eq__(__value)
@property
def action(self) -> AdminAnnouncementClientActions:
return self.__client.admin.announcement._create_client_announcement_instance(
announce_id=self.id
)

@ -1,22 +1,35 @@
from typing import TypedDict
from typing import TypedDict, NotRequired
class IAnnouncementCommon(TypedDict):
class IAnnouncement(TypedDict):
id: str
created_at: str
updated_at: str | None
createdAt: str
updatedAt: str | None
text: str
title: str
image_url: str | None
class IAnnouncement(IAnnouncementCommon):
"""ユーザーから見たアナウンスの状態"""
is_read: bool
imageUrl: str | None
icon: str | None
display: str
needConfirmationToRead: bool
silence: bool
forYou: bool
isRead: NotRequired[bool]
class IAnnouncementSystem(IAnnouncementCommon):
"""システムから見たアナウンスの状態"""
class IAnnouncementDetailed(TypedDict):
"""管理者から見たアナウンス"""
id: str
created_at: str
updated_at: str | None
title: str
text: str
image_url: str | None
icon: str | None
display: str
is_active: bool
for_existing_users: bool
silence: bool
need_confirmation_to_read: bool
user_id: str | None
reads: int

Loading…
Cancel
Save