2023-11-14 15:49:30 +03:00
|
|
|
|
# API
|
|
|
|
|
Для работы с тестовой базой данных для задания собрано минимальное API. БД SQLite, работает без ORM через библиотеку Microsoft.Data.Sqlite.
|
|
|
|
|
Приложение собрано в Docker-образ и развернуто по адресу <https://mindbox.cebotari.ru/>
|
|
|
|
|
|
2023-11-14 12:00:03 +03:00
|
|
|
|
## База данных
|
2023-11-14 15:49:30 +03:00
|
|
|
|
- Таблица со списком категорий
|
2023-11-14 12:00:03 +03:00
|
|
|
|
```sql
|
|
|
|
|
CREATE TABLE categories(
|
|
|
|
|
category_id INT NOT NULL PRIMARY KEY,
|
|
|
|
|
category_name VARCHAR(10)
|
|
|
|
|
);
|
|
|
|
|
```
|
2023-11-14 15:49:30 +03:00
|
|
|
|
- Таблица со списком продуктов
|
2023-11-14 12:00:03 +03:00
|
|
|
|
```sql
|
|
|
|
|
CREATE TABLE products(
|
|
|
|
|
product_id INT NOT NULL PRIMARY KEY,
|
|
|
|
|
product_name VARCHAR(10)
|
|
|
|
|
);
|
|
|
|
|
```
|
2023-11-14 15:49:30 +03:00
|
|
|
|
- Таблица товара с категориями
|
2023-11-14 12:00:03 +03:00
|
|
|
|
```sql
|
|
|
|
|
CREATE TABLE grocery_store(
|
|
|
|
|
product_id INT,
|
|
|
|
|
category_id INT,
|
|
|
|
|
FOREIGN KEY (product_id) REFERENCES products (product_id),
|
|
|
|
|
FOREIGN KEY (category_id) REFERENCES categories (category_id)
|
|
|
|
|
);
|
|
|
|
|
```
|
2023-11-14 15:49:30 +03:00
|
|
|
|
## Выбор пар "Имя продукта - Имя категории"
|
2023-11-14 12:00:03 +03:00
|
|
|
|
Запрос
|
|
|
|
|
```sql
|
|
|
|
|
SELECT product_name AS product, category_name AS category FROM products
|
|
|
|
|
LEFT JOIN grocery_store ON grocery_store.product_id = products.product_id
|
|
|
|
|
LEFT JOIN categories ON grocery_store.category_id = categories.category_id
|
|
|
|
|
ORDER BY product;
|
|
|
|
|
```
|
|
|
|
|
```ps
|
|
|
|
|
Invoke-RestMethod https://mindbox.cebotari.ru/item -Method GET
|
|
|
|
|
```
|
2023-11-14 15:49:30 +03:00
|
|
|
|
```
|
|
|
|
|
productName categoryName
|
|
|
|
|
----------- ------------
|
|
|
|
|
Apple Red
|
|
|
|
|
Apple Green
|
|
|
|
|
Cucumber Green
|
|
|
|
|
Eggplant
|
|
|
|
|
Olives Black
|
|
|
|
|
Tomato Red
|
|
|
|
|
```
|
|
|
|
|
## Дополнительно реализовано
|
|
|
|
|
- Вывод списка продуктов
|
|
|
|
|
```ps
|
|
|
|
|
Invoke-RestMethod https://mindbox.cebotari.ru/product -Method GET
|
|
|
|
|
```
|
|
|
|
|
```
|
|
|
|
|
id name
|
|
|
|
|
-- ----
|
|
|
|
|
1 Apple
|
|
|
|
|
2 Cucumber
|
|
|
|
|
3 Tomato
|
|
|
|
|
4 Eggplant
|
|
|
|
|
5 Olives
|
|
|
|
|
```
|
|
|
|
|
- Добавление нового продукта
|
|
|
|
|
```ps
|
|
|
|
|
Invoke-RestMethod https://mindbox.cebotari.ru/product -Method POST -Body (@{Id=5; Name="Olives"} | ConvertTo-Json) -ContentType "application/json"
|
|
|
|
|
```
|
2023-11-14 12:00:03 +03:00
|
|
|
|
|
2023-11-14 15:49:30 +03:00
|
|
|
|
- Вывод списка категорий
|
2023-11-14 12:00:03 +03:00
|
|
|
|
```ps
|
2023-11-14 15:49:30 +03:00
|
|
|
|
Invoke-RestMethod https://mindbox.cebotari.ru/category -Method GET
|
|
|
|
|
```
|
2023-11-14 12:00:03 +03:00
|
|
|
|
```
|
2023-11-14 15:49:30 +03:00
|
|
|
|
id name
|
|
|
|
|
-- ----
|
|
|
|
|
1 Red
|
|
|
|
|
2 Green
|
|
|
|
|
3 Yellow
|
|
|
|
|
4 Magenta
|
|
|
|
|
5 Black
|
|
|
|
|
```
|
|
|
|
|
- Добавление новой категории
|
2023-11-14 12:00:03 +03:00
|
|
|
|
```ps
|
2023-11-14 15:49:30 +03:00
|
|
|
|
Invoke-RestMethod https://mindbox.cebotari.ru/category -Method POST -Body (@{Id=5; Name="Black"} | ConvertTo-Json) -ContentType "application/json"
|
2023-11-14 12:00:03 +03:00
|
|
|
|
```
|
2023-11-14 15:49:30 +03:00
|
|
|
|
- Добавление нового товара
|
2023-11-14 12:00:03 +03:00
|
|
|
|
```ps
|
2023-11-14 15:49:30 +03:00
|
|
|
|
Invoke-RestMethod -Uri "https://mindbox.cebotari.ru/item?productId=5&categoryId=5" -Method POST
|
2023-11-14 12:00:03 +03:00
|
|
|
|
```
|