{"id":20115638,"url":"https://github.com/bucketonhead/java-filmorate","last_synced_at":"2026-05-12T10:32:12.179Z","repository":{"id":143618384,"uuid":"532743590","full_name":"BucketOnHead/java-filmorate","owner":"BucketOnHead","description":"Movie service for selecting, commenting, liking, finding popular films, adding friends, and receiving movie recommendations based on friends' likes.","archived":false,"fork":false,"pushed_at":"2023-03-22T10:01:43.000Z","size":868,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T19:19:53.605Z","etag":null,"topics":["h2","jdbctemplate","springboot2","sql"],"latest_commit_sha":null,"homepage":"","language":"Java","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/BucketOnHead.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":"2022-09-05T04:33:14.000Z","updated_at":"2023-03-13T08:02:13.000Z","dependencies_parsed_at":"2023-05-04T03:16:37.799Z","dependency_job_id":null,"html_url":"https://github.com/BucketOnHead/java-filmorate","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"yandex-praktikum/java-filmorate","purl":"pkg:github/BucketOnHead/java-filmorate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BucketOnHead%2Fjava-filmorate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BucketOnHead%2Fjava-filmorate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BucketOnHead%2Fjava-filmorate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BucketOnHead%2Fjava-filmorate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BucketOnHead","download_url":"https://codeload.github.com/BucketOnHead/java-filmorate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BucketOnHead%2Fjava-filmorate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32934472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T09:19:52.626Z","status":"ssl_error","status_checked_at":"2026-05-12T09:17:33.438Z","response_time":102,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["h2","jdbctemplate","springboot2","sql"],"created_at":"2024-11-13T18:36:05.395Z","updated_at":"2026-05-12T10:32:12.163Z","avatar_url":"https://github.com/BucketOnHead.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Filmorate\n\n\u003e Данный проект - это сервис для кинотеки,\n\u003e который дает возможность пользователям выбирать, \n\u003e комментировать и оценивать любимые фильмы, \n\u003e а также искать наиболее популярные среди них. \n\u003e Кроме того, на сервисе можно добавлять друзей \n\u003e и получать рекомендации на основе их лайков.\n\n## Оглавление\n\n- [База данных](#база-данных)\n- [Валидация](#валидация)\n- [Инструкция по установке](#инструкция-по-установке)\n- [Технологический стек](#технологический-стек)\n\n## База данных\n\n- [Схема БД](#схема-бд)\n- [Примеры запросов](#примеры-запросов)\n\n### Схема БД\n\n![](https://github.com/IvanMarakanov/java-filmorate/blob/main/src/main/resources/schema.png?raw=true)\n\n### Примеры запросов\n\n\u003cdetails\u003e\n    \u003csummary\u003e\u003ch3\u003eДля фильмов:\u003c/h3\u003e\u003c/summary\u003e\n\n* `Создание` фильма:\n\n```SQL\nINSERT INTO films (name,\n                   description,\n                   release_date,\n                   duration_in_minutes,\n                   mpa_rating_id)\nVALUES (?, ?, ?, ?, ?);\n```\n\n* `Обновление` фильма:\n\n```SQL\nUPDATE\n    films\nSET name                = ?,\n    description         = ?,\n    release_date        = ?,\n    duration_in_minutes = ?,\n    mpa_rating_id       = ?\nWHERE film_id = ?;\n```\n\n* `Получение` фильма `по идентификатору`:\n\n```SQL\nSELECT f.film_id,\n       f.name,\n       f.description,\n       f.release_date,\n       f.duration_in_minutes,\n       mp.name AS mpa_rating,\n       g.name  AS genre\nFROM films f\n         JOIN mpa_ratings mp ON f.mpa_rating_id = mp.mpa_rating_id\n         JOIN film_genres fg ON f.film_id = fg.film_id\n         JOIN genres g ON fg.genre_id = g.genre_id\nWHERE f.film_id = ?;\n```   \n\n* `Получение всех` фильмов:\n\n```SQL\nSELECT f.film_id,\n       f.name,\n       f.description,\n       f.release_date,\n       f.duration_in_minutes,\n       mp.name              AS mpa_rating,\n       GROUP_CONCAT(g.name) AS genres\nFROM films f\n         JOIN mpa_ratings mp ON f.mpa_rating_id = mp.mpa_rating_id\n         JOIN film_genres fg ON f.film_id = fg.film_id\n         JOIN genres g ON fg.genre_id = g.genre_id\nGROUP BY f.film_id;\n```\n\n* `Получение топ-N (по количеству лайков)` фильмов:\n```SQL\nSELECT f.film_id,\n       f.name,\n       f.description,\n       f.release_date,\n       f.duration_in_minutes,\n       mp.name           AS mpa_rating,\n       g.name            AS genre,\n       COUNT(fl.user_id) AS like_count\nFROM films f\n         JOIN mpa_ratings mp ON f.mpa_rating_id = mp.mpa_rating_id\n         JOIN film_genres fg ON f.film_id = fg.film_id\n         JOIN genres g ON fg.genre_id = g.genre_id\n         LEFT JOIN film_likes fl ON f.film_id = fl.film_id\nGROUP BY f.film_id,\n         mp.name,\n         g.name\nORDER BY like_count DESC LIMIT ?;\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e\u003ch3\u003eДля пользователей:\u003c/h3\u003e\u003c/summary\u003e\n\n* `Создание` пользователя:\n\n```SQL\nINSERT INTO users (email,\n                   login,\n                   name,\n                   birthday)\nVALUES (?, ?, ?, ?)\n```\n\n* `Обновление` пользователя:\n\n```SQL\nUPDATE\n    users\nSET email    = ?,\n    login    = ?,\n    name     = ?,\n    birthday = ?\nWHERE user_id = ?\n```\n\n* `Получение` пользователя `по идентификатору`:\n\n```SQL\nSELECT *\nFROM users\nWHERE user_id = ?\n```   \n\n* `Получение всех` пользователей:\n\n```SQL\nSELECT *\nFROM users\n``` \n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e\u003ch3\u003eДля жанров:\u003c/h3\u003e\u003c/summary\u003e\n\n* `Получение` жанра `по идентификатору`:\n\n```SQL\nSELECT *\nFROM genres\nWHERE genre_id = ?\n``` \n\n* `Получение всех` жанров:\n\n```SQL\nSELECT *\nFROM genres\n```   \n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e\u003ch3\u003eДля рейтингов MPA:\u003c/h3\u003e\u003c/summary\u003e\n\n* `Получение` рейтинга MPA `по идентификатору`:\n\n```SQL\nSELECT *\nFROM mpa_ratings\nWHERE mpa_rating_id = ?\n``` \n\n* `Получение всех` рейтингов MPA:\n\n```SQL\nSELECT *\nFROM mpa_ratings\n```   \n\u003c/details\u003e\n\n## Валидация\n\nВходные данные, поступающие в запросе,\nдолжны соответствовать определенным критериям:\n\n\u003cdetails\u003e\n    \u003csummary\u003e\u003ch3\u003eДля фильмов:\u003c/h3\u003e\u003c/summary\u003e\n\n* Название фильма должно быть указано и не может быть пустым\n* Максимальная длина описания фильма не должна превышать 200 символов\n* Дата релиза фильма должна быть не раньше 28 декабря 1895 года[^1]\n* Продолжительность фильма должна быть положительной\n* Рейтинг фильма должен быть указан\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e\u003ch3\u003eДля пользователей:\u003c/h3\u003e\u003c/summary\u003e\n\n* Электронная почта пользователя должна быть указана и соответствовать формату email\n* Логин пользователя должен быть указан и не содержать пробелов\n* Дата рождения пользователя должна быть указана и не может быть в будущем\n\n\u003c/details\u003e\n\n## Инструкция по установке\n\n- [Требования](#требования)\n- [Установка](#установка)\n- [Запуск](#запуск)\n\n### Требования\n\n- Apache Maven 3.6.0 или выше\n- Git\n- JDK 11 или выше\n\n### Установка\n\n1. Склонируйте репозиторий на свой компьютер с помощью команды:\n```bash\ngit clone https://github.com/BucketOnHead/java-filmorate.git\n```\n\n2. Перейдите в директорию проекта:\n```bash\ncd java-filmorate\n```\n\n3. Соберите проект с помощью Apache Maven:\n```bash\nmvn clean install\n```\n\n### Запуск\n\nПосле установки проекта, вы можете запустить его с помощью команды:\n```bash\nmvn spring-boot:run\n```\n\n## Технологический стек\n\n- Java 11\n- Spring boot 2\n- JDBC, SQL, H2\n- Apache Maven\n\n[^1]: 28 декабря 1895 года считается днём рождения кино.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbucketonhead%2Fjava-filmorate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbucketonhead%2Fjava-filmorate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbucketonhead%2Fjava-filmorate/lists"}