43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# hub/ticket/application/specialist_assignment_service.py
|
|
|
|
"""Application-сервис назначения специалистов в Ticket."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from domain.task import TicketTask
|
|
from state import TicketStateApi
|
|
|
|
|
|
SPECIALIST_PHOTOS = {
|
|
"Иванов Алексей Сергеевич": "specialist1.png",
|
|
"Петрова Мария Владимировна": "specialist2.png",
|
|
"Сидоров Дмитрий Иванович": "specialist3.png",
|
|
"Козлова Анна Петровна": "specialist4.png",
|
|
"Васильев Сергей Николаевич": "specialist5.png",
|
|
"Николаева Ольга Дмитриевна": "specialist6.png",
|
|
"Фёдоров Андрей Викторович": "specialist7.png",
|
|
"Орлова Екатерина Александровна": "specialist8.png",
|
|
}
|
|
|
|
|
|
class SpecialistAssignmentService:
|
|
"""Команда назначения специалиста поверх канонического state API."""
|
|
|
|
def __init__(self, state: TicketStateApi):
|
|
self._state = state
|
|
|
|
def assign_specialist(self, task_id: int, specialist_name: str):
|
|
"""Назначить специалиста и сохранить фотографию профиля."""
|
|
snapshot = self._state.get_task(task_id)
|
|
if snapshot is None:
|
|
return None
|
|
task_data = TicketTask.from_snapshot(snapshot).to_record()
|
|
task_data["assigned_specialist"] = specialist_name
|
|
task_data["specialist_photo"] = SPECIALIST_PHOTOS.get(specialist_name, "")
|
|
return self._state.update_task(task_data)
|
|
|
|
def list_specialists(self) -> list[str]:
|
|
"""Вернуть канонический список доступных специалистов."""
|
|
return list(SPECIALIST_PHOTOS.keys())
|