Skip to content

ereminiu/filmoteka

Repository files navigation

VK Golang assignment

About

  1. Реализованны все хендлеры
  2. Написаны юнит тесты
  3. Реализована swagger спецификация - подход code-first

Сборка и Запуск

Сборка

make build

Запуск

make run

Если запускаете приложение первый раз - отправьте запрос на /migrate-up, чтобы инициализировать таблицы базы данных

Swagger UI

Чтобы просмотреть спецификацию - запустите приложение и откройте ссылку

http://localhost:3000/swagger/index.html

Usage

Миграции

POST: /migrate-up - создает sql таблицы

POST: /migrate-down - удаляет sql таблицы

POST: /migrate-force - если необходимо починить "грязные" версии миграций

{
  "version": 1
}

Аутентификация

POST: /sign-up - регистрация

{
    "name": "Katya",
    "username": "Katya@",
    "password": "qwerty"
}
{
    "name": "Katya",
    "username": "admin_Katya@",
    "password": "qwerty"
}

response:

{
    "id": 1,
    "message": "User is created"
}

Если имя пользователя начинается на admin, то пользователь будет обладать правами администрора, иначе - пользователя

POST: /sign-in - аутентификация

{
    "username": "admin_Katya@",
    "password": "qwerty"
}

response:

{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTA4MTAzMzYsImlhdCI6MTcxMDc2NzEzNiwidXNlcl9pZCI6MSwiVXNlclJvbGUiOiJhZG1pbiJ9.IstnvOXayUxlLVP8eEN1wvjVRWqTapoZsAkdGmEXvoY"
}

Возращается токен, котоырй нужно подставить в заголовок Authorization, Bearer Token

Запросы обычного пользователя

GET: /actor-list

Возвращает список всех актеров

response:

[
    {
        "actor_id": 1,
        "actor_name": "Alan Rickman",
        "actor_gender": "male",
        "actor_birthday": "1946-01-01",
        "movies": [
            {
                "Id": 2,
                "Name": "Сумерки 99",
                "Description": "Кино для абстрактных мужчин",
                "Date": "2012-10-10T00:00:00Z",
                "Rate": 0
            },
            {
                "Id": 3,
                "Name": "Сумерки 4",
                "Description": "Кино для настоящих мужчин",
                "Date": "2012-10-10T00:00:00Z",
                "Rate": 0
            }
        ]
    },
    {
        "actor_id": 2,
        "actor_name": "Skarlette Johnason",
        "actor_gender": "female",
        "actor_birthday": "1984-01-01",
        "movies": [
            {
                "Id": 3,
                "Name": "Сумерки 4",
                "Description": "Кино для настоящих мужчин",
                "Date": "2012-10-10T00:00:00Z",
                "Rate": 0
            }
        ]
    },
    {
        "actor_id": 3,
        "actor_name": "Jody Foster",
        "actor_gender": "female",
        "actor_birthday": "1989-01-01",
        "movies": [
            {
                "Id": 3,
                "Name": "Сумерки 4",
                "Description": "Кино для настоящих мужчин",
                "Date": "2012-10-10T00:00:00Z",
                "Rate": 0
            }
        ]
    }
]

POST: /movie-list

Возвращает список всех фильмов

{
  "sort_by": "a.birthday"
}

response:

[
    {
        "movie_id": 2,
        "movie_name": "Сумерки 99",
        "movie_description": "Кино для абстрактных мужчин",
        "movie_date": "2012-10-10T00:00:00Z",
        "movie_rate": 0,
        "actors": [
            {
                "id": 1,
                "name": "Alan Rickman",
                "gender": "male",
                "Birthday": "1946-01-01"
            }
        ]
    },
    {
        "movie_id": 3,
        "movie_name": "Сумерки 4",
        "movie_description": "Кино для настоящих мужчин",
        "movie_date": "2012-10-10T00:00:00Z",
        "movie_rate": 0,
        "actors": [
            {
                "id": 1,
                "name": "Alan Rickman",
                "gender": "male",
                "Birthday": "1946-01-01"
            },
            {
                "id": 2,
                "name": "Skarlette Johnason",
                "gender": "female",
                "Birthday": "1984-01-01"
            },
            {
                "id": 3,
                "name": "Jody Foster",
                "gender": "female",
                "Birthday": "1989-01-01"
            }
        ]
    }
]

Возвращает список фильмов со всеми полями.

POST: /search-movies

Возвращает список фильмов, по отрывку фильма и имени актера. Оба поля могут быть пустыми

{
    "movie_pattern": "Сум",
    "actor_pattern": "Val"
}

response:

[
    {
        "movie_id": 3,
        "movie_name": "Сумерки 4",
        "movie_description": "Кино для настоящих мужчин",
        "movie_date": "2012-10-10T00:00:00Z",
        "movie_rate": 0,
        "actors": [
            {
                "id": 4,
                "name": "Valera ZHMA",
                "gender": "male",
                "Birthday": "1970-01-01"
            },
            {
                "id": 5,
                "name": "Valera Kruglov",
                "gender": "male",
                "Birthday": "1970-01-01"
            }
        ]
    }
]

Запросы администратора

Требуется токен

POST: /add-actor

Добавляет актера

{
    "name": "Valera Devyatkin",
    "gender": "male",
    "birthday": "1999-09-09"
}

response:

{
    "id": 5,
    "message": "Actor is added"
}

Возвращает id актера и сообщение. В случае провала - код и описание ошибки

POST: /add-actor-to-movie

Добавляет актера в заданный фильм

{
    "actor_id": 5,
    "movie_id": 3
}

response:

{
    "message": "Actor 5 added to the movie 3"
}

PUT: /change-actor-field

Изменяет заданное поле у актера

{
  "actor_id": 1,
  "field": "name",
  "new_value": "Valera"
}

response:

{
    "message": "Field is changed"
}

DELETE: /delete-actor

Удаляет актера из базы данных

{
    "actor_id": 1
}

response:

{
    "message": "Actor is removed"
}

POST: /add-movie

Добавляет фильм по названию, описанию, дате, рейтингу и списку актеров

{
    "name": "Сумерки 4",
    "description": "Кино для настоящих мужчин",
    "date": "2012-10-10",
    "rate": 0,
    "actors": [1, 2, 3]
}

response:

{
    "id": 3,
    "message": "Movie is added"
}

Возвращает id добавленного фильма

DELETE: /delete-movie

Удаляет фильма из базы данных

{
    "movie_id": 1
}

response:

{
    "message": "Movie is removed"
}

DELETE: /delete-movie-field

Удаляет поле у заданного фильма из базы данных

{
    "movie_id": 2,
    "field": "date"
}

Удаление актера из фильма

{
    "movie_id": 2,
    "actor_id": 1
}

response:

{
    "message": "Field is removed"
}

PUT /change-movie-field

Меняет поле у заданного фильма

{
    "movie_id": 1,
    "field": "name",
    "new_value": "Sumerki"
}

response:

{
    "message": "Field is changed"
}

Releases

No releases published

Packages

No packages published

Languages