feat: logging toegevoegd

This commit is contained in:
kodi
2026-03-12 07:32:44 +01:00
parent ea6eac9536
commit 9901c77919
30 changed files with 1069 additions and 124 deletions
+65 -22
View File
@@ -2,18 +2,22 @@ from __future__ import annotations
from pathlib import Path
import uuid
from backend.app.api.errors import AppError
from backend.app.api.schemas import TaskCreateResponse
from backend.app.db.history_repository import HistoryRepository
from backend.app.db.task_repository import TaskRepository
from backend.app.security.path_guard import PathGuard, ResolvedPath
from backend.app.tasks_runner import TaskRunner
class MoveTaskService:
def __init__(self, path_guard: PathGuard, repository: TaskRepository, runner: TaskRunner):
def __init__(self, path_guard: PathGuard, repository: TaskRepository, runner: TaskRunner, history_repository: HistoryRepository | None = None):
self._path_guard = path_guard
self._repository = repository
self._runner = runner
self._history_repository = history_repository
def create_move_task(self, source: str | None, destination: str | None) -> TaskCreateResponse:
if not source or not destination:
@@ -23,30 +27,50 @@ class MoveTaskService:
status_code=400,
)
item = self._build_move_item(source=source, destination=destination)
task = self._repository.create_task(
operation="move",
source=item["source_relative"],
destination=item["destination_relative"],
)
if item["kind"] == "directory":
self._runner.enqueue_move_directory(
task_id=task["id"],
source=item["source_absolute"],
destination=item["destination_absolute"],
try:
item = self._build_move_item(source=source, destination=destination)
task_id = str(uuid.uuid4())
task = self._repository.create_task(
operation="move",
source=item["source_relative"],
destination=item["destination_relative"],
task_id=task_id,
)
else:
self._runner.enqueue_move_file(
task_id=task["id"],
source=item["source_absolute"],
destination=item["destination_absolute"],
total_bytes=item["total_bytes"],
same_root=item["same_root"],
self._record_history(
entry_id=task_id,
operation="move",
status="queued",
source=item["source_relative"],
destination=item["destination_relative"],
)
return TaskCreateResponse(task_id=task["id"], status=task["status"])
if item["kind"] == "directory":
self._runner.enqueue_move_directory(
task_id=task["id"],
source=item["source_absolute"],
destination=item["destination_absolute"],
)
else:
self._runner.enqueue_move_file(
task_id=task["id"],
source=item["source_absolute"],
destination=item["destination_absolute"],
total_bytes=item["total_bytes"],
same_root=item["same_root"],
)
return TaskCreateResponse(task_id=task["id"], status=task["status"])
except AppError as exc:
self._record_history(
operation="move",
status="failed",
source=source,
destination=destination,
error_code=exc.code,
error_message=exc.message,
finished_at=self._now_iso(),
)
raise
def create_batch_move_task(self, sources: list[str] | None, destination_base: str | None) -> TaskCreateResponse:
if not sources or len(sources) < 2:
@@ -92,10 +116,19 @@ class MoveTaskService:
)
items.append(item)
task_id = str(uuid.uuid4())
task = self._repository.create_task(
operation="move",
source=f"{len(items)} items",
destination=resolved_destination_base.relative,
task_id=task_id,
)
self._record_history(
entry_id=task_id,
operation="move",
status="queued",
source=f"{len(items)} items",
destination=resolved_destination_base.relative,
)
self._runner.enqueue_move_batch(
task_id=task["id"],
@@ -225,3 +258,13 @@ class MoveTaskService:
return True
except ValueError:
return False
def _record_history(self, **kwargs) -> None:
if self._history_repository:
self._history_repository.create_entry(**kwargs)
@staticmethod
def _now_iso() -> str:
from datetime import datetime, timezone
return datetime.now(timezone.utc).replace(microsecond=0).isoformat().replace("+00:00", "Z")