Skip to content

An online store project that implements JWT strategies, Roles guards, loading, deleting, viewing and downloading AutoCad files, excel files and pdf files.

License

Notifications You must be signed in to change notification settings

pestsov-v/nest-e-commerce-shop

Repository files navigation

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.

About

An online store project that implements JWT strategies, Roles guards, loading, deleting, viewing and downloading AutoCad files, excel files and pdf files.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages