Skip to content

n0pashkov/ticket-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Система заявок на ремонт техники

Система для управления заявками на ремонт техники в школе с использованием FastAPI.

Функциональность

Система поддерживает три роли пользователей:

  1. Администратор:

    • Управление пользователями (создание, редактирование, деактивация)
    • Доступ ко всем заявкам
    • Настройка профилей агентов
  2. Агент:

    • Обработка заявок (изменение статуса, добавление комментариев)
    • Просмотр назначенных ему заявок
  3. Пользователь:

    • Создание новых заявок
    • Просмотр своих заявок и их статусов
    • Чтение комментариев от агентов

Технический стек

  • Backend: FastAPI, SQLAlchemy, Pydantic, Alembic
  • База данных: SQLite (для разработки), PostgreSQL (для продакшена)
  • Аутентификация: JWT токены
  • Тестирование: Pytest

Установка и запуск

Предварительные требования

  • Python 3.9+
  • pip (менеджер пакетов Python)
  • Virtual Environment (опционально, но рекомендуется)

Шаги по установке

  1. Клонируйте репозиторий:

    git clone https://github.com/n0pashkov/ticket-system.git
    cd ticket-system
    
  2. Создайте и активируйте виртуальное окружение:

    python -m venv venv
    .\venv\Scripts\activate  # для Windows
    source venv/bin/activate  # для Linux/Mac
    
  3. Установите зависимости:

    pip install -r requirements.txt
    
  4. Настройте переменные окружения (или используйте файл .env):

    # .env
    SECRET_KEY=your-secret-key
    DATABASE_URL=sqlite:///./ticket_system.db
    ENVIRONMENT=development # для полностью разрешенного доступа (*)
    ENVIRONMENT=production  # для доступа только с доверенных доменов
    
  5. Инициализируйте базу данных:

    alembic upgrade head
    python -m app.initial_data
    
  6. Запустите приложение:

    uvicorn app.main:app --reload
    

Приложение будет доступно по адресу: http://localhost:8000

API документация доступна по адресу: http://localhost:8000/docs

Запуск с использованием Docker

Для запуска приложения в Docker:

  1. Убедитесь, что у вас установлены Docker и Docker Compose

  2. Создайте директорию для данных:

    mkdir -p data
    
  3. Запустите контейнеры:

    docker-compose up -d
    
  4. Для остановки контейнеров:

    docker-compose down
    

Приложение будет доступно по адресу: http://localhost:8000

API Endpoints

Аутентификация

  • 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 настройка

В системе настроена поддержка CORS для работы с фронтенд-приложением на разных портах и доменах. Для корректной работы используются следующие настройки:

  1. Настройка в config.py - список разрешенных источников
  2. Middleware в main.py для обработки CORS-заголовков
  3. Настройка в .env файле через переменную ENVIRONMENT:
    ENVIRONMENT=development # для полностью разрешенного доступа (*)
    ENVIRONMENT=production  # для доступа только с доверенных доменов
    

Если вы столкнулись с CORS ошибками:

  1. Проверьте, что в переменной окружения ENVIRONMENT установлено значение development
  2. Запустите проверку CORS настроек: python check_cors.py
  3. Убедитесь, что запросы от вашего домена разрешены

Оптимизации бэкенда

В ходе первой фазы оптимизации были выполнены следующие улучшения:

  1. ✅ Добавлено структурированное логирование
  2. ✅ Оптимизированы запросы к базе данных
  3. ✅ Улучшена обработка ошибок
  4. ✅ Добавлен пул соединений с базой данных
  5. ✅ Реализован модуль утилит для стандартных операций
  6. ✅ Улучшена конфигурация приложения
  7. ✅ Исправлены проблемы с CORS

В ходе второй фазы оптимизации были добавлены:

  1. ✅ Кэширование часто запрашиваемых данных

    • Кэширование тяжелых статистических запросов
    • Автоматическая инвалидация кэша при изменениях
    • Настраиваемое время жизни кэша для разных типов данных
  2. ✅ Асинхронные операции с базой данных

    • Отдельные асинхронные маршруты для тяжелых операций
    • Неблокирующие соединения с базой данных
    • Фоновые задачи для обработки длительных операций
  3. ✅ Защита от DDoS с помощью Rate Limiting

    • Ограничение количества запросов в единицу времени
    • Разные лимиты для разных типов запросов
    • Прозрачные заголовки с информацией о лимитах
  4. ✅ Оптимизация базы данных

    • Добавлены индексы для ускорения запросов
    • Оптимизированы SQL-запросы
    • Добавлена миграция индексов
  5. ✅ Мониторинг и производительность

    • Эндпоинт проверки работоспособности /health
    • Подробное логирование для отладки
    • Отключение избыточной документации в продакшн-режиме

В ходе третьей фазы оптимизации были добавлены:

  1. ✅ Сжатие ответов с помощью gzip

    • Снижение объема передаваемых данных
    • Настраиваемые параметры сжатия
    • Автоматическое определение поддержки сжатия клиентом
  2. ✅ Расширенный мониторинг системы

    • Отслеживание использования CPU, памяти и диска
    • API для получения метрик системы
    • Информация о состоянии базы данных
  3. ✅ Автоматическое управление ресурсами

    • Запуск и остановка мониторинга при старте/завершении приложения
    • Graceful shutdown для корректного освобождения ресурсов

В ходе четвертой фазы оптимизации были добавлены:

  1. ✅ HTTP-кэширование на стороне клиента

    • Добавление заголовков Cache-Control и Expires
    • Настраиваемые параметры кэширования для разных типов ресурсов
    • Уменьшение количества запросов к серверу
  2. ✅ Улучшенные API для категорий

    • Оптимизированные эндпоинты с поддержкой кэширования
    • Логирование действий с категориями
    • Улучшенные проверки при создании и обновлении

Использование асинхронных эндпоинтов

Для улучшения производительности при большом количестве одновременных запросов были добавлены асинхронные версии эндпоинтов. Для их использования добавьте /async к стандартному пути:

# Синхронный запрос
POST /api/v1/tickets/

# Асинхронный запрос 
POST /api/v1/tickets/async

Асинхронные эндпоинты доступны для:

  • Создания заявок
  • Получения списка заявок
  • Получения конкретной заявки
  • Обновления заявки

Применение индексов к базе данных

После обновления кода необходимо применить новые индексы к базе данных:

python add_indexes_migration.py

Эта команда автоматически создаст все необходимые индексы для оптимизации запросов.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors