"""Онлайн-диагностика — AI задаёт вопросы, мастер подтверждает""" from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession import uuid from ...core.database import async_session_factory, Diagnosis, Project from pydantic import BaseModel router = APIRouter() class CreateDiagnosisRequest(BaseModel): project_id: uuid.UUID problem_description: str photos: list[str] = [] @router.post("/") async def create_diagnosis(req: CreateDiagnosisRequest, session: AsyncSession = Depends(async_session_factory), user=Depends(get_current_user)): """Создать диагностику проблемы.""" project = await session.get(Project, req.project_id) if not project or project.client_id != user.id: raise HTTPException(403) diagnosis = Diagnosis( project_id=req.project_id, problem_description=req.problem_description, photos=req.photos, ai_questions=["Какой тип крана?", "Как давно течёт?"], # AI генерирует динамически ) session.add(diagnosis) await session.commit() return {"id": str(diagnosis.id), "ai_questions": diagnosis.ai_questions} @router.post("/{diagnosis_id}/answer") async def answer_diagnosis(diagnosis_id: uuid.UUID, answers: dict, session: AsyncSession = Depends(async_session_factory)): """Ответить на вопросы диагностики.""" diagnosis = await session.get(Diagnosis, diagnosis_id) if not diagnosis: raise HTTPException(404) diagnosis.client_answers = answers # AI генерирует результат diagnosis.diagnosis_result = "Замена картриджа однорычажного крана. Стоимость ~1500₽." await session.commit() return {"diagnosis_result": diagnosis.diagnosis_result} @router.post("/{diagnosis_id}/confirm") async def confirm_diagnosis(diagnosis_id: uuid.UUID, master_confirmation: str, session: AsyncSession = Depends(async_session_factory)): """Мастер подтверждает диагностику.""" diagnosis = await session.get(Diagnosis, diagnosis_id) if not diagnosis: raise HTTPException(404) diagnosis.master_confirmation = master_confirmation await session.commit() @router.get("/project/{project_id}") async def get_project_diagnosis(project_id: uuid.UUID, session: AsyncSession = Depends(async_session_factory)): """Получить диагностику проекта.""" result = await session.execute(select(Diagnosis).where(Diagnosis.project_id == project_id)) diagnosis = result.scalar_one_or_none() return diagnosis.mapped() if diagnosis else None from sqlalchemy import select