Система для управления заявками на ремонт техники в школе с использованием FastAPI.
Система поддерживает три роли пользователей:
-
Администратор:
- Управление пользователями (создание, редактирование, деактивация)
- Доступ ко всем заявкам
- Настройка профилей агентов
-
Агент:
- Обработка заявок (изменение статуса, добавление комментариев)
- Просмотр назначенных ему заявок
-
Пользователь:
- Создание новых заявок
- Просмотр своих заявок и их статусов
- Чтение комментариев от агентов
- Backend: FastAPI, SQLAlchemy, Pydantic, Alembic
- База данных: SQLite (для разработки), PostgreSQL (для продакшена)
- Аутентификация: JWT токены
- Тестирование: Pytest
- Python 3.9+
- pip (менеджер пакетов Python)
- Virtual Environment (опционально, но рекомендуется)
-
Клонируйте репозиторий:
git clone https://github.com/n0pashkov/ticket-system.git cd ticket-system -
Создайте и активируйте виртуальное окружение:
python -m venv venv .\venv\Scripts\activate # для Windows source venv/bin/activate # для Linux/Mac -
Установите зависимости:
pip install -r requirements.txt -
Настройте переменные окружения (или используйте файл .env):
# .env SECRET_KEY=your-secret-key DATABASE_URL=sqlite:///./ticket_system.db ENVIRONMENT=development # для полностью разрешенного доступа (*) ENVIRONMENT=production # для доступа только с доверенных доменов -
Инициализируйте базу данных:
alembic upgrade head python -m app.initial_data -
Запустите приложение:
uvicorn app.main:app --reload
Приложение будет доступно по адресу: http://localhost:8000
API документация доступна по адресу: http://localhost:8000/docs
Для запуска приложения в Docker:
-
Убедитесь, что у вас установлены Docker и Docker Compose
-
Создайте директорию для данных:
mkdir -p data -
Запустите контейнеры:
docker-compose up -d -
Для остановки контейнеров:
docker-compose down
Приложение будет доступно по адресу: http://localhost:8000
POST /api/v1/token- Получение токена доступа
GET /api/v1/users/- Список всех пользователей (только администратор)POST /api/v1/users/- Создание пользователя (только администратор)GET /api/v1/users/me/- Информация о текущем пользователеGET /api/v1/users/{user_id}- Информация о пользователеPUT /api/v1/users/{user_id}- Обновление пользователяDELETE /api/v1/users/{user_id}- Деактивация пользователя (только администратор)
GET /api/v1/tickets/- Список заявок (с фильтрацией по роли)POST /api/v1/tickets/- Создание заявкиGET /api/v1/tickets/{ticket_id}- Просмотр заявкиPUT /api/v1/tickets/{ticket_id}- Обновление заявкиPUT /api/v1/tickets/{ticket_id}/assign/{agent_id}- Назначение заявки агентуPUT /api/v1/tickets/{ticket_id}/status/{status}- Изменение статуса заявки
GET /api/v1/tickets/{ticket_id}/comments/- Список комментариев к заявкеPOST /api/v1/tickets/{ticket_id}/comments/- Добавление комментария к заявкеGET /api/v1/comments/{ticket_id}- Получение комментариев заявкиPOST /api/v1/comments/{ticket_id}- Создание комментария к заявкеDELETE /api/v1/comments/{comment_id}- Удаление комментария
После инициализации базы данных создается первый администратор:
- Username:
admin - Password:
admin
Используйте эти данные для первого входа, а затем измените пароль через API.
Для запуска тестов:
pytest -v
- Обновлены зависимости до последних версий
- Исправлены устаревшие методы Pydantic (заменены dict() на model_dump(), class Config на model_config)
- Обновлены импорты SQLAlchemy в соответствии с последними рекомендациями
- Добавлено поле resolution в модель Ticket
- Все тесты успешно проходят
- Разработка фронтенд-интерфейса
- Добавление системы уведомлений
- Интеграция с системой инвентаризации оборудования
- Расширение аналитических возможностей
В системе настроена поддержка CORS для работы с фронтенд-приложением на разных портах и доменах. Для корректной работы используются следующие настройки:
- Настройка в
config.py- список разрешенных источников - Middleware в
main.pyдля обработки CORS-заголовков - Настройка в
.envфайле через переменную ENVIRONMENT:ENVIRONMENT=development # для полностью разрешенного доступа (*) ENVIRONMENT=production # для доступа только с доверенных доменов
Если вы столкнулись с CORS ошибками:
- Проверьте, что в переменной окружения
ENVIRONMENTустановлено значениеdevelopment - Запустите проверку CORS настроек:
python check_cors.py - Убедитесь, что запросы от вашего домена разрешены
В ходе первой фазы оптимизации были выполнены следующие улучшения:
- ✅ Добавлено структурированное логирование
- ✅ Оптимизированы запросы к базе данных
- ✅ Улучшена обработка ошибок
- ✅ Добавлен пул соединений с базой данных
- ✅ Реализован модуль утилит для стандартных операций
- ✅ Улучшена конфигурация приложения
- ✅ Исправлены проблемы с CORS
В ходе второй фазы оптимизации были добавлены:
-
✅ Кэширование часто запрашиваемых данных
- Кэширование тяжелых статистических запросов
- Автоматическая инвалидация кэша при изменениях
- Настраиваемое время жизни кэша для разных типов данных
-
✅ Асинхронные операции с базой данных
- Отдельные асинхронные маршруты для тяжелых операций
- Неблокирующие соединения с базой данных
- Фоновые задачи для обработки длительных операций
-
✅ Защита от DDoS с помощью Rate Limiting
- Ограничение количества запросов в единицу времени
- Разные лимиты для разных типов запросов
- Прозрачные заголовки с информацией о лимитах
-
✅ Оптимизация базы данных
- Добавлены индексы для ускорения запросов
- Оптимизированы SQL-запросы
- Добавлена миграция индексов
-
✅ Мониторинг и производительность
- Эндпоинт проверки работоспособности
/health - Подробное логирование для отладки
- Отключение избыточной документации в продакшн-режиме
- Эндпоинт проверки работоспособности
В ходе третьей фазы оптимизации были добавлены:
-
✅ Сжатие ответов с помощью gzip
- Снижение объема передаваемых данных
- Настраиваемые параметры сжатия
- Автоматическое определение поддержки сжатия клиентом
-
✅ Расширенный мониторинг системы
- Отслеживание использования CPU, памяти и диска
- API для получения метрик системы
- Информация о состоянии базы данных
-
✅ Автоматическое управление ресурсами
- Запуск и остановка мониторинга при старте/завершении приложения
- Graceful shutdown для корректного освобождения ресурсов
В ходе четвертой фазы оптимизации были добавлены:
-
✅ HTTP-кэширование на стороне клиента
- Добавление заголовков Cache-Control и Expires
- Настраиваемые параметры кэширования для разных типов ресурсов
- Уменьшение количества запросов к серверу
-
✅ Улучшенные API для категорий
- Оптимизированные эндпоинты с поддержкой кэширования
- Логирование действий с категориями
- Улучшенные проверки при создании и обновлении
Для улучшения производительности при большом количестве одновременных запросов были добавлены асинхронные версии эндпоинтов. Для их использования добавьте /async к стандартному пути:
# Синхронный запрос
POST /api/v1/tickets/
# Асинхронный запрос
POST /api/v1/tickets/async
Асинхронные эндпоинты доступны для:
- Создания заявок
- Получения списка заявок
- Получения конкретной заявки
- Обновления заявки
После обновления кода необходимо применить новые индексы к базе данных:
python add_indexes_migration.py
Эта команда автоматически создаст все необходимые индексы для оптимизации запросов.