Skip to content

Latest commit

 

History

History
159 lines (120 loc) · 13.4 KB

README.md

File metadata and controls

159 lines (120 loc) · 13.4 KB

Nest Logo

Краткое описание

Проект сделан на основе стэка: Nest.js, PostgreSQL, Docker, RedisStore, CacheManager

Простой интернет-магазин со следующими функциями:

  • Авторизация с помощью JWT token, а именно, Access token и refresh token.
  • Наличие различных ролей для пользователей: User, Manager, Moderator, Admin.
  • Функционал пользователей:
    • Стандартный CRUD.
    • Активация и деактивация пользователей (если пользователь хочет удалить аккаунт, то пользователь меняет статус аккаунта на false, тем самым лишь деактивирует аккаунт, удалить аккаунт может только Admin)
    • Назначение ролей.
    • Отдельные получения списков всех пользователей, только users, только moderators, только managers, только admin.
  • Сессия пользователя, которая базируется на Redis. Таким образом некоторые данные пользователя можно достать из JWT, а некоторые данные из сессии.
  • Кэширование данных с помощью RedisStore и CacheManager.
  • Загрузка и удаление данных в формате PDF, DWG (чертежи AutoCAD) и Excel. Также доступна функция загрузки одновременно всех форматов.
  • CRUD операции продуктов.
  • CRUD операции итемов - единица продукта, которая добавляется в корзину пользователя (итем состоит из самого продукта и его количества, которое пользователь намерен купить)
  • CRUD операции ссылок - единица по которой находится один заказ пользователя. Пользователь может иметь несколько заказов и иметь к ним дсотуп в любое время, таким образом формируя историю.
  • CRUD операции заказов - сформированый заказ, который может быть оплачен.
  • Swagger документация ряда элементов.

Запуск приложения

Приложение можно запустить с помощью 3 различных видов:

  • Перейти по ссылке на Heroku и подёргать за эндпоинты.
  • Перейти по ссылке Git Actions и развернуть docker-compose e

Оглавление

Архитектура проекта

image.png

Где:

  • dist - финальная сборка проекта с js и d.ts файлами.
  • objects - статические папки в которых хранятся чертежи и спецификации по проектам.
  • public - статические файлы в которых хранятся фотографии пользователей.
  • src - серверный код программы.
    • configs - конфигурации по подключениям к базам данных или внешним API.
    • core - модули, функции, декораторы и так далее, которые используются по всему проекту.
    • modules - отдельные модули, которые словно кирпичики создают само приложение.
      • auth - модуль авторизации. Базируется на entity пользователей.
      • files - модуль работы с различными файлами, будто чертежи, эксель файлы или фото.
      • item - основная единица заказа, которая состоит из продукта (модуль продуктов) и его количества.
      • link - модуль ссылок, который определяет доступ к заказам пользователя.
      • order - модуль заказов.
      • product - модуль продуктов
      • session - модуль сессий, мог бы быть в папке core, вопрос не принципиальный.
      • user - модуль пользователей.

Белой нитью сквозь проект проходят такие понятия как:

  • декоратор ролей: в зависимости от роли пользователя он может получить доступ к различным ресурсам.
  • JWT стратегии: идентификация пользователя на пути ко всем маршрутам.
  • Перехватчики или Interceptors - то, что отвечает за обработку кэширования или загрузки файлов.
  • Собственно само кеширование: представлено Redis - CacheManager
  • Swagger декораторы, для автоматического формирования API документации.
  • Валидация data transfer object and etc.

Модули приложения

Здесь описываются основные модули приложения, поскольку они описывают реализацию основных механизмов.

Модуль авторизации

Auth-Module.png

Где:

  • dto - типизация данных, которые приходят в те или иные маршруты. Под каждый маршрут, где сервер принимает данные есть свой dto.
  • response - типизация ответов, которые сервер отдаёт на клиент. Ситуация с маршрутами аналогична dto.
  • startegy - каждый тип авторизации является отдельно стратегией - условной дорожной картой, по которому пользователя тащат, чтобы он авторизовался.
  • type - созданные типы для использования в различных методах сервиса авторизации.

Модуль авторизации обеспечивает маршруты регистрации, логирования, разлогирования, а также обновления JWT токенов.

Модуль файлов

File-Module.png

Структура данных аналогична модулю авторизации.
Модуль файлов позволяет пользователям загружать файлы по проектам, удалять их, а также их просматривать и скачивать. Отдельно модуль файлов обеспечивает загрузку фотографий профилей пользователя.

Модуль айтемов

item-Module.png

Структура данных аналогична модулю авторизации.
Модуль айтемов являет собой боевую единицу в заказе. Поскольку PostgreSQL является таблице ориентированной базой данной, следовательно не поддерживает вложенность файлом поэтому для структур, где требуется вложенность - необходима отдельная таблица, которая завязывается на связях.

Стратегия создания единицы заказа следующая: есть товар (модуль продуктов), который при добавлении в заказ, добавляется не в заказ, а в таблицу айтемов, где каждый айтем являет собой ID продукта и количество таких IDшников - amount. Когда пользователь добавляет товар - программа сверяет - если такой товар есть, то в amount + 1, если товара нет - добавляется соответствующий АйДишник товара. Удаление продуктов работает ровно на оборот. Удаление можно также организовать через получение всех итемов и после этого с помощью метода Filter отфильтровать нужные итемы.

Модуль ссылок

link-Module.png

Структура данных аналогична модулю авторизации.
Модуль ссылок необходим, чтобы вывести данные об итемах, по сути являет собою стандартную корзину, но с одной фичей - наличивает ссылку на корзину. Эта ссылка необходима, чтобы подтверждать заказ, отправлять ссылку на заказ на почту и многое другое.

Модуль заказов

order-Module.png

Структура данных аналогична модулю авторизации.
Модуль заказа в себе определяет - пользователя, который достаётся из сессии пользователя, списка итемов по ссылке и адрес доставки Весь список заказов в зависимости от роли пользователя может получить как сам пользователь - из его сессии, так и список всех заказов по ID пользователя - если ищет пользователь с ролью администратора или модератора.

Модуль продуктов

product-Module.png

Непосредственно сам модуль продуктов, может являть собой различную иерархию по категориям, критериям и прочее, но является намеренно упрощенной версией, поскольку мне уже известно как это реализовать на других проектах. Здесь лишь реализованы такие вещи, как пагинация, сортировка и другие элементы работы с массивом продуктов.

Модуль пользователей

user-Module.png

Обширный модуль, который в себя впитал всю работу с пользователями:

  • получение всех пользователей.
  • одного пользователя.
  • редактирования профиля пользователя.
  • деактивация и реактивация пользователя.
  • непосредственно удаление аккаунта пользователя, которая возможна лишь админу.
  • получение списка пользователей по их ролям.
  • смена роли пользователя администратором (по умолчанию все пользователи - user).

License

Nest is MIT licensed.