feat: logging toegevoegd
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user