From aa2e69012479f61e42b2c490e6f2b344d30a2af2 Mon Sep 17 00:00:00 2001 From: skettiks Date: Thu, 5 Mar 2026 23:52:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20FilmRepo?= =?UTF-8?q?sitory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/init.sql | 59 ---------------- .../persistence/FilmLibraryRepository.kt | 5 ++ .../adapters/persistence/FilmRepository.kt | 67 +++++++++++++++++++ .../adapters/persistence/UserRepository.kt | 4 ++ src/main/resources/db/migration/.gitkeep | 0 src/main/resources/db/migration/V1__init.sql | 59 ++++++++++++++++ 6 files changed, 135 insertions(+), 59 deletions(-) delete mode 100644 sql/init.sql create mode 100644 src/main/kotlin/com/project/movienight/adapters/persistence/FilmLibraryRepository.kt create mode 100644 src/main/kotlin/com/project/movienight/adapters/persistence/FilmRepository.kt create mode 100644 src/main/kotlin/com/project/movienight/adapters/persistence/UserRepository.kt delete mode 100644 src/main/resources/db/migration/.gitkeep create mode 100644 src/main/resources/db/migration/V1__init.sql diff --git a/sql/init.sql b/sql/init.sql deleted file mode 100644 index d153740..0000000 --- a/sql/init.sql +++ /dev/null @@ -1,59 +0,0 @@ --- DROP SCHEMA public; --- CREATE SCHEMA public AUTHORIZATION pg_database_owner; --- COMMENT ON SCHEMA public IS 'standard public schema'; - --- public.genres определение --- Drop table -DROP TABLE if exists public.genres; -CREATE TABLE public.genres ( - id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, - "name" varchar NULL, - CONSTRAINT genres_unique PRIMARY KEY (id) -); - - --- public.users определение --- Drop table -DROP TABLE if exists public.users; -CREATE TABLE public.users ( - id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, - login varchar NOT NULL, - "password" varchar NOT NULL, - CONSTRAINT users_unique UNIQUE (id) -); - - --- public.films определение --- Drop table -DROP TABLE if exists public.films; -CREATE TABLE public.films ( - id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, - title varchar NOT NULL, - genreid int4 NOT NULL, - issuedate date NULL, - CONSTRAINT films_unique UNIQUE(id) -); - -DROP TABLE if exists public.fiml_genres; -CREATE TABLE public.film_genres ( - id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, - genreid int4 NOT NULL, - filmid int4 NOT NULL, - CONSTRAINT film_genres_genre_fk FOREIGN KEY (genreid) REFERENCES public.genres(id), - CONSTRAINT film_genres_film_fk FOREIGN KEY (filmid) REFERENCES public.films(id) -); - - --- Drop table -DROP TABLE if exists public.favorites; -CREATE TABLE public.favorites ( - id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, - userid int4 NULL, - filmid int4 NULL, - "comment" varchar NULL, - isviewed bool NULL, - CONSTRAINT favorites_unique PRIMARY KEY (id), - CONSTRAINT favorites_films_fk FOREIGN KEY (filmid) REFERENCES public.films(id), - CONSTRAINT favorites_users_fk FOREIGN KEY (userid) REFERENCES public.users(id) -); - diff --git a/src/main/kotlin/com/project/movienight/adapters/persistence/FilmLibraryRepository.kt b/src/main/kotlin/com/project/movienight/adapters/persistence/FilmLibraryRepository.kt new file mode 100644 index 0000000..2c524e9 --- /dev/null +++ b/src/main/kotlin/com/project/movienight/adapters/persistence/FilmLibraryRepository.kt @@ -0,0 +1,5 @@ +package com.project.movienight.adapters.persistence + +import org.springframework.jdbc.core.JdbcTemplate + +class FilmLibraryRepository(private val jdbc: JdbcTemplate) {} diff --git a/src/main/kotlin/com/project/movienight/adapters/persistence/FilmRepository.kt b/src/main/kotlin/com/project/movienight/adapters/persistence/FilmRepository.kt new file mode 100644 index 0000000..35105c1 --- /dev/null +++ b/src/main/kotlin/com/project/movienight/adapters/persistence/FilmRepository.kt @@ -0,0 +1,67 @@ +package com.project.movienight.adapters.persistence + +import com.project.movienight.domain.model.Film +import org.springframework.jdbc.core.JdbcTemplate +import org.springframework.stereotype.Repository +import java.util.UUID + +@Repository +class FilmRepository(private val jdbc: JdbcTemplate) { + + fun findById(id: UUID): Film? = + jdbc.queryForObject( + "SELECT * FROM films WHERE id = ?", + { rs, _ -> + Film( + id = UUID.fromString(rs.getString("id")), + title = rs.getString("title"), + description = rs.getString("description"), + ) + }, + id.toString() + ) + + fun findAll(): List = + jdbc.query( + "SELECT * FROM films" + ) { rs, _ -> + Film( + id = UUID.fromString(rs.getString("id")), + title = rs.getString("title"), + description = rs.getString("description"), + ) + } + + fun findTopN(limit: Int, sortBy: String = "title"): List = + jdbc.query( + "SELECT * FROM films ORDER BY $sortBy LIMIT ?", + { rs, _ -> + Film( + id = UUID.fromString(rs.getString("id")), + title = rs.getString("title"), + description = rs.getString("description"), + ) + }, + limit + ) + + fun save(film: Film) { + jdbc.update( + """ + INSERT INTO films (id, title, description) + VALUES (?, ?, ?) + ON CONFLICT (id) DO UPDATE + SET title = ?, description = ? + """, + film.id.toString(), film.title, film.description, + film.title, film.description + ) + } + + fun deleteById(id: UUID) { + jdbc.update( + "DELETE FROM films WHERE id = ?", + id.toString() + ) + } +} diff --git a/src/main/kotlin/com/project/movienight/adapters/persistence/UserRepository.kt b/src/main/kotlin/com/project/movienight/adapters/persistence/UserRepository.kt new file mode 100644 index 0000000..84a59f0 --- /dev/null +++ b/src/main/kotlin/com/project/movienight/adapters/persistence/UserRepository.kt @@ -0,0 +1,4 @@ +package com.project.movienight.adapters.persistence + +class UserRepository { +} diff --git a/src/main/resources/db/migration/.gitkeep b/src/main/resources/db/migration/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/db/migration/V1__init.sql b/src/main/resources/db/migration/V1__init.sql new file mode 100644 index 0000000..da677c4 --- /dev/null +++ b/src/main/resources/db/migration/V1__init.sql @@ -0,0 +1,59 @@ +-- DROP SCHEMA public; +-- CREATE SCHEMA public AUTHORIZATION pg_database_owner; +-- COMMENT ON SCHEMA public IS 'standard public schema'; + +-- public.genres определение +-- Drop table +DROP TABLE if exists public.genres; +CREATE TABLE public.genres ( + id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + "name" varchar NULL, + CONSTRAINT genres_unique PRIMARY KEY (id) +); + + +-- public.users определение +-- Drop table +DROP TABLE if exists public.users; +CREATE TABLE public.users ( + id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + login varchar NOT NULL, + "password" varchar NOT NULL, + CONSTRAINT users_unique UNIQUE (id) +); + + +-- public.films определение +-- Drop table +DROP TABLE if exists public.films; +CREATE TABLE public.films ( + id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + title varchar NOT NULL, + genre_id int4 NOT NULL, + issue_date date NULL, + CONSTRAINT films_unique UNIQUE(id) +); + +DROP TABLE if exists public.film_genres; +CREATE TABLE public.film_genres ( + id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + genre_id int4 NOT NULL, + film_id int4 NOT NULL, + CONSTRAINT film_genres_genre_fk FOREIGN KEY (genre_id) REFERENCES public.genres(id), + CONSTRAINT film_genres_film_fk FOREIGN KEY (film_id) REFERENCES public.films(id) +); + + +-- Drop table +DROP TABLE if exists public.favorites; +CREATE TABLE public.favorites ( + id int4 GENERATED ALWAYS AS IDENTITY NOT NULL, + userid int4 NULL, + film_id int4 NULL, + "comment" varchar NULL, + is_viewed bool NULL, + CONSTRAINT favorites_unique PRIMARY KEY (id), + CONSTRAINT favorites_films_fk FOREIGN KEY (film_id) REFERENCES public.films(id), + CONSTRAINT favorites_users_fk FOREIGN KEY (user_id) REFERENCES public.users(id) +); +