поиск по названию в библиотеке пользователя / во всей бд
This commit is contained in:
@@ -61,6 +61,15 @@ class FilmRepository(
|
|||||||
filmRowMapper,
|
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) {
|
override fun deleteById(id: UUID) {
|
||||||
jdbc.update("DELETE FROM films WHERE id = ?", id)
|
jdbc.update("DELETE FROM films WHERE id = ?", id)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.DeleteFilmUseCase
|
||||||
import com.project.movienight.application.ports.input.EditFilmCommand
|
import com.project.movienight.application.ports.input.EditFilmCommand
|
||||||
import com.project.movienight.application.ports.input.EditFilmUseCase
|
import com.project.movienight.application.ports.input.EditFilmUseCase
|
||||||
|
import com.project.movienight.application.services.FilmService
|
||||||
import org.springframework.http.HttpStatus
|
import org.springframework.http.HttpStatus
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping
|
import org.springframework.web.bind.annotation.*
|
||||||
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
|
import java.util.UUID
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -25,6 +19,7 @@ class FilmController(
|
|||||||
private val createFilmUseCase: CreateFilmUseCase,
|
private val createFilmUseCase: CreateFilmUseCase,
|
||||||
private val editFilmUseCase: EditFilmUseCase,
|
private val editFilmUseCase: EditFilmUseCase,
|
||||||
private val deleteFilmUseCase: DeleteFilmUseCase,
|
private val deleteFilmUseCase: DeleteFilmUseCase,
|
||||||
|
private val filmService: FilmService,
|
||||||
) {
|
) {
|
||||||
@PostMapping
|
@PostMapping
|
||||||
@ResponseStatus(HttpStatus.CREATED)
|
@ResponseStatus(HttpStatus.CREATED)
|
||||||
@@ -61,4 +56,10 @@ class FilmController(
|
|||||||
fun delete(
|
fun delete(
|
||||||
@PathVariable id: UUID,
|
@PathVariable id: UUID,
|
||||||
) = deleteFilmUseCase.delete(id)
|
) = deleteFilmUseCase.delete(id)
|
||||||
|
|
||||||
|
@GetMapping("/search")
|
||||||
|
fun searchByTitle(
|
||||||
|
@RequestParam title: String,
|
||||||
|
): FilmResponse? =
|
||||||
|
filmService.findByTitle(title)?.let { FilmResponse.fromDomain(it) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.request.CreateFilmLibraryRequest
|
||||||
import com.project.movienight.adapters.web.dto.response.FilmLibraryResponse
|
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.AddFilmToLibraryCommand
|
||||||
import com.project.movienight.application.ports.input.AddFilmToLibraryUseCase
|
import com.project.movienight.application.ports.input.AddFilmToLibraryUseCase
|
||||||
import com.project.movienight.application.ports.input.CreateFilmLibraryCommand
|
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.GetFilmLibraryUseCase
|
||||||
import com.project.movienight.application.ports.input.RemoveFilmFromLibraryCommand
|
import com.project.movienight.application.ports.input.RemoveFilmFromLibraryCommand
|
||||||
import com.project.movienight.application.ports.input.RemoveFilmFromLibraryUseCase
|
import com.project.movienight.application.ports.input.RemoveFilmFromLibraryUseCase
|
||||||
|
import com.project.movienight.application.services.FilmService
|
||||||
import org.springframework.http.HttpStatus
|
import org.springframework.http.HttpStatus
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping
|
import org.springframework.web.bind.annotation.*
|
||||||
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
|
import java.util.UUID
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -28,6 +23,7 @@ class FilmLibraryController(
|
|||||||
private val addFilmToLibraryUseCase: AddFilmToLibraryUseCase,
|
private val addFilmToLibraryUseCase: AddFilmToLibraryUseCase,
|
||||||
private val removeFilmFromLibraryUseCase: RemoveFilmFromLibraryUseCase,
|
private val removeFilmFromLibraryUseCase: RemoveFilmFromLibraryUseCase,
|
||||||
private val getFilmLibraryUseCase: GetFilmLibraryUseCase,
|
private val getFilmLibraryUseCase: GetFilmLibraryUseCase,
|
||||||
|
private val filmService: FilmService,
|
||||||
) {
|
) {
|
||||||
@PostMapping
|
@PostMapping
|
||||||
@ResponseStatus(HttpStatus.CREATED)
|
@ResponseStatus(HttpStatus.CREATED)
|
||||||
@@ -80,4 +76,19 @@ class FilmLibraryController(
|
|||||||
filmId = filmId,
|
filmId = filmId,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@GetMapping("/available-films")
|
||||||
|
fun getAvailableFilms(
|
||||||
|
@PathVariable userId: UUID,
|
||||||
|
): List<FilmResponse> {
|
||||||
|
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) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,5 +10,7 @@ interface FilmRepositoryPort {
|
|||||||
|
|
||||||
fun findAll(): List<Film>
|
fun findAll(): List<Film>
|
||||||
|
|
||||||
|
fun findByTitle(title: String): Film?
|
||||||
|
|
||||||
fun deleteById(id: UUID)
|
fun deleteById(id: UUID)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,4 +62,8 @@ class FilmService(
|
|||||||
|
|
||||||
filmRepository.deleteById(id)
|
filmRepository.deleteById(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun findByTitle(title: String): Film? = filmRepository.findByTitle(title)
|
||||||
|
|
||||||
|
fun findAll(): List<Film> = filmRepository.findAll()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user