Skip to content

lastbyte32/wb-level-0

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WB Tech: level # 0 (Golang)

Тестовое задание

Необходимо разработать демонстрационный сервис с простейшим интерфейсом, отображающий данные о заказе. Модель данных в формате JSON прилагается к заданию.

Что нужно сделать:

  1. Развернуть локально PostgreSQL

  2. Создать свою БД

  3. Настроить своего пользователя

  4. Создать таблицы для хранения полученных данных

  5. Разработать сервис

  6. Реализовать подключение и подписку на канал в nats-streaming

  7. Полученные данные записывать в БД

  8. Реализовать кэширование полученных данных в сервисе (сохранять in memory)

  9. В случае падения сервиса необходимо восстанавливать кэш из БД

  10. Запустить http-сервер и выдавать данные по id из кэша

  11. Разработать простейший интерфейс отображения полученных данных по id заказа

Советы

  1. Данные статичны, исходя из этого подумайте насчет модели хранения в кэше и в PostgreSQL. Модель в файле model.json

  2. Подумайте как избежать проблем, связанных с тем, что в канал могут закинуть что-угодно

  3. Чтобы проверить работает ли подписка онлайн, сделайте себе отдельный скрипт, для публикации данных в канал

  4. Подумайте как не терять данные в случае ошибок или проблем с сервисом

  5. Nats-streaming разверните локально (не путать с Nats)

Запуск

Запуск окружения

docker compose up -d

Запуск сервиса

go run cmd/app/main.go

Отправка заказа в NATS

go run cmd/order-generator/main.go

Пример запроса на получение данных

GET https://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"
}

About

Тестовое задание WB Tech

Resources

Stars

Watchers

Forks

Languages