diff --git a/README.md b/README.md index 2cf454a..0b981f3 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,89 @@ -# java-filmorate -Template repository for Filmorate project. +# Filmorate DB + +Filmorate — это база данных для социальной платформы о кино, где пользователи могут лайкать фильмы, добавлять друзей и просматривать информацию о фильмах, жанрах и рейтингах. + +## Структура базы + +- `users` — пользователи +- `films` — фильмы +- `genres` — жанры фильмов +- `rating` — возрастные рейтинги +- `film_genre` — связь "многие ко многим" между фильмами и жанрами +- `film_likes` — лайки пользователей +- `friends` — друзья пользователей + +## Ссылка на диаграмму +https://dbdiagram.io/d/Filmorate-67fe8eaa9cea640381d41f06 + +## Примеры SQL-запросов + +### Создать все таблицы +```sql +CREATE TABLE "films" ( + "id" integer PRIMARY KEY, + "name" varchar(100) NOT NULL, + "description" varchar(200), + "release_date" timestamp, + "duration" integer, + "rating_id" integer +); + +CREATE TABLE "rating" ( + "id" integer PRIMARY KEY, + "title" varchar(20) +); + +CREATE TABLE "film_likes" ( + "user_id" integer, + "film_id" integer, + PRIMARY KEY ("user_id", "film_id") +); + +CREATE TABLE "users" ( + "id" integer PRIMARY KEY, + "email" varchar(100) NOT NULL, + "login" varchar(100) NOT NULL, + "name" varchar(100), + "birthday" timestamp +); + +CREATE TABLE "genres" ( + "id" integer PRIMARY KEY, + "title" varchar(100) UNIQUE NOT NULL +); + +CREATE TABLE "film_genre" ( + "film_id" integer, + "genre_id" integer, + PRIMARY KEY ("film_id", "genre_id") +); + +CREATE TABLE "friends" ( + "user_id" integer, + "friend_id" integer, + "confirmed" bool, + PRIMARY KEY ("user_id", "friend_id") +); + +ALTER TABLE "films" ADD FOREIGN KEY ("rating_id") REFERENCES "rating" ("id"); + +ALTER TABLE "film_likes" ADD FOREIGN KEY ("user_id") REFERENCES "users" ("id"); + +ALTER TABLE "film_likes" ADD FOREIGN KEY ("film_id") REFERENCES "films" ("id"); + +ALTER TABLE "film_genre" ADD FOREIGN KEY ("film_id") REFERENCES "films" ("id"); + +ALTER TABLE "film_genre" ADD FOREIGN KEY ("genre_id") REFERENCES "genres" ("id"); + +ALTER TABLE "friends" ADD FOREIGN KEY ("user_id") REFERENCES "users" ("id"); + +ALTER TABLE "friends" ADD FOREIGN KEY ("friend_id") REFERENCES "users" ("id"); +``` + +### Получить все фильмы с жанрами и рейтингом +```sql +SELECT f.id, f.name, f.description, r.title AS rating, g.title AS genre +FROM films f +LEFT JOIN rating r ON f.rating_id = r.id +LEFT JOIN film_genre fg ON f.id = fg.film_id +LEFT JOIN genres g ON fg.genre_id = g.id; \ No newline at end of file diff --git a/db_schema.png b/db_schema.png new file mode 100644 index 0000000..634e35f Binary files /dev/null and b/db_schema.png differ diff --git a/src/main/java/ru/yandex/practicum/filmorate/model/User.java b/src/main/java/ru/yandex/practicum/filmorate/model/User.java index 95c2eda..e8ce909 100644 --- a/src/main/java/ru/yandex/practicum/filmorate/model/User.java +++ b/src/main/java/ru/yandex/practicum/filmorate/model/User.java @@ -30,7 +30,7 @@ public class User { private String login; private String name; - @PastOrPresent(message = "Дата рождения пользователя не может быть в будущем") + @PastOrPresent(message = "Дата рождения пользователя не должна быть в будущем") private LocalDate birthday; public User(Long id, String email, String login, String name, LocalDate birthday) {