Skip to content

ShayhMaksim/MerchantExperience

Repository files navigation

MerchantExperience

Задача разработать сервис, через который продавцы смогут передавать нам свои товары пачками в формате excel (xlsx):

Инструкция:

  1. Предполагается, что у пользователя уже настроен Docker.
  2. Выполните docker-compose up --build main

Замечения по заданию: "Сервис принимает на вход ссылку на файл и id продавца, к чьему аккаунту будут привязаны загружаемые товары": Не было понятно, что имеется ввиду под ссылкой на файл, у меня было 2 решения:

  1. Использовать FormFile для загрузки файла клиента на сервер с последующей работой (отказался от варианта, так как просили только api).
  2. Использовать просто "путь до файла" на сервере, то есть файл указанный уже есть на сервере (остановился на этом варианте).

На сервере для проверки используются 4 файла в директории ExcelExample: Add.xlsx, Delete.xlsx, Update.xlsx, AddDeleteUpdate.xlsx

"Для проверки работоспособности сервиса нужно так же реализовать метод, с помощью которого можно будет достать список товаров из базы. Метод должен принимать на вход id продавца, offer_id, подстрока названия товара (по тексту "теле" находились и "телефоны", и "телевизоры"). Ни один параметр не является обязательным, все указанные параметры применяются через логический оператор "AND"":

Для этого реализован метод POST: пользователь отправляет запрос на сервер localhost:8080/info c json: { "selled_id":1, "offer_id":13, "name":"теле" }

Усложнения:

"написаны тесты": для работы с файлом excel были написаны функции на проверку корректности входных данных, именно их тестировал. Результаты можно посмотреть в "processing/test.log"

"проведено нагрузочное тестирование с целью понять, с какой скоростью сервис может переваривать файлы": Задание было выполнено. Для тестирования был взят JMeter (смотреть рисунок test_server/Результаты тестирования). В результате тестирования выявил проблемы:

  1. Одновременная запись и чтение map (перем. Conveyor) приводила к ошибке, проблема решилась с введением мьютекса.

  2. Также была выявлена проблема: "panic: pq: sorry, too many clients already", но не стал ее решать.

"реализована асинхронная схема работы, т.е. сервис принимает запрос, сразу возвращает id задания и в отдельной горутине начинает его выполнять. Клиент может узнать статус задания отдельным запросом":

реализовал:

на localhost:8080/data пользователь отправляет json (метод POST) как пример: { "selled_id":1, "excelFileName":"./ExcelExample/Add.xlsx" }

в ответ приходит результат { id задания } в виде json

для получения результата статистики, пользователь переходит на localhost:8080/data/{ id задания }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published