Skip to content

mrPechen/go_film_library_api

Repository files navigation

API для сервиса "Фильмотека" на ЯП Golang.

Общая информация:

Необходимо разработать бэкенд приложения "Фильмотека", который предоставляет REST API для управления базой данных фильмов.

Приложение должно поддерживать следующие функции:

• добавление информации об актёре (имя, пол, дата рождения),

• изменение информации об актёре. Возможно изменить любую информацию об актёре, как частично, так и полностью:

• удаление информации об актёре,

•добавление информации о фильме.

При добавлении фильма указываются его название (не менее 1 и не более 150 символов), описание (не более 1000 символов), дата выпуска, рейтинг (от 0 до 10) и список актёров:

• изменение информации о фильме. Возможно изменить любую информацию о фильме, как частично, так и полностью:

• удаление информации о фильме,

• получение списка фильмов с возможностью сортировки по названию, по рейтингу, по дате выпуска. По умолчанию используется сортировка по рейтингу (по убыванию),

• поиск фильма по фрагменту названия, по фрагменту имени актёра,

• получение списка актёров, для каждого актёра выдаётся также список фильмов с его участием,

• АРІ должен быть закрыт авторизацией,

• поддерживаются две роли пользователей - обычный пользователь и администратор. Обычный пользователь имеет доступ только на получение данных и поиск, администратор на все действия. Для упрощения можно считать, что соответствие пользователей и ролей задаётся вручную (например, напрямую через БД).

Требования к реализации:

• язык реализации - go,

• для хранения данных используется реляционная СУБД (предпочтительно-PostgreSQL), предоставлена спецификация на API (в формате Swagger 2.0 или ОрепAРІ 3.0). Бонус: используется подход api-first (генерация кода из спецификации) или code-first (генерация спецификации из кода).

Для реализации http сервера разрешается использовать только стандартную библиотеку http (без фреймворков),логирование - в лог должна попадать базовая информация об обрабатываемых запросах, ошибки, код приложения покрыт юнит-тестами не менее чем на 70%,

Dockerfile для сборки образа,

docker-compose файл для запуска окружения с работающим приложением и СУБД.

Документация: http://localhost:8080/swagger/index.html#/

Запуск приложения: в папке src указать данные для PostgreSQL в файле env.example. После из корня проекта запустить команду "docker compose -f docker-compose.yaml up --build". Приложение будет доступно на http://localhost:8080/ .

Запуск тестов: в папке src указать данные для PostgreSQL в файле env.example. После из корня проекта запустить команду "docker compose -f docker-compose-test.yaml up --build". Результаты теста будут указаны в логах.

Список эндпоинтов:

  1. http://localhost:8080/api/registration/ . POST запрос. Принимает в body json формата: {"email": "email@email.ru", "password": "password", "role": "admin или user"}. Регистрирует пользователя и выдает пару JWT токенов.
  2. http://localhost:8080/api/login/ . POST запрос. Принимает в body json формата: {"email": "email@email.ru", "password": "password"}. Login пользователя, выдает пару JWT токенов.
  3. http://localhost:8080/api/refresh-tokens/ . POST запрос. Принимает в body json формата: {"refresh_token": "refresh_token"}. Получение новой пары JWT токенов.
  4. http://localhost:8080/api/actor-create/ . POST запрос. Принимает в body json формата: { "name": "name", "gender": "gender", "birth_date": "YYYY-MM-DDThh:mm:ss+03:00" } . Создает нового актера.
  5. http://localhost:8080/api/actor-update?id=1 . PATCH запрос. Принимает в body json формата: { "name": "name", "gender": "gender", "birth_date": "YYYY-MM-DDThh:mm:ss+03:00" } . Все поля являются необязательными. Обновляет информацию об актере.
  6. http://localhost:8080/api/actors/ . GET запрос. Возвращает список всех актерев и для каждого актера список фильмов в которых он снимался.
  7. http://localhost:8080/api/actor?id=1 . GET запрос. Возвращает актера по указанному id и список фильмов в которых он снимался.
  8. http://localhost:8080/api/actor-delete?id=1 . DELETE запрос. Удаляет пользователя по id.
  9. http://localhost:8080/api/film-create/ . POST запрос. Принимает в body json формата: {"name": "film name", "description": "film description", "release_date": "YYYY-MM-DDThh:mm:ssZ", "rate": int, "actor_ids": [список id актеров]}. Создает фильм со списком актеров которые в нем участвовали.
  10. http://localhost:8080/api/film-update?id=1 . POST запрос. Принимает в body json формата: {"name": "film name", "description": "film description", "release_date": "YYYY-MM-DDThh:mm:ssZ", "rate": int, "actor_ids": [список id актеров]}. Все поля являются необязательными. Обновляет информацию о фильме.
  11. http://localhost:8080/api/films?sort_by=release_date&order=asc . GET запрос. В качестве параметров принимает: sort_by=release_date - сортировка по дате выпуска фильмов, sort_by=name - сортировка по имени фильмов, sort_by=rate - сортировка по рейтингу фильмов. И order=asc - сортировка по возрастанию, order=desc - сортировка по убыванию. Возвращает список всех фильмов с учетом заданных параметром и для каждого фильма список актеров.
  12. http://localhost:8080/api/film?film_name=fil . GET запрос. Принимает параметры: film_name=фрагмент названия фильма - ищет фильмы в названии которых есть этот фрагмент, actor_name=фрагмент имени актера - ищет фильмы в имени актеров, которые снимались в фильме, есть этот фрагмент. Возвращает список фильмов и для каждого фильма список актеров.
  13. http://localhost:8080/api/film-delete?id=1 . DELETE запрос. Удаляет фильм по id.

About

API for film library service

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published