From d69419b90dfc64ed8c5fda36b8bd2637609dd305 Mon Sep 17 00:00:00 2001 From: Elena Ponomareva Date: Sun, 19 Apr 2026 14:03:34 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D1=8E=20?= =?UTF-8?q?=D0=B2=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8F=20/=20=D0=B2=D0=BE=20=D0=B2=D1=81=D0=B5?= =?UTF-8?q?=D0=B9=20=D0=B1=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/jdbc/FilmRepository.kt | 9 +++++++ .../movienight/adapters/web/FilmController.kt | 17 ++++++------ .../adapters/web/FilmLibraryController.kt | 27 +++++++++++++------ .../ports/output/FilmRepositoryPort.kt | 2 ++ .../application/services/FilmService.kt | 4 +++ 5 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/com/project/movienight/adapters/persistence/jdbc/FilmRepository.kt b/src/main/kotlin/com/project/movienight/adapters/persistence/jdbc/FilmRepository.kt index 2883aca..a13f721 100644 --- a/src/main/kotlin/com/project/movienight/adapters/persistence/jdbc/FilmRepository.kt +++ b/src/main/kotlin/com/project/movienight/adapters/persistence/jdbc/FilmRepository.kt @@ -61,6 +61,15 @@ class FilmRepository( filmRowMapper, ) + override fun findByTitle(title: String): Film? { + val films = jdbc.query( + "SELECT id, title, description FROM films WHERE title = ?", + filmRowMapper, + title + ) + return films.firstOrNull() + } + override fun deleteById(id: UUID) { jdbc.update("DELETE FROM films WHERE id = ?", id) } diff --git a/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt b/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt index d4d52ef..35f963e 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt @@ -8,15 +8,9 @@ import com.project.movienight.application.ports.input.CreateFilmUseCase import com.project.movienight.application.ports.input.DeleteFilmUseCase import com.project.movienight.application.ports.input.EditFilmCommand import com.project.movienight.application.ports.input.EditFilmUseCase +import com.project.movienight.application.services.FilmService import org.springframework.http.HttpStatus -import org.springframework.web.bind.annotation.DeleteMapping -import org.springframework.web.bind.annotation.PatchMapping -import org.springframework.web.bind.annotation.PathVariable -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.ResponseStatus -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* import java.util.UUID @RestController @@ -25,6 +19,7 @@ class FilmController( private val createFilmUseCase: CreateFilmUseCase, private val editFilmUseCase: EditFilmUseCase, private val deleteFilmUseCase: DeleteFilmUseCase, + private val filmService: FilmService, ) { @PostMapping @ResponseStatus(HttpStatus.CREATED) @@ -61,4 +56,10 @@ class FilmController( fun delete( @PathVariable id: UUID, ) = deleteFilmUseCase.delete(id) + + @GetMapping("/search") + fun searchByTitle( + @RequestParam title: String, + ): FilmResponse? = + filmService.findByTitle(title)?.let { FilmResponse.fromDomain(it) } } diff --git a/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt b/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt index 59022b0..446e57a 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt @@ -2,6 +2,7 @@ package com.project.movienight.adapters.web import com.project.movienight.adapters.web.dto.request.CreateFilmLibraryRequest import com.project.movienight.adapters.web.dto.response.FilmLibraryResponse +import com.project.movienight.adapters.web.dto.response.FilmResponse import com.project.movienight.application.ports.input.AddFilmToLibraryCommand import com.project.movienight.application.ports.input.AddFilmToLibraryUseCase import com.project.movienight.application.ports.input.CreateFilmLibraryCommand @@ -10,15 +11,9 @@ import com.project.movienight.application.ports.input.GetFilmLibraryQuery import com.project.movienight.application.ports.input.GetFilmLibraryUseCase import com.project.movienight.application.ports.input.RemoveFilmFromLibraryCommand import com.project.movienight.application.ports.input.RemoveFilmFromLibraryUseCase +import com.project.movienight.application.services.FilmService import org.springframework.http.HttpStatus -import org.springframework.web.bind.annotation.DeleteMapping -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.PathVariable -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.ResponseStatus -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* import java.util.UUID @RestController @@ -28,6 +23,7 @@ class FilmLibraryController( private val addFilmToLibraryUseCase: AddFilmToLibraryUseCase, private val removeFilmFromLibraryUseCase: RemoveFilmFromLibraryUseCase, private val getFilmLibraryUseCase: GetFilmLibraryUseCase, + private val filmService: FilmService, ) { @PostMapping @ResponseStatus(HttpStatus.CREATED) @@ -80,4 +76,19 @@ class FilmLibraryController( filmId = filmId, ), ) + + @GetMapping("/available-films") + fun getAvailableFilms( + @PathVariable userId: UUID, + ): List { + val userLibrary = getFilmLibraryUseCase.getLibrary( + GetFilmLibraryQuery(userId = userId) + ) + + val allFilms = filmService.findAll() + + val availableFilms = allFilms.filter { it.id != userLibrary.filmId } + + return availableFilms.map { FilmResponse.fromDomain(it) } + } } diff --git a/src/main/kotlin/com/project/movienight/application/ports/output/FilmRepositoryPort.kt b/src/main/kotlin/com/project/movienight/application/ports/output/FilmRepositoryPort.kt index 91d45b6..c0d3938 100644 --- a/src/main/kotlin/com/project/movienight/application/ports/output/FilmRepositoryPort.kt +++ b/src/main/kotlin/com/project/movienight/application/ports/output/FilmRepositoryPort.kt @@ -10,5 +10,7 @@ interface FilmRepositoryPort { fun findAll(): List + fun findByTitle(title: String): Film? + fun deleteById(id: UUID) } diff --git a/src/main/kotlin/com/project/movienight/application/services/FilmService.kt b/src/main/kotlin/com/project/movienight/application/services/FilmService.kt index 4166760..9410c3f 100644 --- a/src/main/kotlin/com/project/movienight/application/services/FilmService.kt +++ b/src/main/kotlin/com/project/movienight/application/services/FilmService.kt @@ -62,4 +62,8 @@ class FilmService( filmRepository.deleteById(id) } + + fun findByTitle(title: String): Film? = filmRepository.findByTitle(title) + + fun findAll(): List = filmRepository.findAll() } -- 2.54.0 From 88837d2e185ad0771f16839b3e9b80bb0a242cdd Mon Sep 17 00:00:00 2001 From: Elena Ponomareva Date: Sun, 19 Apr 2026 16:06:44 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=B4=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BB?= =?UTF-8?q?=D0=B0=20get=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D0=BB=D0=B5=D1=80=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../movienight/adapters/web/FilmController.kt | 9 +++++++ .../adapters/web/FilmLibraryController.kt | 13 ++++++++++ .../movienight/adapters/web/UserController.kt | 24 ++++++++++++------- .../application/services/FilmService.kt | 2 ++ .../application/services/UserService.kt | 4 ++++ 5 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt b/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt index 35f963e..045adf6 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt @@ -9,6 +9,7 @@ import com.project.movienight.application.ports.input.DeleteFilmUseCase import com.project.movienight.application.ports.input.EditFilmCommand import com.project.movienight.application.ports.input.EditFilmUseCase import com.project.movienight.application.services.FilmService +import com.project.movienight.domain.exception.EntityNotFoundException import org.springframework.http.HttpStatus import org.springframework.web.bind.annotation.* import java.util.UUID @@ -57,6 +58,14 @@ class FilmController( @PathVariable id: UUID, ) = deleteFilmUseCase.delete(id) + @GetMapping("/{id}") + fun getById( + @PathVariable id: UUID, + ): FilmResponse = + FilmResponse.fromDomain( + filmService.findById(id) ?: throw EntityNotFoundException("Film", id.toString()) + ) + @GetMapping("/search") fun searchByTitle( @RequestParam title: String, diff --git a/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt b/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt index 446e57a..0989dff 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt @@ -50,6 +50,19 @@ class FilmLibraryController( ), ) + @GetMapping("/films") + fun getAllFilmsInLibrary( + @PathVariable userId: UUID, + ): List { + val library = getFilmLibraryUseCase.getLibrary( + GetFilmLibraryQuery(userId = userId) + ) + + val film = filmService.findById(library.filmId) + + return film?.let { listOf(FilmResponse.fromDomain(it)) } ?: emptyList() + } + @PostMapping("/films/{filmId}") @ResponseStatus(HttpStatus.CREATED) fun addFilm( diff --git a/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt b/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt index f270736..5bdbc58 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt @@ -8,15 +8,10 @@ import com.project.movienight.application.ports.input.CreateUserUseCase import com.project.movienight.application.ports.input.DeleteUserUseCase import com.project.movienight.application.ports.input.EditUserCommand import com.project.movienight.application.ports.input.EditUserUseCase +import com.project.movienight.application.services.UserService +import com.project.movienight.domain.exception.EntityNotFoundException import org.springframework.http.HttpStatus -import org.springframework.web.bind.annotation.DeleteMapping -import org.springframework.web.bind.annotation.PatchMapping -import org.springframework.web.bind.annotation.PathVariable -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.ResponseStatus -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* import java.util.UUID @RestController @@ -25,6 +20,7 @@ class UserController( private val createUserUseCase: CreateUserUseCase, private val editUserUseCase: EditUserUseCase, private val deleteUserUseCase: DeleteUserUseCase, + private val userService: UserService, ) { @PostMapping @ResponseStatus(HttpStatus.CREATED) @@ -40,6 +36,18 @@ class UserController( ), ) + @GetMapping + fun getAll(): List = + userService.findAll().map { UserResponse.fromDomain(it) } + + @GetMapping("/{id}") + fun getById( + @PathVariable id: UUID, + ): UserResponse = + UserResponse.fromDomain( + userService.findById(id) ?: throw EntityNotFoundException("User", id.toString()) + ) + @PatchMapping("/{id}") fun edit( @PathVariable id: UUID, diff --git a/src/main/kotlin/com/project/movienight/application/services/FilmService.kt b/src/main/kotlin/com/project/movienight/application/services/FilmService.kt index 9410c3f..6ed4748 100644 --- a/src/main/kotlin/com/project/movienight/application/services/FilmService.kt +++ b/src/main/kotlin/com/project/movienight/application/services/FilmService.kt @@ -66,4 +66,6 @@ class FilmService( fun findByTitle(title: String): Film? = filmRepository.findByTitle(title) fun findAll(): List = filmRepository.findAll() + + fun findById(id: UUID): Film? = filmRepository.findById(id) } diff --git a/src/main/kotlin/com/project/movienight/application/services/UserService.kt b/src/main/kotlin/com/project/movienight/application/services/UserService.kt index be32d6a..71fb6ca 100644 --- a/src/main/kotlin/com/project/movienight/application/services/UserService.kt +++ b/src/main/kotlin/com/project/movienight/application/services/UserService.kt @@ -57,4 +57,8 @@ class UserService( userRepository.deleteById(id) } + + fun findAll(): List = userRepository.findAll() + + fun findById(id: UUID): User? = userRepository.findById(id) } -- 2.54.0 From 8120294d47ed445209d7010cbc8bb4b774f60e60 Mon Sep 17 00:00:00 2001 From: Elena Ponomareva Date: Fri, 24 Apr 2026 22:55:56 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../movienight/adapters/web/FilmController.kt | 39 ++++++++++++------- .../adapters/web/FilmLibraryController.kt | 21 +++++++--- .../movienight/adapters/web/UserController.kt | 30 ++++++++------ .../application/ports/input/FilmUseCase.kt | 12 ++++++ .../application/ports/input/UserUseCase.kt | 8 ++++ .../application/services/FilmService.kt | 36 +++++++++-------- .../application/services/UserService.kt | 29 +++++++------- 7 files changed, 114 insertions(+), 61 deletions(-) diff --git a/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt b/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt index 045adf6..12ffa79 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt @@ -8,10 +8,20 @@ import com.project.movienight.application.ports.input.CreateFilmUseCase import com.project.movienight.application.ports.input.DeleteFilmUseCase import com.project.movienight.application.ports.input.EditFilmCommand import com.project.movienight.application.ports.input.EditFilmUseCase -import com.project.movienight.application.services.FilmService -import com.project.movienight.domain.exception.EntityNotFoundException +import com.project.movienight.application.ports.input.GetAllFilmsUseCase +import com.project.movienight.application.ports.input.GetFilmByIdUseCase +import com.project.movienight.application.ports.input.SearchFilmByTitleUseCase import org.springframework.http.HttpStatus -import org.springframework.web.bind.annotation.* +import org.springframework.web.bind.annotation.DeleteMapping +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PatchMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import org.springframework.web.bind.annotation.ResponseStatus +import org.springframework.web.bind.annotation.RestController import java.util.UUID @RestController @@ -20,7 +30,9 @@ class FilmController( private val createFilmUseCase: CreateFilmUseCase, private val editFilmUseCase: EditFilmUseCase, private val deleteFilmUseCase: DeleteFilmUseCase, - private val filmService: FilmService, + private val getFilmByIdUseCase: GetFilmByIdUseCase, + private val getAllFilmsUseCase: GetAllFilmsUseCase, + private val searchFilmByTitleUseCase: SearchFilmByTitleUseCase, ) { @PostMapping @ResponseStatus(HttpStatus.CREATED) @@ -44,11 +56,10 @@ class FilmController( FilmResponse.fromDomain( editFilmUseCase.edit( id = id, - command = - EditFilmCommand( - title = request.title, - description = request.description, - ), + command = EditFilmCommand( + title = request.title, + description = request.description, + ), ), ) @@ -62,13 +73,15 @@ class FilmController( fun getById( @PathVariable id: UUID, ): FilmResponse = - FilmResponse.fromDomain( - filmService.findById(id) ?: throw EntityNotFoundException("Film", id.toString()) - ) + FilmResponse.fromDomain(getFilmByIdUseCase.getById(id)) @GetMapping("/search") fun searchByTitle( @RequestParam title: String, ): FilmResponse? = - filmService.findByTitle(title)?.let { FilmResponse.fromDomain(it) } + searchFilmByTitleUseCase.searchByTitle(title)?.let { FilmResponse.fromDomain(it) } + + @GetMapping + fun getAll(): List = + getAllFilmsUseCase.getAll().map { FilmResponse.fromDomain(it) } } diff --git a/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt b/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt index 0989dff..f5246cc 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt @@ -7,13 +7,21 @@ import com.project.movienight.application.ports.input.AddFilmToLibraryCommand import com.project.movienight.application.ports.input.AddFilmToLibraryUseCase import com.project.movienight.application.ports.input.CreateFilmLibraryCommand import com.project.movienight.application.ports.input.CreateFilmLibraryUseCase +import com.project.movienight.application.ports.input.GetAllFilmsUseCase +import com.project.movienight.application.ports.input.GetFilmByIdUseCase import com.project.movienight.application.ports.input.GetFilmLibraryQuery import com.project.movienight.application.ports.input.GetFilmLibraryUseCase import com.project.movienight.application.ports.input.RemoveFilmFromLibraryCommand import com.project.movienight.application.ports.input.RemoveFilmFromLibraryUseCase -import com.project.movienight.application.services.FilmService import org.springframework.http.HttpStatus -import org.springframework.web.bind.annotation.* +import org.springframework.web.bind.annotation.DeleteMapping +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.ResponseStatus +import org.springframework.web.bind.annotation.RestController import java.util.UUID @RestController @@ -23,7 +31,8 @@ class FilmLibraryController( private val addFilmToLibraryUseCase: AddFilmToLibraryUseCase, private val removeFilmFromLibraryUseCase: RemoveFilmFromLibraryUseCase, private val getFilmLibraryUseCase: GetFilmLibraryUseCase, - private val filmService: FilmService, + private val getFilmByIdUseCase: GetFilmByIdUseCase, + private val getAllFilmsUseCase: GetAllFilmsUseCase, ) { @PostMapping @ResponseStatus(HttpStatus.CREATED) @@ -58,9 +67,9 @@ class FilmLibraryController( GetFilmLibraryQuery(userId = userId) ) - val film = filmService.findById(library.filmId) + val film = getFilmByIdUseCase.getById(library.filmId) - return film?.let { listOf(FilmResponse.fromDomain(it)) } ?: emptyList() + return listOf(FilmResponse.fromDomain(film)) } @PostMapping("/films/{filmId}") @@ -98,7 +107,7 @@ class FilmLibraryController( GetFilmLibraryQuery(userId = userId) ) - val allFilms = filmService.findAll() + val allFilms = getAllFilmsUseCase.getAll() val availableFilms = allFilms.filter { it.id != userLibrary.filmId } diff --git a/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt b/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt index 5bdbc58..6c1a996 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt @@ -8,10 +8,18 @@ import com.project.movienight.application.ports.input.CreateUserUseCase import com.project.movienight.application.ports.input.DeleteUserUseCase import com.project.movienight.application.ports.input.EditUserCommand import com.project.movienight.application.ports.input.EditUserUseCase -import com.project.movienight.application.services.UserService -import com.project.movienight.domain.exception.EntityNotFoundException +import com.project.movienight.application.ports.input.GetAllUsersUseCase +import com.project.movienight.application.ports.input.GetUserByIdUseCase import org.springframework.http.HttpStatus -import org.springframework.web.bind.annotation.* +import org.springframework.web.bind.annotation.DeleteMapping +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PatchMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.ResponseStatus +import org.springframework.web.bind.annotation.RestController import java.util.UUID @RestController @@ -20,7 +28,8 @@ class UserController( private val createUserUseCase: CreateUserUseCase, private val editUserUseCase: EditUserUseCase, private val deleteUserUseCase: DeleteUserUseCase, - private val userService: UserService, + private val getUserByIdUseCase: GetUserByIdUseCase, + private val getAllUsersUseCase: GetAllUsersUseCase, ) { @PostMapping @ResponseStatus(HttpStatus.CREATED) @@ -38,15 +47,13 @@ class UserController( @GetMapping fun getAll(): List = - userService.findAll().map { UserResponse.fromDomain(it) } + getAllUsersUseCase.getAll().map { UserResponse.fromDomain(it) } @GetMapping("/{id}") fun getById( @PathVariable id: UUID, ): UserResponse = - UserResponse.fromDomain( - userService.findById(id) ?: throw EntityNotFoundException("User", id.toString()) - ) + UserResponse.fromDomain(getUserByIdUseCase.getById(id)) @PatchMapping("/{id}") fun edit( @@ -56,10 +63,9 @@ class UserController( UserResponse.fromDomain( editUserUseCase.edit( id = id, - command = - EditUserCommand( - name = request.name, - ), + command = EditUserCommand( + name = request.name, + ), ), ) diff --git a/src/main/kotlin/com/project/movienight/application/ports/input/FilmUseCase.kt b/src/main/kotlin/com/project/movienight/application/ports/input/FilmUseCase.kt index 3622878..db3f4b0 100644 --- a/src/main/kotlin/com/project/movienight/application/ports/input/FilmUseCase.kt +++ b/src/main/kotlin/com/project/movienight/application/ports/input/FilmUseCase.kt @@ -27,3 +27,15 @@ data class EditFilmCommand( interface DeleteFilmUseCase { fun delete(id: UUID) } + +interface GetFilmByIdUseCase { + fun getById(id: UUID): Film +} + +interface GetAllFilmsUseCase { + fun getAll(): List +} + +interface SearchFilmByTitleUseCase { + fun searchByTitle(title: String): Film? +} diff --git a/src/main/kotlin/com/project/movienight/application/ports/input/UserUseCase.kt b/src/main/kotlin/com/project/movienight/application/ports/input/UserUseCase.kt index c889946..b417525 100644 --- a/src/main/kotlin/com/project/movienight/application/ports/input/UserUseCase.kt +++ b/src/main/kotlin/com/project/movienight/application/ports/input/UserUseCase.kt @@ -26,3 +26,11 @@ data class EditUserCommand( interface DeleteUserUseCase { fun delete(id: UUID) } + +interface GetUserByIdUseCase { + fun getById(id: UUID): User +} + +interface GetAllUsersUseCase { + fun getAll(): List +} diff --git a/src/main/kotlin/com/project/movienight/application/services/FilmService.kt b/src/main/kotlin/com/project/movienight/application/services/FilmService.kt index 6ed4748..555655a 100644 --- a/src/main/kotlin/com/project/movienight/application/services/FilmService.kt +++ b/src/main/kotlin/com/project/movienight/application/services/FilmService.kt @@ -5,6 +5,9 @@ import com.project.movienight.application.ports.input.CreateFilmUseCase import com.project.movienight.application.ports.input.DeleteFilmUseCase import com.project.movienight.application.ports.input.EditFilmCommand import com.project.movienight.application.ports.input.EditFilmUseCase +import com.project.movienight.application.ports.input.GetAllFilmsUseCase +import com.project.movienight.application.ports.input.GetFilmByIdUseCase +import com.project.movienight.application.ports.input.SearchFilmByTitleUseCase import com.project.movienight.application.ports.output.FilmRepositoryPort import com.project.movienight.application.ports.output.IdGenerator import com.project.movienight.config.FilmServiceProperties @@ -21,7 +24,11 @@ class FilmService( private val filmConfig: FilmServiceProperties, ) : CreateFilmUseCase, EditFilmUseCase, - DeleteFilmUseCase { + DeleteFilmUseCase, + GetFilmByIdUseCase, + GetAllFilmsUseCase, + SearchFilmByTitleUseCase { + override fun create(command: CreateFilmCommand): Film { if (filmConfig.isBlocked(command.title)) { throw BlockedValueException(target = "Film", field = "title") @@ -30,19 +37,15 @@ class FilmService( throw BlockedValueException(target = "Film", field = "description") } - val film = - Film( - id = idGenerator.generateId(), - title = command.title, - description = command.description, - ) + val film = Film( + id = idGenerator.generateId(), + title = command.title, + description = command.description, + ) return filmRepository.save(film) } - override fun edit( - id: UUID, - command: EditFilmCommand, - ): Film { + override fun edit(id: UUID, command: EditFilmCommand): Film { if (filmConfig.isBlocked(command.title)) { throw BlockedValueException(target = "Film", field = "title") } @@ -51,21 +54,20 @@ class FilmService( } var film = filmRepository.findById(id) ?: throw EntityNotFoundException(entity = "Film", id = id.toString()) - film = film.copy(title = command.title, description = command.description) - return filmRepository.save(film) } override fun delete(id: UUID) { filmRepository.findById(id) ?: throw EntityNotFoundException(entity = "Film", id = id.toString()) - filmRepository.deleteById(id) } - fun findByTitle(title: String): Film? = filmRepository.findByTitle(title) + override fun getById(id: UUID): Film { + return filmRepository.findById(id) ?: throw EntityNotFoundException(entity = "Film", id = id.toString()) + } - fun findAll(): List = filmRepository.findAll() + override fun getAll(): List = filmRepository.findAll() - fun findById(id: UUID): Film? = filmRepository.findById(id) + override fun searchByTitle(title: String): Film? = filmRepository.findByTitle(title) } diff --git a/src/main/kotlin/com/project/movienight/application/services/UserService.kt b/src/main/kotlin/com/project/movienight/application/services/UserService.kt index 71fb6ca..4d16ea1 100644 --- a/src/main/kotlin/com/project/movienight/application/services/UserService.kt +++ b/src/main/kotlin/com/project/movienight/application/services/UserService.kt @@ -5,6 +5,8 @@ import com.project.movienight.application.ports.input.CreateUserUseCase import com.project.movienight.application.ports.input.DeleteUserUseCase import com.project.movienight.application.ports.input.EditUserCommand import com.project.movienight.application.ports.input.EditUserUseCase +import com.project.movienight.application.ports.input.GetAllUsersUseCase +import com.project.movienight.application.ports.input.GetUserByIdUseCase import com.project.movienight.application.ports.output.IdGenerator import com.project.movienight.application.ports.output.UserRepositoryPort import com.project.movienight.config.UserServiceProperties @@ -21,19 +23,21 @@ class UserService( private val userConfig: UserServiceProperties, ) : CreateUserUseCase, EditUserUseCase, - DeleteUserUseCase { + DeleteUserUseCase, + GetUserByIdUseCase, + GetAllUsersUseCase { + override fun create(command: CreateUserCommand): User { if (userConfig.isBlocked(command.name)) { throw BlockedValueException(target = "User", field = "name") } - val user = - User( - id = idGenerator.generateId(), - name = command.name, - email = command.email, - library = null, - ) + val user = User( + id = idGenerator.generateId(), + name = command.name, + email = command.email, + library = null, + ) return userRepository.save(user) } @@ -46,19 +50,18 @@ class UserService( } var user = userRepository.findById(id) ?: throw EntityNotFoundException(entity = "User", id = id.toString()) - user = user.copy(name = command.name) - return userRepository.save(user) } override fun delete(id: UUID) { userRepository.findById(id) ?: throw EntityNotFoundException(entity = "User", id = id.toString()) - userRepository.deleteById(id) } - fun findAll(): List = userRepository.findAll() + override fun getById(id: UUID): User { + return userRepository.findById(id) ?: throw EntityNotFoundException(entity = "User", id = id.toString()) + } - fun findById(id: UUID): User? = userRepository.findById(id) + override fun getAll(): List = userRepository.findAll() } -- 2.54.0