862e6b7b25
Co-authored-by: Cursor <cursoragent@cursor.com>
47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
import random
|
|
from datetime import datetime, timezone
|
|
|
|
from app.data.mock_data import seed_appeals
|
|
from app.models import Appeal, CreateAppealRequest
|
|
|
|
PRIORITY_MAP = {
|
|
"Критический": ("critical", "Критический"),
|
|
"Высокий": ("high", "Высокий"),
|
|
"Средний": ("medium", "Средний"),
|
|
"Низкий": ("low", "Низкий"),
|
|
}
|
|
|
|
|
|
class AppealStore:
|
|
def __init__(self) -> None:
|
|
self._appeals: list[Appeal] = seed_appeals()
|
|
|
|
def list_all(self) -> list[Appeal]:
|
|
return sorted(self._appeals, key=lambda a: a.updated_at, reverse=True)
|
|
|
|
def create(self, request: CreateAppealRequest) -> Appeal:
|
|
priority_key, priority_label = PRIORITY_MAP.get(request.priority, ("medium", "Средний"))
|
|
now = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S")
|
|
number = f"INC-2026-{random.randint(1000, 9999)}"
|
|
|
|
appeal = Appeal(
|
|
id=f"new-{int(datetime.now(timezone.utc).timestamp() * 1000)}",
|
|
number=number,
|
|
title=request.title,
|
|
system=request.system,
|
|
status="new",
|
|
status_label="Новое обращение",
|
|
next_step="Обращение в очереди на назначение исполнителя",
|
|
priority=priority_key, # type: ignore[arg-type]
|
|
priority_label=priority_label,
|
|
created_at=now,
|
|
updated_at=now,
|
|
description=request.description,
|
|
comments=[],
|
|
)
|
|
self._appeals.insert(0, appeal)
|
|
return appeal
|
|
|
|
|
|
appeal_store = AppealStore()
|