Skip to content

Instantly share code, notes, and snippets.

@lempiy
Last active July 3, 2017 08:44
Show Gist options
  • Save lempiy/e33b599d585e92143e6d85e56995dbd6 to your computer and use it in GitHub Desktop.
Save lempiy/e33b599d585e92143e6d85e56995dbd6 to your computer and use it in GitHub Desktop.

Завдання написати SPA клієнт для цього API. Задеплоєна версія АПІ доступна за урл https://film-api-go.herokuapp.com/. В даний момент доступні наступні ендпоінти.

POST - "/login" - ендпоінт авторизації, очкує отримати в тілі запиту JSON наступного формату:

{
  "login": "stepan",
  "password": "123456"
}

повертає в респонсі JWT токен з тривалістю дії в полі exp.

POST - "/auth" - ендпоінт для реєстрації нових юзерів. Очікує отримати в тілі запиту JSON наступного формату:

{
	"username": "John Doe",
	"password": "q1w2e3r4",
	"login": "doe",
	"age": 32,
	"telephone": "+3809312345678"
}

повертає JSON з полем success або з полем error.

GET - /api/v1/film - ендпоінт для вибору усіх достпних фільмів у базі данних. підтримує пагінацію параметрами URL в форматі limit/offset. Наприклад, запит /api/v1/film?limit=5&offset=10 поверне 5 фільмів з відступом у десять фільмів.

Підтримує фільтрацію за роком та жанрами (genre_id розділеними через кому). Наприклад:

api/v1/film?genre=1,2&year=2001&limit=10

Поверне до 10 фільмів з жанрам під айді 1 і 2 рік випуску яких - 2001.

Також повертає поля count - всього фільмів та left - булове значення - чи залишились фільми в базі. Приклад респонсу:

{
    "left": false,
    "count": 3,
    "result": [
        {
            "id": 2,
            "name": "Commando",
            "year": 1992,
            "added_at": "2017-06-20T19:37:32.932759Z",
            "genres": [
                {
                    "id": 1,
                    "name": "Comedy",
                    "added_at": "2017-06-20T19:30:28.683215Z"
                },
                {
                    "id": 2,
                    "name": "Horror",
                    "added_at": "2017-06-20T19:30:28.683215Z"
                }
            ]
        },
        {
            "id": 3,
            "name": "Red Mist",
            "year": 2000,
            "added_at": "2017-06-20T19:37:53.15788Z",
            "genres": [
                {
                    "id": 3,
                    "name": "Drama",
                    "added_at": "2017-06-20T19:30:28.683215Z"
                }
            ]
        }
    ]
}

POST - /api/v1/rent - ендпоінт оренди фільму. Доступний лише авторизованим юзерам. Під авторизованими юзерами мається на увазі той, у якого присутній HTTP Header у запиті з токеном в форматі:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTgyNDgxNzAsIm5hbWUiOiJsZW1waXkiLCJ1c2VyX2lkIjoxfQ.8O_rCqLSBnYaHsZph2Yp8JeV4wtQ_MHv3D5c_5_WTw8

В тілі запиту ендпоінт очікує отримати JSON з айді орендованого фільму:

{
	"film_id": 1
}

повертає JSON з полем success або з полем error.

POST - /api/v1/finish - ендпоінт для завершення оренди фільму Доступний лише авторизованим юзерам. В тілі запиту ендпоінт очікує отримати JSON з айді орендованого фільму:

{
	"film_id": 1
}

повертає JSON з полем success або з полем error.

POST - /api/v1/film - ендпоінт для додавання фільмів в базу. Він знадобиться для наповнення бази фільмами. Лише для Авторизованих юзерів. Оскільки спочатку вона буде пустою. Приймає він JSON в форматі:

{
	"name": "Commando",
	"year": 1990,
	"genres": [1,2]
}

GET - /api/v1/rented-film - ендпоінт для вибору усіх всіх орендованих фільмів авторизованим юзером. підтримує пагінацію параметрами URL в форматі limit/offset.

Підтримує фільтрацію за роком та жанрами (genre_id розділеними через кому). Наприклад:

api/v1/rented-film?genre=1,2&year=2001&limit=10

Поверне до 10 орендованих юзером фільмів з жанрам під айді 1 і 2 рік випуску яких - 2001.

Також повертає поля count - всього фільмів та left - булове значення - чи залишились фільми в базі. Приклад респонсу:

{
    "left": false,
    "count": 3,
    "result": [
        {
            "id": 2,
            "name": "Commando",
            "year": 1992,
            "added_at": "2017-06-20T19:37:32.932759Z",
            "genres": [
                {
                    "id": 1,
                    "name": "Comedy",
                    "added_at": "2017-06-20T19:30:28.683215Z"
                },
                {
                    "id": 2,
                    "name": "Horror",
                    "added_at": "2017-06-20T19:30:28.683215Z"
                }
            ]
        },
        {
            "id": 3,
            "name": "Red Mist",
            "year": 2000,
            "added_at": "2017-06-20T19:37:53.15788Z",
            "genres": [
                {
                    "id": 3,
                    "name": "Drama",
                    "added_at": "2017-06-20T19:30:28.683215Z"
                }
            ]
        }
    ]
}

Завдання розробити Single Page Aplication з сторінками авторизації, реєстрації, лістінгу фільмів, лістінгу орендованих фільмів(доступного лише для авторизованих юзерів), сторінкою деталей фільму, (де є кнопка орендувати фільм) та сторінкою деталей орендового юзером фільму (де є кнопка завершити оренду). Додатково може зробити сторінку додавання нового фільму, щоб було зручно їх додавати + в карму.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment