Это простой сервис запросов из БД интернет магазинна написанный на 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.
- Клонируйте этот репозиторий: git clone https://github.com/AlexandrTomashevich/ShopOrders.git
- Перейдите в директорию проекта: cd ShopOrders
- Соберите проект: go build
- Запустите сервис передав номера заказов по которым нужно получить информацию:
> go run main.go 10,11,14,15
Далее сервис передает запрос к БД с указанными номерами заказа и с применением функции GetSummaryWithShelves
В терминале вы получите результаты запроса по заказам в структурированном виде При желании можно воспользоваться созданными в БД представлениями и получить другую информацию передав соответствующий запрос к БД.