Categorygithub.com/nehachuha1/wbtech-tasks
module
0.0.0-20241128231108-6ed9ba78d7e6
Repository: https://github.com/nehachuha1/wbtech-tasks.git
Documentation: pkg.go.dev

# README

WB Tech L0

В данном задании необходимо было реализовать сервис по загрузке JSON с данными о заказе и дальнейшей их обработке, а также получению данных о заказе по его полю order_uid

Структура


wb-tech/ 
├── cmd/ 
│     └── wb-tech/ 
│            └── main.go - исполняемый файл 
├── internal/ 
│     ├── config/ 
│     │    └── config.go - в нём описаны структуры конфигов для хранилища кэша, базы данных и Kafka 
│     ├── database/ 
│     │     ├── cacher/ 
│     │     │    ├── cacher.go - описана структура хранилища кэша с методами 
│     │     │    └── implementation.go - интерфейс хранилища кэша 
│     │     ├── kafka/ 
│     │     │    ├── consumer/ 
│     │     │    │    └── consumer.go - структура консьюмера с методами взаимодействия с Kafka 
│     │     │    └── producer/ 
│     │     │          └── producer.go - структура отправителя с методами взаимодействия с Kafka 
│     │     ├── postgres/ 
│     │     │    ├── implementation.go - интерфейс модуля управлеия БД PostgreSQL 
│     │     │    └── postgres.go - структура для управления постгресом с методами 
│     │     └── init.go - инициализация управления памятью (кэшем и постгресом + консьюмера Kafka) 
│     ├── handlers/ 
│     │    ├── orders/ 
│     │    │    └── order.go - обработчики входящих запросов на создание/отображение заказа 
│     │    └── abstractions.go - содержит в себе структуру JSON заказа 
│     ├── migrations/ 
│     │    └── postgres/ 
│     │          ├── migrate.go - содержит в себе метод для запуска автоматических миграций через gorm в Postgres 
│     │          └── models.go - содержит в себе структуры сущностей из Postgres 
│     └── server/ 
│           └── build.go - сборка роутера с хэндлерами и менеджером данных 
├── logs/ 
│    └── logs.log - файл с логами сервиса 
├── pkg/ 
│    ├── database/ 
│    │     ├── clear.go - очищение базы данных 
│    │     └── generate.go - генерация ID при декомпозиции входящей сущности на несколько сущностей 
│    └── log/ 
│           └── logger.go - инициализация логгера 
├── templates/ 
│    └── index.html - основная html-страничка 
├── .gitignore 
├── docker-compose.yml - запуск всех основных сервисов для работы проекта 
├── task.md - описание задания 
└── README.md

Принцип работы

В основе всего лежит управляющая структура DataManager. Она имеет в себе поля с подключением к хранилищу кэша (реализовано через мапу с мьютексами) и подключением к PostgreSQL.

В горутине крутится таймер на перезаполнение кэша. Также конкурентно организовано исполнение запросов на получение данных из http-хэндлеров.

HTML-прототип

На главной странице посредством кнопки отправки данных генерируется JSON в формате, который был предоставлен в описании к задаче, и отправляется на бэк. При вводе данных в поле order_uid и нажатии кнопки "получение данных" менеджер данных пытается получить данные из кэша, если же ему это не удается, то он идёт в Postgres

# Packages

No description provided by the author
No description provided by the author