feat: 重构 Reminder Notification 系统并更新应用包名

This commit is contained in:
qzl
2026-03-30 18:36:57 +08:00
parent 9fb2a6857b
commit 91bf3c3f96
90 changed files with 5133 additions and 3017 deletions
@@ -59,6 +59,9 @@ class FakeRepo:
return self._item
return None
async def get_item(self, item_id: UUID) -> ScheduleItem | None:
return await self.get_by_id(item_id)
async def create(self, data: dict) -> ScheduleItem:
return _create_mock_schedule_item(
owner_id=data["owner_id"],
@@ -74,6 +77,23 @@ class FakeRepo:
self._item.title = data["title"]
return self._item
async def update_item(self, item_id: UUID, data: dict) -> ScheduleItem | None:
if self._item is None:
return None
if "title" in data:
self._item.title = data["title"]
if "description" in data:
self._item.description = data["description"]
if "start_at" in data:
self._item.start_at = data["start_at"]
if "end_at" in data:
self._item.end_at = data["end_at"]
if "timezone" in data:
self._item.timezone = data["timezone"]
if "extra_metadata" in data:
self._item.extra_metadata = data["extra_metadata"]
return self._item
async def delete_by_item_id(
self, item_id: UUID, owner_id: UUID
) -> ScheduleItem | None:
@@ -81,6 +101,9 @@ class FakeRepo:
return None
return self._item
async def delete_item(self, item_id: UUID) -> None:
del item_id
async def list_by_date_range(
self, owner_id: UUID, start_at: datetime, end_at: datetime
) -> list[ScheduleItem]:
@@ -327,12 +350,11 @@ async def test_update_maps_metadata_to_extra_metadata(
captured: dict | None = None
class CaptureRepo(FakeRepo):
async def update_by_item_id(
self, item_id: UUID, owner_id: UUID, data: dict
) -> ScheduleItem | None:
async def update_item(self, item_id: UUID, data: dict) -> ScheduleItem | None:
nonlocal captured
del item_id
captured = data
return await super().update_by_item_id(item_id, owner_id, data)
return await super().update_item(item.id, data)
service = ScheduleItemService(
repository=CaptureRepo(item),
@@ -370,12 +392,11 @@ async def test_update_maps_null_metadata_to_extra_metadata_null(
captured: dict | None = None
class CaptureRepo(FakeRepo):
async def update_by_item_id(
self, item_id: UUID, owner_id: UUID, data: dict
) -> ScheduleItem | None:
async def update_item(self, item_id: UUID, data: dict) -> ScheduleItem | None:
nonlocal captured
del item_id
captured = data
return await super().update_by_item_id(item_id, owner_id, data)
return await super().update_item(item.id, data)
service = ScheduleItemService(
repository=CaptureRepo(item),