v1.8.3: добавлены docstrings и комментарии по AGENTS.md ко всем ключевым файлам

This commit is contained in:
2026-06-02 18:53:21 +03:00
parent 4c3026a80f
commit a7a39bdd5d
19 changed files with 212 additions and 0 deletions
+9
View File
@@ -1,3 +1,12 @@
"""
Конфигурация service portal (Pydantic Settings).
Читает из .env:
- DATABASE_URL: PostgreSQL URL
- SECRET_KEY: ключ сессий
- SESSION_TTL: время жизни сессии (сек)
- DOCS_DIR/UPLOADS_DIR: пути к документам
"""
import os
from pathlib import Path
from pydantic_settings import BaseSettings
+10
View File
@@ -1,3 +1,13 @@
"""
Главный модуль service portal FastAPI-приложения.
Портал для управления:
- Сотрудниками (owner/engineer/technician)
- Клиентами и объектами
- Задачами и инцидентами
- Настройками бота и базой знаний
- Документами и отчётами
"""
import os
import asyncio
from contextlib import asynccontextmanager
+10
View File
@@ -1,3 +1,13 @@
"""
ORM-модели для service portal (SQLAlchemy 2.0).
Основные таблицы:
- users: сотрудники (owner/engineer/technician)
- customers: клиенты
- objects: объекты обслуживания
- tasks/ incidents: задачи и инциденты
- blog/cases/ideas: контент
"""
from datetime import datetime
from sqlalchemy import (
Column, Integer, String, Boolean, Text, DateTime, Numeric, Date, BigInteger, SmallInteger, JSON, ForeignKey, CheckConstraint
+3
View File
@@ -1293,6 +1293,7 @@ BOT_SERVICE_URL = "http://127.0.0.1:8002"
async def _proxy(method: str, path: str, body=None):
"""Прокси запросов от service portal к max_bot API."""
async with httpx.AsyncClient() as client:
if body is not None:
resp = await client.request(method, f"{BOT_SERVICE_URL}{path}", json=body)
@@ -1431,11 +1432,13 @@ async def proxy_bot_conversation_logs(conv_id: int, user: dict = Depends(get_cur
@router.delete("/api/bot/conversations/{conv_id}")
async def proxy_delete_conversation(conv_id: int, request: Request, user: dict = Depends(require_role("owner"))):
"""Удаление диалога (каскадно: сообщения + логи). Доступно только owner."""
return await _proxy("DELETE", f"/api/bot/conversations/{conv_id}")
@router.delete("/api/bot/users/{user_id}")
async def proxy_delete_bot_user(user_id: int, request: Request, user: dict = Depends(require_role("owner"))):
"""Удаление пользователя бота (каскадно: диалоги + сообщения + логи). Заявки остаются. Доступно только owner."""
return await _proxy("DELETE", f"/api/bot/users/{user_id}")