API системы обращения в техническую поддержку.
- 📌 Возможности
- 🛡️ Безопасность
- ⚡ Производительность
- ⚙️ Технологии и инструменты
- 📑 Документация API
- 🗂 Структура проекта
- 🚀 Установка и запуск проекта
- Регистрация по email/паролю
- Вход в систему по логину/паролю
- Восстановление пароля
- Создание обращения:
- Тема, категория, описание
- Прикрепление файлов (скриншоты, логи и т.д.)
- Просмотр и фильтрация заявок по статусу
- Комментирование заявок, просмотр комментариев к заявке
- Уведомления:
- Email-уведомления о смене статуса заявки
- Внутрисистемные уведомления (через WebSocket):
- Уведомление о назначении сотрудника на созданное обращение
- Уведомление о появлении нового комментария на созданном обращении
- Просмотр уведомлений пользователем
- Возможность отвечать уведомления как прочитанные
- Просмотр всех обращений
- Назначение ответственного сотрудника
- Изменение статуса заявки
- Уведомления о новых обращениях
- Создание "внутренних" комментариев, которые видны только сотрудникам поддержки
- Управление категориями обращений (создание, обновление, удаление)
- Просмотр истории обращений с фильтрацией по конкретному обращению, сотруднику поддержки, виду и дате изменения.
- Изменение роли пользователей (обычный пользователь/сотрудник поддержки)
- Ролевая модель доступа (пользователь, сотрудник поддержки, администратор)
- Использование только ORM-запросов, без сырого SQL
- Валидация в сериализаторах (очистка от небезопасных html-тегов) для защиты от XSS
- Хэширование паролей
- Ограничения по типу, количеству и размеру файлов при создании вложений к обращениям
- Кэширование через Redis
- Асинхронная обработка фоновых задач через Celery
- В продакшн-среде подключается PgBouncer для переиспользования пула соединений с БД
Python(Django+Django REST Framework)PostgreSQLRedisDocker+Docker ComposeNginx- Хранение файлов: локальное хранилище
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- инструмент для нагрузочного тестирования.
Доступен по URL: /api/v1/schema/swagger-ui
Краткая демонстрация: (если gif-файл не появился, он загружается, подождите несколько секунд)
Методы API подробно описаны в руководстве пользователя.
techsupport- конфигурация проектаusers- аутентификация и пользователиtickets- обращения, категории, комментарииcustom_admin- админ-панель.notifications- уведомления и WebSocketapi- объединение всех эндпоинтов, настройка OpenAPI-документации
tests/- unit-тестыdocker/- скрипт инициализации Docker Compose, настройка Nginxmedia/- хранение файлов (вложения к обращениям)
git clone https://github.com/nshib00/techsupport-app.git
cd techsupport
docker-compose up -d --build
Создание суперпользователя:
docker-compose exec web python manage.py createsuperuser
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
Запустите в корне проекта команду:
pytest -v
Из корня проекта:
locust -f tests/locust/locustfile.py
В браузере запустится интерфейс Locust на порту 8089.
