Giter VIP home page Giter VIP logo

groupassist's Introduction

GroupAssist

Описание

Бекенд переписанный на языке 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 с кэшем и без:

До Before После After

TODO

  • Кэширование GET запросов с TTL.
  • Логика работы с предметами
  • логика работы с очередями
  • Засунуть вебсокеты для realtime отображения очереди клиенту.
  • Добавить пользователей, JWT-токены, разделение пользователей на роли админ, модератор, пользователь.
  • Авторизация и аутентификация. Разделение доступа к функциям по пользовательским ролям.
  • Rate limiting
  • Опросы
  • Посещаемость, журнал

groupassist's People

Contributors

psevdocoder avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.