Skip to content

alexfocus3/gopractice

Repository files navigation

Задание для практики Go

Разработать микросервис для работы с фото к товарам

Требования: в качестве базы данных использовать PostgreSQL. В качестве ORM - gorm. Сервис должен уметь работать в нескольких экземплярах - то есть запуск на нескольких машинах не должен приводить к проблемам в логике. Сервис должен поддерживать способ хранения - в файловой системе. Структура проекта: project-layout (https://github.com/golang-standards/project-layout). Для запросов с авторизацией использовать JWT. Токен передаётся в http-заголовке Authorization. Авторизация требуется только для запросов на изменение, загрузку и удаление фото. Предполагается что запросы с авторизацией идут от другого сервиса и у него есть секретный ключ JWT для подписи токена. Использовать http-фреймворки запрещено. Использовать пакеты типа gorilla/mux или go-chi - можно.

product_code - произвольная строка до 20 символов

API

POST /api/products/<product_code>/upload - загрузить фото для товара

Запрос multipart/form-data (https://ru.wikipedia.org/wiki/Multipart/form-data) В запросе нужно передать сам файл, поле description и поле sort - номер при сортировке - чем меньше номер, тем выше он будет в выдаче. Запрос требует авторизацию. Для неавторизованных запросов отдавать статус 403

GET /api/products/<product_code>/list - список фото для товара

Запрос не требует авторизацию. Возвращает (JSON) список объектов с полями: уникальный uuid фотографии, ссылка на фото, описание, изначальный размер изображения.

PUT /api/products/<product_code>/update - изменить фото для товара

Параметры запроса передаются в теле http. Формат запроса - JSON Поля: uuid фотографии, поле description - описание которое нужно установить, sort - номер при сортировке. Все поля обязательны, при отстутствии изменения в каком-то поле передаётся исходное значение. То есть при этом запросе нужно брать все поля и перезаписывать. Запрос требует авторизацию.

GET /api/products/<product_code>/getFile?size=200x200 - получить фотографию

Тело запроса пустое. Авторизация не требуется. Единственный параметр - size - размер изображения, которое сервер должен отправить в ответ на запрос. Фото с этим размером должно кэшироваться. То есть если фото было однажды запрошено в каком-то размере, его нужно сохранить в этом размере и в следующий раз по запросу с таким размером отдавать фото их хранилища. Если запрошено в первый раз - то преобразовать в нужный размер и сохранить.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published