Skip to content

Оптимизированный сервис управления заказами для ускоренной сборки товаров на складе интернет-магазина.

Notifications You must be signed in to change notification settings

AlexandrTomashevich/ShopOrders

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ShopOrders

Это простой сервис запросов из БД интернет магазинна написанный на Go, для получения краткой информации по заказам сгруппированные по стеллажам для удобной и быстрой сборки заказов на складе.

Описание Проекта

В основном в проекте вся реализация заключается в грамотном создании базы данных которая предусматривает все необходимые сценарии запросовв и имеет продуманную архитектуру таблиц и связей.

  name DB: internet_shop
  dialect: PostgreSQL
  Host name: localhost
  Port: 5432
  scheme: public

Таблица "products" - Содержит данные о товарах в магазине:

  • id (serial) - Уникальный идентификатор товара.
  • category_id (integer) - Ссылка на категорию товара из "products_category".
  • name (varchar) - Название товара.
  • quantity (integer) - Количество товара в наличии.
  • price (numeric) - Цена товара.

Таблица "products_category" - Содержит данные о категориях товаров:

  • id (serial) - Уникальный идентификатор категории.
  • shelf_id (integer) - Ссылка на идентификатор стеллажа, где находится данная категория товаров.
  • name (varchar) - Название категории.

Таблица "orders" - Содержит данные о заказах:

  • id (serial) - Уникальный идентификатор заказа.
  • user_id (integer) - Ссылка на пользователя, сделавшего заказ, из "users".
  • status_id (integer) - Ссылка на статус заказа из "order_status".
  • creation_date (timestamp) - Дата и время создания заказа.
  • shelf_ids (varchar) - Название стеллажа (или стеллажей) из таблицы "shelves", где находится товар из заказа.

Таблица "order2products" - Содержит связи между заказами и товарами:

  • order_id (integer) - Ссылка на заказ из "orders".
  • product_id (integer) - Ссылка на товар из "products".
  • count (integer) - Количество конкретного товара в заказе.

Таблица "order_status" - Содержит данные о статусах заказов:

  • id (serial) - Уникальный идентификатор статуса.
  • sort_index (integer) - Порядок статусов (можно оставить равным id).
  • code (varchar) - Идентификатор статуса (например, "NEW", "PACKED", "DELIVERED", "PAYED", "CANCELLED").
  • name (varchar) - Название статуса.

Таблица "order_status_change" - Содержит историю изменений статусов заказов:

  • id (integer) - Уникальный идентификатор записи.
  • order_id (integer) - Ссылка на заказ из "orders".
  • time (timestamp) - Время и дата изменения статуса заказа.
  • src_status_id (integer) - Исходный статус заказа из "order_status".
  • dst_status_id (integer) - Статус назначения заказа из "order_status".

Таблица "users" - Содержит данные о пользователях интернет-магазина:

  • id (integer) - Уникальный идентификатор пользователя.
  • name (varchar) - Имя пользователя.
  • contact_info (varchar) - Почта или номер телефона пользователя.
  • password (varchar) - Пароль пользователя.
  • registration_date (timestamp) - Дата и время регистрации пользователя.

Таблица "shelves" - Содержит данные о стеллажах:

  • id (serial) - Уникальный идентификатор стеллажа.

  • name (varchar) - Название стеллажа (например, "Стеллаж А").

  • is_main (boolean) - Флаг, указывающий, является ли стеллаж главным или второстепенным.

  • parent_shelf_id (integer) - Идентификатор стеллажа, к которому относится данный стеллаж (для основных стеллажей значение null).

    Связи между таблицами:

  • В таблице "Products" поле "category_id" связано с таблицей "Products_category".

  • В таблице "Order" поле "user_id" связано с таблицей "Users".

  • В таблице "Order" поле "status_id" связано с таблицей "Order_status".

  • В таблице "Order" поле "shelf_ids" связано с таблицей "Shelves" (которая хранит название стеллажа).

    Триггеры:

  • set_initial_order_status() - автоматически устанавливает начальный статус "New" при создании заказа в таблице "Order_status_change."

  • update_shelf_name() - срабатывает после вставки или обновления данных в таблице "Order2products" и обновляет поле "shelf_name" в соответствующей записи в таблице "Order" на основе информации из таблицы "Product_shelves." Таким образом, при добавлении или изменении товаров в заказе, поле "shelf_name" в таблице "Order" будет автоматически обновляться согласно местоположению товаров на стеллажах из таблицы "Product_shelves."

  • duplicate_product_to_category() - каждый раз, когда вы вставляете запись в таблицу products, она будет также автоматически продублирована в таблицу products_category, используя значение category_id из products.

    Функции:

  • getsummarywithshelves - передавая необходимые идентификаторы заказов, мы получаем сводку данных о товарах в заказах, группированных по стеллажам и отсортированным по их названию.

    Представления:

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

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

  • OrderSummary - Сводка заказов по продуктам: Это представление позволит вам получить сводку по заказам и продуктам. В данном представлении будет информация о продуктах, количестве продуктов в заказах и общей стоимости.

  • AdditionalShelves - будет включать основные стеллажи (где is_main равно TRUE) и все стеллажи, которые связаны с основными через поле parent_shelf_id.

Запуск сервиса

  1. Клонируйте этот репозиторий: git clone https://github.com/AlexandrTomashevich/ShopOrders.git
  2. Перейдите в директорию проекта: cd ShopOrders
  3. Соберите проект: go build
  4. Запустите сервис передав номера заказов по которым нужно получить информацию:
> go run main.go 10,11,14,15

Далее сервис передает запрос к БД с указанными номерами заказа и с применением функции GetSummaryWithShelves

Отправка и получение результата запроса

В терминале вы получите результаты запроса по заказам в структурированном виде При желании можно воспользоваться созданными в БД представлениями и получить другую информацию передав соответствующий запрос к БД.

About

Оптимизированный сервис управления заказами для ускоренной сборки товаров на складе интернет-магазина.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages