├── .gitignore └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Тестовое задание для стажера в юнит Merchant Experience 2 | 3 | Задача разработать сервис, через который продавцы смогут передавать нам свои товары пачками в формате excel (xlsx). 4 | UI делать не нужно, достаточно только API. 5 | 6 | Сервис принимает на вход ссылку на файл и id продавца, к чьему аккаунту будут привязаны загружаемые товары. 7 | Сервис читает файл и сохраняет, либо обновляет товары в БД. Обновление будет происходить, если пара (id продавца, offer_id) уже есть у нас в базе. 8 | В ответ на запрос выдаёт краткую статистику: количество созданных товаров, обновлённых, удалённых и количество строк с ошибками (например цена отрицательная, либо вообще не число). 9 | 10 | Для проверки работоспособности сервиса нужно так же реализовать метод, с помощью которого можно будет достать список товаров из базы. 11 | Метод должен принимать на вход id продавца, offer_id, подстрока названия товара (по тексту "теле" находились и "телефоны", и "телевизоры"). Ни один параметр не является обязательным, все указанные параметры применяются через логический оператор "AND". 12 | 13 | В каждой строке скачанного файла будет содержаться отдельный товар. 14 | Колонки в файле и соответствующие значения полей товара следующие: 15 | 16 | * **offer_id** уникальный идентификатор товара в системе продавца 17 | * **name** название товара 18 | * **price** цена в рублях 19 | * **quantity** количество товара на складе продавца 20 | * **available** true/false, в случае false продавец хочет удалить товар из нашей базы 21 | 22 | 23 | ### Наши ожидания 24 | 25 | * язык программирования Go 26 | * предоставлена инструкция по запуску приложения. В идеале (но не обязательно) – использовать контейнеризацию с возможностью запустить проект командой docker run/docker-compose up 27 | * в качестве БД использована Postgres 28 | * код выложен на github 29 | 30 | ### Усложнения 31 | 32 | * написаны тесты 33 | * проведено нагрузочное тестирование с целью понять, с какой скоростью сервис может переваривать файлы 34 | * реализована асинхронная схема работы, т.е. сервис принимает запрос, сразу возвращает id задания и в отдельной горутине начинает его выполнять. Клиент может узнать статус задания отдельным запросом. 35 | --------------------------------------------------------------------------------