· 5 years ago · Sep 17, 2020, 06:18 PM
1<?
2
3/*
4 Что должен включать в себя сервис:
5 API методы
6 Метод расчета стоимости доставки
7 Метод создания заказа
8 Метод получения информации о заказе
9 Метод получение списка заказов
10 Сервис должен уметь взаимодействовать с клиентом при помощи REST API или JSON RPC запросов
11 В сервисе должен быть реализован RateLimit с ограничением 10 RPM
12 Дополнительная информация:
13 Логику логистики реализовывать не обязательно. На усмотрение разработчика можно использовать mock ответов. Цель разработать API сервис,
14 а не полноценный сервис курьерской доставки.
15 Сервис разрабатывается для “Внутригородской доставки”
16 Приветствуется покрытие кода тестами
17 Приветствуется наличие документации с описанием работы API сервиса
18 Приветствуется использования систем хранения данных Redis, PostgreSQL, mongoDB
19 Контекст задачи:
20 В процессе работы с API будут участвовать 3 основных лица:
21
22 Покупатель. Для него важно рассчитать стоимость доставки от адреса отправки до адреса получения (при этом адрес отправки у нас занесен в систему продавцом),
23 для этого он использует метод "Расчет стоимостей доставки". После расчета стоимости, покупатель принимает решение об оформлении заказа с доставкой.
24 Когда пользователь оформляет заказ, вызывается метод "Создать заказ". После чего, покупатель ожидает доставки своего товара.
25
26 Продавец. Должен иметь возможность видеть весь список заказов, оформленных покупателями. Для этого доступен метод "Получить список заказов".
27 Также для продавца важно иметь возможность посмотреть детальную информацию по заказу, чтобы передать заказ курьеру для доставки.
28 Для этого доступен метод “Получить информацию о заказе”.
29
30 Курьер с мобильным приложением. Должен иметь возможность просматривать информацию о заказе: какой товар, куда и когда нужно доставить.
31 Для этого мобильное приложение будет вызывать метод "Получить информацию о заказе".
32
33
34
35
36
37 БД должна содержать:
38 ид инт 20
39
40 пометка заказа (выполнен, не выполнен, отменён)
41 стоимость заказа (отдельно заказ)
42 стоимость доставки (при надобности можно будет считать сумму)
43 адресс доставки заказа (информация для доставки и расчёта стоимости)
44
45 сам по себе заказ (текстовая информация по заказу) (по типу вход со двора, на домофоне нажать К, вторая дверь слева, побольше сыра, никакой пиццы мне везти не нужно я только спросить)
46 время поступления заказа (для того что бы понимать когда он был сделан)
47 время закрытия заказа (срок исполнения)
48
49
50
51
52
53
54
55
56
57
58
59
60*/
61
62//Для адекватного отображения без магических чисел.
63$DbTId = 0;
64$DbTStatus = 1;
65$DbTCost = 2;
66$DbTCostDel = 3;
67$DbTAddress = 4;
68$DbTInfo = 5;
69$DbTTimeCreate = 6;
70$DbTTimeStatus = 7;
71
72//Данные подключение к бд.
73$dbHost = "localhost";
74$dbLogin = "db_edu";
75$dbPassword = "dbpass";
76$dbName = "db_edu";
77$dbTable = "dbt_delivery";
78
79
80
81
82function create_db_table(string $dbHost,string $dbLogin,string $dbPassword,string $dbName,string $dbTable) {
83
84 $dbQuery = "CREATE TABLE IF NOT EXISTS $dbTable (
85 ID INT(10) NOT NULL AUTO_INCREMENT,
86
87 STATUS int(10) NOT NULL DEFAULT 0,
88 COST int(10) NOT NULL DEFAULT 0,
89 COST_DELIVERY int(10) NOT NULL DEFAULT 0,
90 ADDRESS VARCHAR (200) NOT NULL,
91 INFO VARCHAR (2000) NOT NULL,
92 TIME_CREATE INT(10) NOT NULL,
93 TIME_STATUS INT(10) NOT NULL,
94
95 PRIMARY KEY (ID));
96 ";
97
98 $dbLink = mysqli_connect($dbHost,$dbLogin,$dbPassword,$dbName);
99 mysqli_set_charset($dbLink, "utf8");
100
101 if($dbLink) {
102 mysqli_query($dbLink, $dbQuery) or die("Ошибка " . mysqli_error($dbLink));
103 }
104}
105
106
107function create_order(string $dbTable) {
108 /*
109 При создании заказа что должно происходить?
110
111
112
113
114
115
116 Сохраняем время заказа. (это самое начальное время заказа)
117 До момента пока его не обработает продавец время статуса так же равно времени заказа.
118
119 Ставим статус при создании (новый заказ).Нужно создать некие переменные что бы избегать магических чисел на все состояния заказа.
120 Статусы {
121 1 новый (когда заказ только создали и его ещё не обработал продавец, в нашем магазине продавец вручную обрабатывает заказы)
122 2 обработан (после того как продавец обработал заказ его уже можно передавать курьеру, но для этого нужен промежуточный статус до момента передачи)
123 3 передан курьеру (заказ находится у курьера и доставляется в это время)
124 4 доставлен (заказ был передан покупателю, этот заказ завершен можно брать следующий)
125 5 отменён (заказ может быть отменён в любой момент по этому такой статус тоже должен присутствовать) (так же следует добавить поле для комментария состояния заказа)
126 }
127
128
129
130
131 ID INT(10) NOT NULL AUTO_INCREMENT,
132
133 STATUS int(10) NOT NULL DEFAULT 0,
134 COST int(10) NOT NULL DEFAULT 0,
135 COST_DELIVERY int(10) NOT NULL DEFAULT 0,
136 ADDRESS VARCHAR (200) NOT NULL,
137 INFO VARCHAR (2000) NOT NULL,
138 TIME_CREATE INT(10) NOT NULL,
139 TIME_STATUS INT(10) NOT NULL,
140 */
141
142
143
144
145
146 $dbQuery = "INSERT INTO $dbTable (NAME,COMMENT,TIMESTAMP) VALUE ('$commName','$commText','$iTimeStamp');";
147
148
149}
150
151
152
153
154
155create_db_table($dbHost,$dbLogin,$dbPassword,$dbName,$dbTable);
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179