Skip to content

nshib00/techsupport-app

Repository files navigation

TechSupport API

API системы обращения в техническую поддержку.

📚 Содержание

📌 Возможности

👤 Пользовательская часть

  • Регистрация по email/паролю
  • Вход в систему по логину/паролю
  • Восстановление пароля
  • Создание обращения:
    • Тема, категория, описание
    • Прикрепление файлов (скриншоты, логи и т.д.)
  • Просмотр и фильтрация заявок по статусу
  • Комментирование заявок, просмотр комментариев к заявке
  • Уведомления:
    • Email-уведомления о смене статуса заявки
    • Внутрисистемные уведомления (через WebSocket):
      • Уведомление о назначении сотрудника на созданное обращение
      • Уведомление о появлении нового комментария на созданном обращении
    • Просмотр уведомлений пользователем
    • Возможность отвечать уведомления как прочитанные

🛠 Административная панель

Для поддержки:

  • Просмотр всех обращений
  • Назначение ответственного сотрудника
  • Изменение статуса заявки
  • Уведомления о новых обращениях
  • Создание "внутренних" комментариев, которые видны только сотрудникам поддержки

Для администраторов:

  • Управление категориями обращений (создание, обновление, удаление)
  • Просмотр истории обращений с фильтрацией по конкретному обращению, сотруднику поддержки, виду и дате изменения.
  • Изменение роли пользователей (обычный пользователь/сотрудник поддержки)

🛡️ Безопасность

  • Ролевая модель доступа (пользователь, сотрудник поддержки, администратор)
  • Использование только ORM-запросов, без сырого SQL
  • Валидация в сериализаторах (очистка от небезопасных html-тегов) для защиты от XSS
  • Хэширование паролей
  • Ограничения по типу, количеству и размеру файлов при создании вложений к обращениям

⚡Производительность

  • Кэширование через Redis
  • Асинхронная обработка фоновых задач через Celery
  • В продакшн-среде подключается PgBouncer для переиспользования пула соединений с БД

⚙️ Технологии и инструменты

  • Python (Django + Django REST Framework)
  • PostgreSQL
  • Redis
  • Docker + Docker Compose
  • Nginx
  • Хранение файлов: локальное хранилище

📦 Используемые зависимости

  • Django — основа проекта, веб-фреймворк.
  • Django REST Framework — создание API на Django.
  • Poetry — управление зависимостями.
  • Django Channels — поддержка WebSocket и асинхронных задач.
  • channels-redis — Redis для работы Django Channels.
  • Celery — выполнение фоновых задач.
  • django-redis — кэш и очереди через Redis.
  • Uvicorn — ASGI-сервер для запуска проекта (ASGI-сервер необходим для работы с Django Channels)
  • psycopg2 — подключение к базе данных PostgreSQL.
  • python-dotenv — загрузка настроек из .env файла.
  • Djoser — регистрация, логин, восстановление пароля.
  • drf-spectacular — автогенерация документации API.
  • djangorestframework-simplejwt — JWT-аутентификация.
  • django-cors-headers — поддержка CORS-заголовков.
  • django-filter — фильтрация данных в API.
  • filetype — определение типа файлов.
  • nh3 — очистка HTML от опасного кода (защита от XSS).
  • websockets — работа с WebSocket-соединениями.
  • pytest — библиотека для тестирования.
  • pytest-django, pytest-asyncio, pytest-mock — плагины Pytest.
  • locust - инструмент для нагрузочного тестирования.

📑 Документация API

Swagger UI

Доступен по URL: /api/v1/schema/swagger-ui

Краткая демонстрация: (если gif-файл не появился, он загружается, подождите несколько секунд)

techsupport_api

Руководство пользователя

Методы API подробно описаны в руководстве пользователя.

🗂 Структура проекта

Приложения:

  • techsupport - конфигурация проекта
  • users - аутентификация и пользователи
  • tickets - обращения, категории, комментарии
  • custom_admin - админ-панель.
  • notifications - уведомления и WebSocket
  • api - объединение всех эндпоинтов, настройка OpenAPI-документации

Прочее:

  • tests/ - unit-тесты
  • docker/ - скрипт инициализации Docker Compose, настройка Nginx
  • media/ - хранение файлов (вложения к обращениям)

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

Через Docker

git clone https://github.com/nshib00/techsupport-app.git
cd techsupport
docker-compose up -d --build

Создание суперпользователя:

docker-compose exec web python manage.py createsuperuser


Локально (виртуальное окружение Poetry)

Установка:

git clone https://github.com/nshib00/techsupport-app.git
pip install poetry
poetry install --no-root

Запуск виртуального окружения:

Выполните скрипт из корня проекта:

Unix: scripts/activate-poetry.sh

Windows: scripts/activate-poetry.ps1

Или:

poetry env activate
<выполнение команды, которую выдаст poetry env activate>

Запуск проекта:

Uvicorn: uvicorn techsupport.asgi:application --host 127.0.0.1 --port 9000

Для перезагрузки сервера при изменении в коде добавьте аргумент --reload.

Вместо 9000 может быть любой другой порт.

Redis: redis-cli

Redis должен быть уже установлен.

Celery:

Unix:

celery -A techsupport worker --loglevel=info

Windows:

celery -A techsupport worker --loglevel=info --pool=solo

Запуск тестов:

Unit-тесты (Pytest):

Запустите в корне проекта команду:

pytest -v

Нагрузочное тестирование (Locust)

Из корня проекта:

locust -f tests/locust/locustfile.py

В браузере запустится интерфейс Locust на порту 8089.

About

Technical support ticketing system API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages