Coverage for bc/kwai-bc-portal/src/kwai_bc_portal/update_page.py: 100%
23 statements
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module for the use case "Update Page"."""
3from dataclasses import dataclass, replace
5from kwai_core.domain.presenter import Presenter
6from kwai_core.domain.value_objects.owner import Owner
7from kwai_core.domain.value_objects.text import DocumentFormat, Locale, LocaleText
9from kwai_bc_portal.applications.application_repository import (
10 ApplicationRepository,
11)
12from kwai_bc_portal.domain.application import ApplicationIdentifier
13from kwai_bc_portal.domain.page import PageEntity, PageIdentifier
14from kwai_bc_portal.page_command import PageCommand
15from kwai_bc_portal.pages.page_repository import PageRepository
18@dataclass(kw_only=True, frozen=True, slots=True)
19class UpdatePageCommand(PageCommand):
20 """Input for the "Update Page" use case."""
22 id: int
25class UpdatePage:
26 """Use case for updating a page."""
28 def __init__(
29 self,
30 repo: PageRepository,
31 application_repo: ApplicationRepository,
32 owner: Owner,
33 presenter: Presenter[PageEntity],
34 ):
35 """Initialize the use case.
37 Args:
38 repo: A repository for updating pages.
39 application_repo: A repository for getting the application.
40 owner: The owner of the page.
41 presenter: A presenter for a page.
42 """
43 self._repo = repo
44 self._application_repo = application_repo
45 self._owner = owner
46 self._presenter = presenter
48 async def execute(self, command: UpdatePageCommand):
49 """Execute the use case.
51 Args:
52 command: The input for this use case.
54 Raises:
55 PageNotFoundException: When the page does not exist.
56 ApplicationNotFoundException: When the application does not exist.
57 """
58 page = await self._repo.get_by_id(PageIdentifier(command.id))
59 application = await self._application_repo.get_by_id(
60 ApplicationIdentifier(command.application)
61 )
63 page = replace(
64 page,
65 enabled=command.enabled,
66 application=application,
67 texts=tuple(
68 [
69 LocaleText(
70 locale=Locale(text.locale),
71 format=DocumentFormat(text.format),
72 title=text.title,
73 content=text.content,
74 summary=text.summary,
75 author=self._owner,
76 )
77 for text in command.texts
78 ]
79 ),
80 priority=command.priority,
81 remark=command.remark,
82 traceable_time=page.traceable_time.mark_for_update(),
83 )
85 await self._repo.update(page)
87 self._presenter.present(page)