Разработать микросервис для работы с фото к товарам
Требования: в качестве базы данных использовать PostgreSQL. В качестве ORM - gorm. Сервис должен уметь работать в нескольких экземплярах - то есть запуск на нескольких машинах не должен приводить к проблемам в логике. Сервис должен поддерживать способ хранения - в файловой системе. Структура проекта: project-layout (https://github.com/golang-standards/project-layout). Для запросов с авторизацией использовать JWT. Токен передаётся в http-заголовке Authorization. Авторизация требуется только для запросов на изменение, загрузку и удаление фото. Предполагается что запросы с авторизацией идут от другого сервиса и у него есть секретный ключ JWT для подписи токена. Использовать http-фреймворки запрещено. Использовать пакеты типа gorilla/mux или go-chi - можно.
product_code - произвольная строка до 20 символов
Запрос multipart/form-data (https://ru.wikipedia.org/wiki/Multipart/form-data) В запросе нужно передать сам файл, поле description и поле sort - номер при сортировке - чем меньше номер, тем выше он будет в выдаче. Запрос требует авторизацию. Для неавторизованных запросов отдавать статус 403
Запрос не требует авторизацию. Возвращает (JSON) список объектов с полями: уникальный uuid фотографии, ссылка на фото, описание, изначальный размер изображения.
Параметры запроса передаются в теле http. Формат запроса - JSON Поля: uuid фотографии, поле description - описание которое нужно установить, sort - номер при сортировке. Все поля обязательны, при отстутствии изменения в каком-то поле передаётся исходное значение. То есть при этом запросе нужно брать все поля и перезаписывать. Запрос требует авторизацию.
Тело запроса пустое. Авторизация не требуется. Единственный параметр - size - размер изображения, которое сервер должен отправить в ответ на запрос. Фото с этим размером должно кэшироваться. То есть если фото было однажды запрошено в каком-то размере, его нужно сохранить в этом размере и в следующий раз по запросу с таким размером отдавать фото их хранилища. Если запрошено в первый раз - то преобразовать в нужный размер и сохранить.