mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-29 03:56:43 +08:00
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""插件持久化数据写用例。"""
|
|
|
|
from typing import Protocol
|
|
|
|
|
|
class PluginDataMutationRepository(Protocol):
|
|
"""插件数据删除命令所需的无提交仓储端口。"""
|
|
|
|
def stage_delete(self, plugin_id: str) -> None:
|
|
"""暂存目标插件的全部持久化数据删除。"""
|
|
...
|
|
|
|
|
|
class UnitOfWork(Protocol):
|
|
"""插件数据同步写用例所需的事务端口。"""
|
|
|
|
def commit(self) -> None:
|
|
"""提交当前逻辑操作。"""
|
|
...
|
|
|
|
def rollback(self) -> None:
|
|
"""回滚当前逻辑操作。"""
|
|
...
|
|
|
|
|
|
class DeletePluginDataCommand:
|
|
"""在一个显式事务中删除目标插件的全部持久化数据。"""
|
|
|
|
def __init__(
|
|
self,
|
|
repository: PluginDataMutationRepository,
|
|
unit_of_work: UnitOfWork,
|
|
) -> None:
|
|
"""保存无提交仓储和事务所有者。"""
|
|
self._repository = repository
|
|
self._unit_of_work = unit_of_work
|
|
|
|
def execute(self, plugin_id: str) -> None:
|
|
"""暂存并提交删除;任一步失败时回滚并传播原异常。"""
|
|
try:
|
|
self._repository.stage_delete(plugin_id)
|
|
self._unit_of_work.commit()
|
|
except Exception:
|
|
self._unit_of_work.rollback()
|
|
raise
|