Skip to content

JustChelUser/TODO_BACKEND

Repository files navigation

Backend todo-листа

Описание

Приложение представляет собой backend todo-листа. Изначально было разработано как приложение на монолитной архитектуре, а затем было переработано по принципу микросервисной архитектуры. Ссылка на этот же проект в состоянии монолита - click

Возможности пользователя

Пользователю доступно создание: проектов, списков задач, задач. В рамках проекта находятся списки задач, а в рамках списков задач соответственно задачи.
Списки задач имеют порядок и их можно менять местами в рамках проекта. Задачи также можно менять местами и в том числе можно задачу перебрасывать в другой список задач в рамках одного пользователя.
Для пользователей, проектов, списков задач, задач был реализован полный набор CRUD-операций.

Технологии

  • Nest.js — фреймворк для создания бэкенд-приложений на Node.js. Микросервисы написаны на нём.
  • PostgreSQL — каждый микросервис имеет свою базу данных PostgreSQL.
  • pgAdmin — приложение для администрирования баз данных PostgreSQL.
  • Docker — приложение для контейнеризации приложения. Все части проекта "поднимаются" в докере.
  • RabbitMQ — брокер сообщений для взаимодействия между микросервисами.
  • Nginx — сервер для маршрутизации запросов к микросервисам.
  • Redis — база данных хранящая в себе кэшированные данные.

Установка и настройка

  1. Клонируйте репозиторий:
    git clone https://github.com/JustChelUser/TODO_BACKEND.git
    
  2. Сборка и запуск :
    docker compose up -d
    
  3. Адреса доступа:
  4. После успешного запуска все сервисы будут работать в контейнерах.
  5. В случае внесения изменений может потребоваться пересобрать docker контейнеры без кэша.
    • Остановите и удалите контейнеры используя
      docker compose down
      
    • Пересоберите контейнеры с нуля без кэша используя
      docker compose build --no-cache
      
    • Запустите контейнеры используя
      docker compose up -d
      

Микросервисное взаимодействие

Сервис для работы с пользователями (auth-service):

  • Этот сервис содержит в себе консьюмера для прослушивания очереди main_to_user_queue. Сервис с основной логикой используя RPC-соединение реализованное при помощи RabbitMQ посылает данные пользователя для проверки. Данный сервис получив email пользователя ищет его в своей базе данных и посылает объект пользователя назад.
  • Также этот сервис содержит в себе продюсера для отправки данных в очередь user_to_main_queue. При удалении пользователя в сервис основной логики посылается его id для последующего удаления его объектов. В данном случае сообщение отправляется без ожидания обратной связи. Взаимодействие происходит в стиле EventBased.

Сервис основной логики (main-service):

  • Этот сервис содержит в себе продюсера для очереди main_to_user_queue. Сервис отправляет email в очередь используя RPC-соединение для получения данных о пользователе и проверки корректности полученного email.
  • Также этот сервис содержит в себе консьюмера для получения данных из очереди user_to_main_queue. Данные содержат в себе id удалённого пользователя и нужны для удаления всех его объектов хранящихся в базе данных этого сервиса.

Управление пользователями

Помимо открытой регистрации и авторизации есть возможность управления пользователями. Пользователями может управлять только администратор. Добавление администратора сделано в текущем проекте в упрощённом виде. Чтобы сделать пользователя администратором необходимо в таблице users изменить значение поля is_admin на true. После этого этот пользователь сможет других пользователей назначать администраторами используя PUT-запрос. Например запрос для изменения данных пользователя с id равным 3 - http://localhost:3000/users/3. Пример посылаемых при этом JSON-данных:

{
    "email": "testUser@mail.ru",
    "password":"1111",
    "is_admin":true
}

Поле is_admin при этом является опциональным и может не использоваться при отправлении запроса. Для работы с таблицами базы данных можно использовать pgAdmin который входит в состав проекта.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published