Skip to content

BeforyDeath/rent.movies

Repository files navigation

#rent.movies

Go Report Card codebeat badge

##Описание проекта PS.. Вариант в исполнении "Clean Architecture to Go applications" https://github.com/BeforyDeath/rent.movies.clean

Сервис по аренде фильмов, выполненный в рамках тестового задания:

Спроектировать API, документировать и реализовать HTTP/REST сервис используя язык Golang и PostgreSQL.

##Установка и настройка Для запуска PostgreSQL без лишней настройки и установки через тернии, запускаем его из докера docker run -d --name postgres -p 5432:5432 postgres или запускаем незамысловатый хелпер, который сделает тоже самое

sh ./postgres.sh start

Usage: ./postgresql.sh {start|stop|restart|clear}

Далее необходимо накатить базу. Это можно сделать передав скрипту параметр f и имя файла, а в нашем случае, просто выполнив:

go run cmd/main.go -f dump.sql

##Описание API ####Запросы Все API запросы отправляем методом POST, а в качестве транспорта данных используем JSON

####Ответы Ответ унифицирован и всегда содержит поля

Success (bool)      - флаг успешности выполнения
Data    {interface} - данные или null
Error   {interface} - ошибка или null

ЗЫ.. на текущий момент (момент написание документа), Error всегда возвращает строку ####Пагинация У методов возвращающих списки, можно в запросах использоваться лимиты и пейджинг:

limit   (int) - ограничение возвращаемых записей
page    (int) - номер страницы

Списки, возвращаются в массиве Rows и возвращают значение TotalCount, содержащее информацию о количестве записей в базе данных, с условием применённых в запросе фильтров

Пример:

[POST] /genre [request] {"limit":3, "page":2}

[respons]
{
    "Success": true,
    "Data":
    {
        "Rows":
        [
            {
                "Id": 3,
                "Name": "приключение"
            },
            {
                "Id": 5,
                "Name": "сериал"
            },
            {
                "Id": 1,
                "Name": "фантастика"
            }
        ],
        "TotalCount": 6
    },
    "Error": null
}    

##Описание методов ####Получить список жанров

[POST]:/genre

+пагинация

####Получить список фильмов

[POST]:/movie

+пагинация

+фильтры

year  (int)    - год выпуска
genre (string) - жанр

####Создать пользователя

[POST]:/user

Обязательные поля отмечены звёздочкой

login * (string) - логин
pass  * (string) - пароль
age     (int)    - возраст
name    (string) - полное имя
phone   (string) - телефон

####Авторизировать пользователя

[POST]:/login

login * (string) - логин
pass  * (string) - пароль

В случае успеха, метод возвращает новый созданный для пользователя токен

Token (string) - токен

Пример ответа: {"Success": true,"Data":{"Token": "eyJSsdfh..."},"Error": null}

###Аренда фильма

Все запросы связанные с арендой, доступны только по токену, передаваемому в HTTP заголовке с названием X-Access-Token.

####Арендовать фильм

[POST]:/rent/take

movieid * (int)    - идентификатор фильма

####Завершить аренду

[POST]:/rent/completed

movieid * (int)    - идентификатор фильма

####Получить список арендованных фильмов

[POST]:/rent/leased

+пагинация

Для просмотра истории, бравшихся ранее пользователем фильмов, можно используя фильтр:

history  (bool) - показать 

About

Example: http/rest api service in go/postgresql

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published