WB Tech: level # 0 (Golang)
Необходимо разработать демонстрационный сервис с простейшим интерфейсом, отображающий данные о заказе. Модель данных в формате JSON прилагается к заданию.
Что нужно сделать:
-
Развернуть локально PostgreSQL
-
Создать свою БД
-
Настроить своего пользователя
-
Создать таблицы для хранения полученных данных
-
Разработать сервис
-
Реализовать подключение и подписку на канал в nats-streaming
-
Полученные данные записывать в БД
-
Реализовать кэширование полученных данных в сервисе (сохранять in memory)
-
В случае падения сервиса необходимо восстанавливать кэш из БД
-
Запустить http-сервер и выдавать данные по id из кэша
-
Разработать простейший интерфейс отображения полученных данных по id заказа
-
Данные статичны, исходя из этого подумайте насчет модели хранения в кэше и в PostgreSQL. Модель в файле model.json
-
Подумайте как избежать проблем, связанных с тем, что в канал могут закинуть что-угодно
-
Чтобы проверить работает ли подписка онлайн, сделайте себе отдельный скрипт, для публикации данных в канал
-
Подумайте как не терять данные в случае ошибок или проблем с сервисом
-
Nats-streaming разверните локально (не путать с Nats)
Запуск окружения
docker compose up -d
Запуск сервиса
go run cmd/app/main.go
Отправка заказа в NATS
go run cmd/order-generator/main.go
Пример запроса на получение данных
GET http://localhost:8081/order/84c58a96-9d02-11ee-8290-eedf1aa1603b
Ответ
{
"customer_id": "test",
"date_created": "2021-11-26T06:22:19Z",
"delivery": {
"address": "Ploshad Mira 15",
"city": "Kiryat Mozkin",
"email": "[email protected]",
"name": "Test Testov",
"phone": "+9720000000",
"region": "Kraiot",
"zip": "2639809"
},
"delivery_service": "meest",
"entry": "WBIL",
"internal_signature": "",
"items": [
{
"brand": "Vivienne Sabo",
"chrt_id": 9934930,
"name": "Mascaras",
"nm_id": 2389212,
"price": 453,
"rid": "ab4219087a764ae0btest",
"sale": 30,
"size": "0",
"status": 202,
"total_price": 317,
"track_number": "WBILMTESTTRACK"
}
],
"locale": "en",
"oof_shard": "1",
"order_uid": "b563feb7b2b84b6test",
"payment": {
"amount": 1817,
"bank": "alpha",
"currency": "USD",
"custom_fee": 0,
"delivery_cost": 1500,
"goods_total": 317,
"payment_dt": 1637907727,
"provider": "wbpay",
"request_id": "",
"transaction": "b563feb7b2b84b6test"
},
"shardkey": "9",
"sm_id": 99,
"track_number": "WBILMTESTTRACK"
}