89 lines
2.5 KiB
Markdown
89 lines
2.5 KiB
Markdown
# API
|
||
Для работы с тестовой базой данных для задания собрано минимальное API. БД SQLite, работает без ORM через библиотеку Microsoft.Data.Sqlite.
|
||
Приложение собрано в Docker-образ и развернуто по адресу <https://mindbox.cebotari.ru/>
|
||
|
||
## База данных
|
||
- Таблица со списком категорий
|
||
```sql
|
||
CREATE TABLE categories(
|
||
category_id INT NOT NULL PRIMARY KEY,
|
||
category_name VARCHAR(10)
|
||
);
|
||
```
|
||
- Таблица со списком продуктов
|
||
```sql
|
||
CREATE TABLE products(
|
||
product_id INT NOT NULL PRIMARY KEY,
|
||
product_name VARCHAR(10)
|
||
);
|
||
```
|
||
- Таблица товара с категориями
|
||
```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)
|
||
);
|
||
```
|
||
## Выбор пар "Имя продукта - Имя категории"
|
||
Запрос
|
||
```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
|
||
```
|
||
```
|
||
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"
|
||
```
|
||
|
||
- Вывод списка категорий
|
||
```ps
|
||
Invoke-RestMethod https://mindbox.cebotari.ru/category -Method GET
|
||
```
|
||
```
|
||
id name
|
||
-- ----
|
||
1 Red
|
||
2 Green
|
||
3 Yellow
|
||
4 Magenta
|
||
5 Black
|
||
```
|
||
- Добавление новой категории
|
||
```ps
|
||
Invoke-RestMethod https://mindbox.cebotari.ru/category -Method POST -Body (@{Id=5; Name="Black"} | ConvertTo-Json) -ContentType "application/json"
|
||
```
|
||
- Добавление нового товара
|
||
```ps
|
||
Invoke-RestMethod -Uri "https://mindbox.cebotari.ru/item?productId=5&categoryId=5" -Method POST
|
||
``` |