Бекенд переписанный на языке Go когда-то реализованного мною RESTFul-приложения GroupAssistant.
Приложение для автоматизации создания очередей для сдачи работ, фиксирования посещаемости студентов, создания опросов внутри группы.
API Handlers
- [GET] /ping/ - Проверка доступности сервера.
- [GET] /swagger/*any - Отображение Swagger документации.
- [POST] /api/auth/sign-up - Регистрация пользователя с указанием логина, пароля и токена регистрации.
- [POST] /api/auth/jwt/create - Создание JWT токена для аутентификации.
- [POST] /api/auth/jwt/refresh - Обновление JWT токена.
- [GET] /api/subjects/ - Получение списка всех предметов.
- [GET] /api/subjects/:id - Получение предмета по его идентификатору.
- [POST] /api/subjects/ - Создание нового предмета.
- [DELETE] /api/subjects/:id - Удаление предмета по его идентификатору.
- [PUT] /api/subjects/:id - Обновление информации о предмете.
- [GET] /api/queues/by_subject/:id - Получение всех очередей по идентификатору предмета.
- [GET] /api/queues/:id - Получение очереди по ее идентификатору.
- [POST] /api/queues/ - Создание новой очереди.
- [DELETE] /api/queues/:id - Удаление очереди по ее идентификатору.
- [PATCH] /api/queues/:id - Обновление информации о очереди.
- [POST] /api/queues/join - Присоединение к очереди.
- [DELETE] /api/queues/leave:id - Покидание очереди.
- [GET] /api/users/ - Получение списка пользователей.
- [POST] /api/users/ - Создание нового пользователя.
- [DELETE] /api/users/:id - Удаление пользователя по его идентификатору.
- [PUT] /api/users/:id - Обновление информации о пользователе.
- Структура проекта следует чистой архитектуре.
- Используется SQLX + Gin + InMemoryCache.
- InMemoryCache имплементирован как Gin-Middleware для кэширования GET запросов.
InMemoryCache - собственная реализация кэша в памяти для хранения записей в паре ключ-значение с TTL. После проведения нагрузочного тестирования выяснилось, что кэш позволяет повысить RPS с 500 до 1000-1100 при GET запросах на один и тот же эндпоинт.
Сравнение RPS с кэшем и без:
- Кэширование GET запросов с TTL.
- Логика работы с предметами
- логика работы с очередями
- Засунуть вебсокеты для realtime отображения очереди клиенту.
- Добавить пользователей, JWT-токены, разделение пользователей на роли админ, модератор, пользователь.
- Авторизация и аутентификация. Разделение доступа к функциям по пользовательским ролям.
- Rate limiting
- Опросы
- Посещаемость, журнал