{"id":17991293,"url":"https://github.com/lempiy/film_api","last_synced_at":"2026-03-16T16:08:50.973Z","repository":{"id":98624596,"uuid":"95049948","full_name":"lempiy/Film_API","owner":"lempiy","description":":movie_camera:  Film API written in Golang Echo with JWT Authorization.","archived":false,"fork":false,"pushed_at":"2017-06-30T22:27:19.000Z","size":1838,"stargazers_count":2,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-20T22:50:33.687Z","etag":null,"topics":["echo","golang","jwt","rest-api"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lempiy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-21T22:01:21.000Z","updated_at":"2020-05-26T11:46:24.000Z","dependencies_parsed_at":"2023-04-24T22:01:52.519Z","dependency_job_id":null,"html_url":"https://github.com/lempiy/Film_API","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lempiy%2FFilm_API","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lempiy%2FFilm_API/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lempiy%2FFilm_API/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lempiy%2FFilm_API/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lempiy","download_url":"https://codeload.github.com/lempiy/Film_API/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245562036,"owners_count":20635851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["echo","golang","jwt","rest-api"],"created_at":"2024-10-29T19:21:01.195Z","updated_at":"2026-03-16T16:08:50.897Z","avatar_url":"https://github.com/lempiy.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## How to start working with API?\n\n\n1. Install [docker](https://docs.docker.com/engine/installation/) and [docker-compose](https://docs.docker.com/compose/install/)\n\n2. From projects root build containers\n\n`$ docker-compose build`\n\n3. Start a project\n\n`$ docker-compose up`\n\n4. Bash into Golang container\n\n`$ docker exec -it golang_echo bash`\n\n5. Init SQL schema with fallowing:\n\n`$ cd /db \u0026\u0026 go run init.go ./init.sql`\n\n\n### You are ready to GO! Server works on port 8001\n\n\n***\n\n\n#### __UA__\n\n\n## Доступні методи\n\n\n*POST* - \"/login\" - ендпоінт авторизації, очкує отримати в тілі запиту JSON наступного формату:\n```json\n{\n  \"login\": \"stepan\",\n  \"password\": \"123456\"\n}\n```\nповертає в респонсі JWT токен з тривалістю дії в полі `exp`.\n\n\n*POST* - \"/auth\" - ендпоінт для реєстрації нових юзерів. Очікує отримати в тілі запиту JSON наступного формату:\n```json\n{\n\t\"username\": \"John Doe\",\n\t\"password\": \"q1w2e3r4\",\n\t\"login\": \"doe\",\n\t\"age\": 32,\n\t\"telephone\": \"+380936557609\"\n}\n```\nповертає JSON з полем success або з полем error.\n\n\n*GET* - `/api/v1/film` - ендпоінт для вибору усіх достпних фільмів у базі данних. підтримує пагінацію параметрами URL\nв форматі `limit`/`offset`. Наприклад, запит `/api/v1/film?limit=5\u0026offset=10` поверне 5 фільмів з відступом у десять фільмів. \n\nПідтримує фільтрацію за роком та жанрами (genre_id розділеними через кому). Наприклад:\n\n`api/v1/film?genre=1,2\u0026year=2001\u0026limit=10`\n\nПоверне до 10 фільмів з жанрам під айді 1 і 2 рік випуску яких - 2001.\n\nТакож повертає поля count - всього фільмів та left - булове значення - чи залишились фільми в базі.\nПриклад респонсу:\n```json\n{\n    \"left\": false,\n    \"count\": 3,\n    \"result\": [\n        {\n            \"id\": 2,\n            \"name\": \"Commando\",\n            \"year\": 1992,\n            \"added_at\": \"2017-06-20T19:37:32.932759Z\",\n            \"genres\": [\n                {\n                    \"id\": 1,\n                    \"name\": \"Comedy\",\n                    \"added_at\": \"2017-06-20T19:30:28.683215Z\"\n                },\n                {\n                    \"id\": 2,\n                    \"name\": \"Horror\",\n                    \"added_at\": \"2017-06-20T19:30:28.683215Z\"\n                }\n            ]\n        },\n        {\n            \"id\": 3,\n            \"name\": \"Red Mist\",\n            \"year\": 2000,\n            \"added_at\": \"2017-06-20T19:37:53.15788Z\",\n            \"genres\": [\n                {\n                    \"id\": 3,\n                    \"name\": \"Drama\",\n                    \"added_at\": \"2017-06-20T19:30:28.683215Z\"\n                }\n            ]\n        }\n    ]\n}\n```\n\n\n*POST* - `/api/v1/rent` - ендпоінт оренди фільму. Доступний лише авторизованим юзерам. Під авторизованими юзерами мається \nна увазі той, у якого присутній HTTP Header у запиті з токеном в форматі:\n\n`Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTgyNDgxNzAsIm5hbWUiOiJsZW1waXkiLCJ1c2VyX2lkIjoxfQ.8O_rCqLSBnYaHsZph2Yp8JeV4wtQ_MHv3D5c_5_WTw8`\n\nВ тілі запиту ендпоінт очікує отримати JSON з айді орендованого фільму:\n```json\n{\n\t\"film_id\": 1\n}\n```\nповертає JSON з полем success або з полем error.\n\n\n*POST* - `/api/v1/finish` - ендпоінт для завершення оренди фільму  Доступний лише авторизованим юзерам.\nВ тілі запиту ендпоінт очікує отримати JSON з айді орендованого фільму:\n```json\n{\n\t\"film_id\": 1\n}\n```\nповертає JSON з полем success або з полем error.\n\n\n*POST* - `/api/v1/film` - ендпоінт для додавання фільмів в базу. Він знадобиться для наповнення бази фільмами. Лише для Авторизованих юзерів. Оскільки спочатку вона буде пустою. Приймає він JSON в форматі:\n```json\n{\n\t\"name\": \"Commando\",\n\t\"year\": 1990,\n\t\"genres\": [1,2]\n}\n```\n\n\n*GET* - `/api/v1/rented-film` - ендпоінт для вибору усіх всіх орендованих фільмів авторизованим юзером. підтримує пагінацію параметрами URL\nв форматі `limit`/`offset`.\n\nПідтримує фільтрацію за роком та жанрами (genre_id розділеними через кому). Наприклад:\n\n`api/v1/rented-film?genre=1,2\u0026year=2001\u0026limit=10`\n\nПоверне до 10 орендованих юзером фільмів з жанрам під айді 1 і 2 рік випуску яких - 2001.\n\n Також повертає поля count - всього фільмів та left - булове значення - чи залишились фільми в базі.\nПриклад респонсу:\n```json\n{\n    \"left\": false,\n    \"count\": 3,\n    \"result\": [\n        {\n            \"id\": 2,\n            \"name\": \"Commando\",\n            \"year\": 1992,\n            \"added_at\": \"2017-06-20T19:37:32.932759Z\",\n            \"genres\": [\n                {\n                    \"id\": 1,\n                    \"name\": \"Comedy\",\n                    \"added_at\": \"2017-06-20T19:30:28.683215Z\"\n                },\n                {\n                    \"id\": 2,\n                    \"name\": \"Horror\",\n                    \"added_at\": \"2017-06-20T19:30:28.683215Z\"\n                }\n            ]\n        },\n        {\n            \"id\": 3,\n            \"name\": \"Red Mist\",\n            \"year\": 2000,\n            \"added_at\": \"2017-06-20T19:37:53.15788Z\",\n            \"genres\": [\n                {\n                    \"id\": 3,\n                    \"name\": \"Drama\",\n                    \"added_at\": \"2017-06-20T19:30:28.683215Z\"\n                }\n            ]\n        }\n    ]\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flempiy%2Ffilm_api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flempiy%2Ffilm_api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flempiy%2Ffilm_api/lists"}