{"id":19952754,"url":"https://github.com/ivanmartynovleti/java-filmorate","last_synced_at":"2026-05-05T14:12:59.183Z","repository":{"id":161123355,"uuid":"628699516","full_name":"IvanMartynovLETI/java-filmorate","owner":"IvanMartynovLETI","description":" Бэкенд социальной сети, позволяющей выбрать фильм или сериал для просмотра.","archived":false,"fork":false,"pushed_at":"2023-07-25T19:59:20.000Z","size":448,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-03T15:59:11.094Z","etag":null,"topics":["h2-database","java","jdbctemplate","junit","lombok","maven","rest-api","slf4j","spring-boot","spring-framework","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/IvanMartynovLETI.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":"2023-04-16T18:47:42.000Z","updated_at":"2023-08-23T07:59:25.000Z","dependencies_parsed_at":"2023-07-25T20:17:14.632Z","dependency_job_id":null,"html_url":"https://github.com/IvanMartynovLETI/java-filmorate","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"yandex-praktikum/java-filmorate","purl":"pkg:github/IvanMartynovLETI/java-filmorate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanMartynovLETI%2Fjava-filmorate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanMartynovLETI%2Fjava-filmorate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanMartynovLETI%2Fjava-filmorate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanMartynovLETI%2Fjava-filmorate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IvanMartynovLETI","download_url":"https://codeload.github.com/IvanMartynovLETI/java-filmorate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanMartynovLETI%2Fjava-filmorate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278187829,"owners_count":25944822,"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","status":"online","status_checked_at":"2025-10-03T02:00:06.070Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-database","java","jdbctemplate","junit","lombok","maven","rest-api","slf4j","spring-boot","spring-framework","sql"],"created_at":"2024-11-13T01:14:20.538Z","updated_at":"2025-10-03T15:59:12.661Z","avatar_url":"https://github.com/IvanMartynovLETI.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java-filmorate\nДанное приложение является бэкендом сервиса, позволяющего выбрать фильм или сериал для просмотра, и обладающего\nрекомендательной системой. Ключевыми особенностями приложения являются:\n* Хранение информации о пользователях и фильмах в базе данных Н2.\n* Добавление оценок и комментариев пользователей к фильмам.\n* Добавление пользователей в друзья с возможностью последующего удаления из друзей.\n* Составление TOP-n фильмов по рейтингу.\n* Вывод списка общих с другом фильмов с их сортировкой по популярности.\n* Рекомендательная система поиска фильмов по пользователям с пересечением по максимальному числу лайков.\n* Лента событий\n#\nСтек проекта: Java, Spring Boot, Spring Framework, Lombok, Maven, JUnit, JdbcTemplate, H2, SQL, REST, SLF4J\n#\nВ данный коллективный проект были добавлены следующие функциональности:\n* \"Фильмы по режиссерам\" (ответственный Владимир Курнаков, ветка add-director).\n* \"Отзывы\" (ответственный Мартынов Иван, тимлид, ветка add-reviews).\n* \"Удаление фильмов и пользователей\" (ответственная Мария Лукьянова, ветка add-remove-endpoint).\n* \"Общие фильмы\" (ответственная Мария Лукьянова, ветка add-common-films).\n* \"Рекомендации\" (ответственная Гюзяль Сергейчук, ветка add-recommendations).\n* \"Поиск\" (ответственная Ольга Лизунова, ветка add-search).\n* \"Лента событий\" (ответственный Павел Трофимович, ветка add-feed).\n* \"Популярные фильмы\" (ответственный Павел Трофимович, ветка add-most-populars).\n#\nС целью реализации представленных выше возможностей были созданы:\n\n\u003cdetails\u003e\u003csummary\u003eЭндпойнты пути /users:\u003c/summary\u003e\n\n* POST /users - создание пользователя.\n* PUT /users - редактирование пользователя.\n* GET /users - получение коллекции всех пользователей.\n* GET /users/{id} - получение информации о пользователе по его идентификатору.\n* PUT /users/{id}/friends/{friendId} - добавление в друзья (одностороннее).\n* DELETE /users/{id}/friends/{friendId}  -удаление пользователя из друзей (одностороннее).\n* GET /users/{id}/friends - получение коллекции друзей пользователя с идентификатором id.\n* GET /users/{id}/friends/common/{otherId} - получение списка друзей, общих для пользователей с идентификаторами\n  id и otherId.\n* DELETE /users/{userId} - удаление пользователя.\n* GET /users/{id}/feed - возвращает ленту пользователя в виде коллекции.\n* GET /users/{id}/recommendations - получение рекомендаций в виде списка по фильмам для целевого пользователя.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eЭндпойнты пути /films:\u003c/summary\u003e\n\n* POST /films - создание фильма.\n* PUT /films - редактирование фильма.\n* GET /films - получение коллекции всех фильмов.\n* GET /films/{id} - получение фильма по его идентификатору.\n* PUT /films/{id}/like/{userId} - поставить лайк фильму с идентификатором id от пользователя с идентификатором\n  userId.\n* DELETE /films/{id}/like/{userId} - удалить лайк фильму с идентификатором id от пользователя с идентификатором\n  userId.\n* GET /films/popular?count={count} - получить список из count фильмов по количеству лайков. Если значение параметра\n  count не задано, то будет получено первые 10 фильмов.\n* DELETE /films/{filmId} - удаление фильма по его идентификатору.\n* GET /films/common?userId={userId}\u0026friendId={friendId} - возвращает список фильмов, общий для пользователей с\n  идентификаторами userId и fiendId, отсортированный по популярности.\n* GET /films/director/{directorId} - возвращает список фильмов режиссера с идентификатором directorId.\n* GET /films/search?query={query}\u0026by={by} - возвращает список отсортированных по популярности фильмов. Параметр\n  query - текст для поиска, параметр by может принимать значения director (производится поиск по режиссеру), title\n  (по названию), также оба параметра могут следовать через запятую при поиске по режиссеру и названию.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eЭндпойнты пути /director:\u003c/summary\u003e\n\n* GET /directors - получение множества всех режиссеров.\n* POST /directors - добавление режиссера.\n* GET /directors/{id} - получение режиссера по его идентификатору.\n* PUT /directors - редактирование режиссера.\n* DELETE /directors/{id} - удаление режиссера по его идентификатору.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eЭндпойнты пути /genres:\u003c/summary\u003e\n\n* GET /genres - получение коллекции всех жанров.\n* GET /genres/{id} - получение информации о жанре по его идентификатору.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eЭндпойнты пути /mpa:\u003c/summary\u003e\n\n* GET /mpa - получение коллекции всех рейтингов.\n* GET /mpa/{id} - получение информации о рейтинге по его идентификатору.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eЭндпойнты пути /reviews:\u003c/summary\u003e\n\n* POST /reviews - создание отзыва.\n* PUT /reviews - редактирование отзыва.\n* DELETE /reviews/{id} - удаление отзыва по его идентификатору.\n* GET /reviews/{id} - получение отзыва по его идентификатору.\n* GET /reviews?filmId={filmId}\u0026count={count} - получение всех отзывов по идентификатору фильма, если фильм не\n  указан, то все. Если количество не указано, то 10.\n* PUT /reviews/{id}/like/{userId} - пользователь ставит лайк фильму.\n* PUT /reviews/{id}/dislike/{userId} - пользователь ставит дизлайк фильму.\n* DELETE /reviews/{id}/like/{userId} - пользователь удаляет лайк фильму.\n* DELETE /reviews/{id}/dislike/{userId} - пользователь удаляет дизлайк фильму.\n\n\u003c/details\u003e\n\n#\n\u003cp align=\"center\"\u003eСхема базы данных\u003c/p\u003e\n\n![Диаграмма базы данных](/database_diagram.jpg)\n\nПримечания:\n1. В таблице user_friends_status тип поля status_of_friendship - varchar с ограничениями на принимаемые значения\n   (Confirmed или Unconfirmed).\n2. В этой же таблице user_id - id пользователя, инициировавшего добавление в друзья,\n   friend_id - id пользователя, подтверждающего статус дружбы.\n\nПример запроса к базе, возвращающего логины пользователей, которые отправили запрос на добавление в друзья к\nпользователю с логином login3 и статус дружбы которых не подтвержден:\n\n    SELECT DISTINCT\n           u.login\n    FROM users AS u\n    INNER JOIN user_friends_status AS ufs ON u.users_id = ufs.user_id\n    INNER JOIN users AS ua ON ua.users_id = ufs.friend_id\n    WHERE ufs.status_of_friendship = 'Unconfirmed' AND ua.login = 'login3';\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivanmartynovleti%2Fjava-filmorate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivanmartynovleti%2Fjava-filmorate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivanmartynovleti%2Fjava-filmorate/lists"}