App creation script

1. Пользователь открывает сайт price.php
Скрипт читает БД и выводит общую таблицу по всем товарам и продавцам
seller | product | price | count
SELECT * 
FROM `price_list__ordered_by_product`;
используется VIEW `price_list__ordered_by_product`
2. Пользователь выбирает подходящего продавца, кликает на его имя и переходит на страницу seller.php
Скрипт читает БД и выводит таблицу по всем товарам продавца
product | price | in_stock_count
SELECT 
`name` AS `product`, 
`product_price` AS `price`, 
`product_count` AS `in_stock_count`
FROM `names`
LEFT JOIN `products` ON `product_name_id` =  `name_id`
LEFT JOIN `users` ON `user_id` = `product_user_id`
WHERE `user_id` = '1'
ORDER BY `price`;
здесь id выбранного продавца
Скрипт рисует карточки к выбранным товарам с двумя полями: dicount | count
  1. Пользователь вводит количество нужного товара в count
  2. Пользователь выбирает вариант дисконта из выпадающего списка
Создается сделка deal - автоматически присваивается deal_id
INSERT INTO `deals` (`deal_time`, `deal_is_accepted`)
VALUES (current_timestamp(), NULL);
здесь id выбранного продавца
Код получения deal_id на PHP
$link = mysqli_connect("localhost", "my_user", "my_password", "bd_name");
$query = "INSERT INTO `deals` (`deal_time`, `deal_is_accepted`)
VALUES (current_timestamp(), NULL)";
mysqli_query($link, $query);
$deal_id = mysqli_insert_id($link);
printf ("ID новой записи: %d.\n", mysqli_insert_id($link));
Скрипт рисует кнопку [отправить]
Методом GET передаём *.php?dial=1 - передали id сделки, здесь это 1
Поскольку проект учебный, все запросы реализованы через GET.
3. Пользователь нажал [отправить], переход на propose_add.php
Скрипт создает запрос к БД
1. Создаёт propose в proposes
INSERT INTO `proposes` (`propose_deal_id`, `propose_user_id`, `propose_round`)
VALUES ('1', '3', '1');
2а. Создаёт cart для 1 продукта
INSERT INTO `carts` (`cart_product_id`, `cart_discount_id`, `cart_amount`, `cart_propose_id`, `cart_deal_id`)
VALUES ('1', '2', '10', '1', '1');
Скрипт получает cart_id в php - для всех создаваемых carts
$link = mysqli_connect("localhost", "my_user", "my_password", "bd_name");
$query = "INSERT INTO `carts` (`cart_product_id`, `cart_discount_id`, `cart_amount`, `cart_propose_id`, `cart_deal_id`)
VALUES ('1', '2', '10', '1', '1')";
mysqli_query($link, $query);
$cart_id = mysqli_insert_id($link);
printf ("ID новой записи: %d.\n", mysqli_insert_id($link));
2б. Создаёт cart для 2 продукта
INSERT INTO `carts` (`cart_product_id`, `cart_discount_id`, `cart_amount`, `cart_propose_id`, `cart_deal_id`)
VALUES ('5', '1', '5', '1', '1');
3. Записывает в proposes_carts
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('1', '1');
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('2', '1');
Генерация ссылки propose_ID продавцу для отправки, например, через мессенджер в виде site_name?dial=1&propose=1
4. Продавец открыл ссылку, где есть propose_id propose_read.php
Скрипт читает данные из БД
	SELECT `propose_id`, 
`propose_user_id` AS `proposer_id`, 
`user_name` AS `seller`,
`name` AS `product`,
`product_price` AS `stock_price`, 
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `propose_price`,
`product_count` AS `in_stock_count`,
`cart_amount` AS `propose_count`,
`discount_amount` AS `propose_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `product_user_id` = `user_id`
WHERE `propose_id` = '1';
Скрипт генерирует таблицу:
propose_id | proposer_id | seller | product | stock_price | propose_price | in_stock_count | propose_count | propose_dicount | total_price
плюс генерирует карточки с двумя полями для предложения продавца: discount | count
  1. Продавец вводит количество товара, который готов отгрузить в count
  2. Продавец выбирает вариант дисконта из выпадающего списка в discount
кнопка [отправить]
кнопка [принять условия] -> deal.php
5. Продавец нажал [отправить], переход на propose_add.php
Скрипт создает запрос к БД:
1. создать propose в proposes
INSERT INTO `proposes` (`propose_id`,`propose_deal_id`, `propose_user_id`, `propose_round`)
VALUES ('2', '1', '1', '2');
2а. создать cart для 1 продукта
INSERT INTO `carts` (`cart_product_id`, `cart_discount_id`, `cart_amount`, `cart_propose_id`, `cart_deal_id`)
VALUES ('1', '8', '44', '2', '1');
2б. создать cart для 2 продукта
INSERT INTO `carts` (`cart_product_id`, `cart_discount_id`, `cart_amount`, `cart_propose_id`, `cart_deal_id`)
VALUES ('5', '5', '27', '2', '1');
3. записать в proposes_carts
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('3', '2');
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('4', '2');
Скрипт генерирует ссылку с propose_ID для отправки покупателю, например, через мессенджер в виде site_name?dial=1&propose=2
6. Покупатель открыл ссылку, где есть propose_id = 2, переход на propose_read.php
Скрипт читает данные из БД:
SELECT `propose_id`, 
`propose_user_id` AS `proposer_id`, 
`user_name` AS `seller`,
`name` AS `product`,
`product_price` AS `stock_price`, 
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `propose_price`,
`product_count` AS `in_stock_count`,
`cart_amount` AS `propose_count`,
`discount_amount` AS `propose_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `product_user_id` = `user_id`
/*LEFT JOIN `usertypes` ON `usertype_id` = `user_usertype_id`*/
WHERE `propose_id` = '2' AND `propose_deal_id` = '1';
это новое предложение!
SELECT `propose_id`, 
`propose_user_id` AS `proposer_id`, 
`user_name` AS `seller`,
`name` AS `product`,
`product_price` AS `stock_price`, 
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `propose_price`,
`product_count` AS `in_stock_count`,
`cart_amount` AS `propose_count`,
`discount_amount` AS `propose_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `product_user_id` = `user_id`
WHERE `propose_id` = '1' AND `propose_deal_id` = '1';
это предыдущее предложение!
SELECT `propose_round`,
`usertype_name` AS `seller_customer`, 
`name` AS `product`,
`product_price` AS `stock_price`, 
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `propose_price`,
`cart_amount` AS `propose_count`,
`discount_amount` AS `propose_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `propose_user_id` = `user_id`
LEFT JOIN `usertypes` ON `usertype_id` = `user_usertype_id`
WHERE `propose_deal_id` = '1'
ORDER BY `propose_time`;
вся цепочка предложений
Скрипт получает таблицу:
propose_id | proposer_id | seller | product | stock_price | propose_price | in_stock_count | propose_count | propose_dicount | total_price
и рисует две карточки для предложения продавца: discount | count
  1. Покупатель вводит количество товара, который ему необходим в count
  2. Покупатель выбирает вариант дисконта из выпадающего списка в discount
кнопка [отправить]
кнопка [принять условия] -> deal.php
7. Покупатель нажал [отправить], переход на propose_add.php
Скрипт создает запрос к БД:

1. создать propose в proposes
INSERT INTO `proposes` (`propose_id`,`propose_deal_id`, `propose_user_id`, `propose_round`)
VALUES ('3', '1', '3', '3');
2а. создать cart для 1 продукта
INSERT INTO `carts` (`cart_product_id`, `cart_discount_id`, `cart_amount`, `cart_propose_id`, `cart_deal_id`)
VALUES ('1', '8', '85', '3', '1');
2б. создать cart для 2 продукта
INSERT INTO `carts` (`cart_product_id`, `cart_discount_id`, `cart_amount`, `cart_propose_id`, `cart_deal_id`)
VALUES ('5', '5', '85', '3', '1');
3. записать в proposes_carts
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('5', '3');
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('6', '3');
Скрипт геренрирует ссылку с propose_ID продавцу. Её можно отправить, например, через мессенджер в виде site_name?dial=1&propose=3
... и т.д.
N. Нажата кнопка [принять условия], отправлен и получен последний propose_id и текущий dial_id. Переход на deal.php
Скрипт читает данные из БД
пусть propose_id = 4
dial_id = 1


скрипт обновляет статус deal_is_accepted, ставит 1
скрипт обновляет поле deal_finish_time - пишет текущий timestamp
UPDATE `deals` (`deal_is_accepted`, `deal_finish_time`)
VALUES (1, current_timestamp());
Скрипт выводит информацию о совершенной сделке
SELECT `user_name` AS `seller`,
`name` AS `product`,
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `deal_price`,
`cart_amount` AS `deal_count`,
`discount_amount` AS `deal_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `deal_total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `product_user_id` = `user_id`
WHERE `propose_id` = '4' AND `propose_deal_id` = '1';
Выбор строк по полученым id
Database schema
Back to About