refactor: step 2 - extract domain services (tasks, prompts, snapshots, knowledge)
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
"""
|
||||
===============================================================================
|
||||
FILE: services/tasks/service.py
|
||||
PROJECT: SCUD Orion AI (Unified Architecture)
|
||||
MODULE: services / tasks
|
||||
ROLE: Единый доменный сервис задач (бизнес-логика и диспетчер операций).
|
||||
|
||||
AI-CONTEXT-ANCHORS:
|
||||
- ANCHOR[TASK_SERVICE_DISPATCHER]: Маршрутизация действий ADD/UPDATE/DELETE/EXPORT.
|
||||
===============================================================================
|
||||
"""
|
||||
|
||||
from typing import Dict, Any, Optional, List
|
||||
from .repository import repo_get_tasks, repo_add_task, repo_update_task, repo_delete_task
|
||||
from .exporter import export_tasks_to_markdown
|
||||
|
||||
|
||||
def get_tasks(user_id: int, status: Optional[str] = None) -> List[Dict[str, Any]]:
|
||||
"""Получить список задач."""
|
||||
return repo_get_tasks(user_id, status)
|
||||
|
||||
|
||||
def add_task(user_id: int, module: str, title: str, priority: str = "MEDIUM", due_date: Optional[str] = None, status: str = "BACKLOG") -> Dict[str, Any]:
|
||||
"""Создать задачу."""
|
||||
res = repo_add_task(user_id, module, title, priority, due_date, status)
|
||||
return {"status": "success", "task_id": res["task_id"], "message": f"Задача #{res['id']} создана и добавлена в планы"}
|
||||
|
||||
|
||||
def update_task_details(user_id: int, task_id: str, title: Optional[str] = None, priority: Optional[str] = None, status: Optional[str] = None, due_date: Optional[str] = None) -> Dict[str, Any]:
|
||||
"""Обновить задачу."""
|
||||
return repo_update_task(user_id, task_id, title, priority, status, due_date)
|
||||
|
||||
|
||||
def delete_task(user_id: int, task_id: str) -> Dict[str, Any]:
|
||||
"""Удалить задачу."""
|
||||
return repo_delete_task(user_id, task_id)
|
||||
|
||||
|
||||
# ANCHOR[TASK_SERVICE_DISPATCHER]
|
||||
def execute_task_action(
|
||||
user_id: int,
|
||||
action: str,
|
||||
task_id: Optional[str] = None,
|
||||
title: Optional[str] = None,
|
||||
priority: Optional[str] = "MEDIUM",
|
||||
status: Optional[str] = None,
|
||||
module: Optional[str] = "general",
|
||||
due_date: Optional[str] = None,
|
||||
filename: Optional[str] = "ROADMAP.md"
|
||||
) -> Dict[str, Any]:
|
||||
"""Консолидированный диспетчер операций над задачами."""
|
||||
act = (action or "").strip().upper()
|
||||
|
||||
if act == "ADD":
|
||||
if not title:
|
||||
return {"status": "error", "message": "Для создания задачи требуется указать title"}
|
||||
return add_task(user_id, module or "general", title, priority or "MEDIUM", due_date, status or "BACKLOG")
|
||||
|
||||
elif act == "UPDATE":
|
||||
if not task_id:
|
||||
return {"status": "error", "message": "Для обновления требуется указать task_id"}
|
||||
return update_task_details(user_id, str(task_id), title, priority, status, due_date)
|
||||
|
||||
elif act == "DELETE":
|
||||
if not task_id:
|
||||
return {"status": "error", "message": "Для удаления требуется указать task_id"}
|
||||
return delete_task(user_id, str(task_id))
|
||||
|
||||
elif act == "EXPORT":
|
||||
return export_tasks_to_markdown(user_id, filename=filename or "ROADMAP.md", status_filter=status)
|
||||
|
||||
return {"status": "error", "message": f"Неизвестное действие action='{action}'"}
|
||||
Reference in New Issue
Block a user