[hw-4] add postgres db

This commit is contained in:
Никита Шубин
2025-06-26 12:08:46 +00:00
parent 3ebaad5558
commit 77ed9fcf85
46 changed files with 1582 additions and 369 deletions

View File

@@ -17,3 +17,4 @@
1. [Основы Go](./homework-1)
2. [Тестирование в Go](./homework-2)
3. [Межсервисное взаимодействие и основы эксплуатации](./homework-3)
4. [Базы данных](./homework-4)

View File

@@ -1,5 +1,5 @@
### create normal order
POST http://localhost:8084/order/create
POST http://192.168.64.4:8084/order/create
Content-Type: application/json
{
@@ -19,14 +19,14 @@ Content-Type: application/json
### get info, assert status="awaiting payment"
GET http://localhost:8084/order/info?orderId=1
GET http://192.168.64.4:8084/order/info?orderId=1
Content-Type: application/json
### expected: 200 (OK) {"status":"awaiting payment","user":31337,"Items":[{"sku":1076963,"count":3},{"sku":135717466,"count":2}]}
### pay order
POST http://localhost:8084/order/pay
POST http://192.168.64.4:8084/order/pay
Content-Type: application/json
{
@@ -36,14 +36,14 @@ Content-Type: application/json
### check actual status is "payed"
GET http://localhost:8084/order/info?orderId=1
GET http://192.168.64.4:8084/order/info?orderId=1
Content-Type: application/json
### expected: 200 (OK) {"status":"payed","user":31337,"Items":[{"sku":1076963,"count":3},{"sku":135717466,"count":2}]}
### unable to cancel payed order
POST http://localhost:8084/order/cancel
POST http://192.168.64.4:8084/order/cancel
Content-Type: application/json
{
@@ -53,14 +53,14 @@ Content-Type: application/json
### get unknown order
GET http://localhost:8084/order/info?orderId=404
GET http://192.168.64.4:8084/order/info?orderId=404
Content-Type: application/json
### expected: 404 (Not Found) {"code": 5, ... }
### cancel order not exists
POST http://localhost:8084/order/cancel
POST http://192.168.64.4:8084/order/cancel
Content-Type: application/json
{
@@ -70,7 +70,7 @@ Content-Type: application/json
### create order with item that has no stocks info
POST http://localhost:8084/order/create
POST http://192.168.64.4:8084/order/create
Content-Type: application/json
{
@@ -86,13 +86,13 @@ Content-Type: application/json
### check order status is failed (not necessary, because no orderId after creation if any fails)
GET http://localhost:8084/order/info?orderId=2
GET http://192.168.64.4:8084/order/info?orderId=2
Content-Type: application/json
### expected: 200 (OK) {"status":"failed","userId":31337,"Items":[{"sku":404,"count":3}]}
### cancel failed order
POST http://localhost:8084/order/cancel
POST http://192.168.64.4:8084/order/cancel
Content-Type: application/json
{
@@ -102,21 +102,21 @@ Content-Type: application/json
### stock info for unknown sku
GET http://localhost:8084/stock/info?sku=404
GET http://192.168.64.4:8084/stock/info?sku=404
Content-Type: application/json
### expected: 404 Not Found {"code":5, ... }
### stock info for normal sku
GET http://localhost:8084/stock/info?sku=135717466
GET http://192.168.64.4:8084/stock/info?sku=135717466
Content-Type: application/json
### expected: 200 (OK) {"count":78}
### create order with count for sku more than stock
POST http://localhost:8084/order/create
POST http://192.168.64.4:8084/order/create
Content-Type: application/json
{
@@ -131,13 +131,13 @@ Content-Type: application/json
### expected: 400 (Bad Request) {"code":9, ... }
### no change in stock info after failed order creation
GET http://localhost:8084/stock/info?sku=135717466
GET http://192.168.64.4:8084/stock/info?sku=135717466
Content-Type: application/json
### expected: 200 (OK) {"count":78}
### create normal order for cancellation
POST http://localhost:8084/order/create
POST http://192.168.64.4:8084/order/create
Content-Type: application/json
{
@@ -153,7 +153,7 @@ Content-Type: application/json
### cancel order
POST http://localhost:8084/order/cancel
POST http://192.168.64.4:8084/order/cancel
Content-Type: application/json
{
@@ -163,14 +163,14 @@ Content-Type: application/json
### check canceled order status
GET http://localhost:8084/order/info?orderId=4
GET http://192.168.64.4:8084/order/info?orderId=4
Content-Type: application/json
### expected: {"status":"cancelled","user":31337,"Items":[{"sku":1076963,"count":2}]}
### check stocks returns
GET http://localhost:8084/stock/info?sku=135717466
GET http://192.168.64.4:8084/stock/info?sku=135717466
Content-Type: application/json
### expected: {"count":78}; 200 OK

33
docs/homework-4/README.md Normal file
View File

@@ -0,0 +1,33 @@
# Домашнее задание по модулю "Базы данных"
Необходимо развернуть БД PostgreSQL для сервиса loms. Реализовать слой `Repository`, в котором будут походы в БД
## Основное задание
1. Для сервиса loms реализовать в слое `Repository` поход в БД
2. Развернуть экземпляр БД PostgreSQL в отдельном контейнере
3. Корректно использовать транзакции в операции создания заказа
4. Реализовать автоматические миграции, накатывающие схему БД и/или тестовые данные
5. SQL-код должен быть написан в виде raw. Без использования ORM или билдеров (можно sqlc)
## Дополнительное задание
1. Для БД поднять синхронную реплику. Балансировать read/write запросы между ними (write только в master, read в любую из реплик)
2. Написать по одному интеграционному тесту на каждый SQL-запрос в репозитории сервиса loms. Не забыть накатывать тестовые данные в миграции, после прогона тестов - удалить данные из БД
3. Реализовать SQL-запросы с помощью sqlc
## Автоматические проверки
Ваше решение должно проходить автоматические проверки:
- Компиляция
- Линтер
- Unit-тесты
- Code coverage >40%
- Автотесты
Прохождение автоматических проверок влияет на итоговую оценку за домашнюю работу.
### Дедлайны сдачи и проверки задания:
- 21 июня 23:59 (сдача) / 24 июня, 23:59 (проверка)