<type>(scope): <description>
[body] [footer(s)]
This commit is contained in:
@@ -25,6 +25,12 @@ import org.springframework.web.bind.annotation.ResponseStatus
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
import java.util.UUID
|
||||
|
||||
private fun String.toContentTypeOrFilm(): com.project.movienight.domain.model.ContentType =
|
||||
runCatching {
|
||||
com.project.movienight.domain.model.ContentType
|
||||
.valueOf(this)
|
||||
}.getOrDefault(com.project.movienight.domain.model.ContentType.FILM)
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/films")
|
||||
class FilmController(
|
||||
@@ -45,6 +51,16 @@ class FilmController(
|
||||
CreateFilmCommand(
|
||||
title = request.title,
|
||||
description = request.description,
|
||||
contentType = request.contentType.toContentTypeOrFilm(),
|
||||
releaseYear = request.releaseYear,
|
||||
genres = request.genres,
|
||||
cast = request.cast,
|
||||
directors = request.directors,
|
||||
imdbRating = request.imdbRating,
|
||||
platformRating = request.platformRating,
|
||||
externalUrl = request.externalUrl,
|
||||
jellyfinItemId = request.jellyfinItemId,
|
||||
jellyfinLibraryId = request.jellyfinLibraryId,
|
||||
),
|
||||
),
|
||||
)
|
||||
@@ -61,6 +77,16 @@ class FilmController(
|
||||
EditFilmCommand(
|
||||
title = request.title,
|
||||
description = request.description,
|
||||
contentType = request.contentType.toContentTypeOrFilm(),
|
||||
releaseYear = request.releaseYear,
|
||||
genres = request.genres,
|
||||
cast = request.cast,
|
||||
directors = request.directors,
|
||||
imdbRating = request.imdbRating,
|
||||
platformRating = request.platformRating,
|
||||
externalUrl = request.externalUrl,
|
||||
jellyfinItemId = request.jellyfinItemId,
|
||||
jellyfinLibraryId = request.jellyfinLibraryId,
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
@@ -11,6 +11,9 @@ 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.ListFilmLibraryEntriesUseCase
|
||||
import com.project.movienight.application.ports.input.MarkFilmViewedCommand
|
||||
import com.project.movienight.application.ports.input.MarkFilmViewedUseCase
|
||||
import com.project.movienight.application.ports.input.RemoveFilmFromLibraryCommand
|
||||
import com.project.movienight.application.ports.input.RemoveFilmFromLibraryUseCase
|
||||
import com.project.movienight.domain.exception.EntityNotFoundException
|
||||
@@ -30,10 +33,10 @@ import java.util.UUID
|
||||
class FilmLibraryController(
|
||||
private val createFilmLibraryUseCase: CreateFilmLibraryUseCase,
|
||||
private val addFilmToLibraryUseCase: AddFilmToLibraryUseCase,
|
||||
private val markFilmViewedUseCase: MarkFilmViewedUseCase,
|
||||
private val removeFilmFromLibraryUseCase: RemoveFilmFromLibraryUseCase,
|
||||
private val getFilmLibraryUseCase: GetFilmLibraryUseCase,
|
||||
private val getFilmByIdUseCase: GetFilmByIdUseCase,
|
||||
private val getAllFilmsUseCase: GetAllFilmsUseCase,
|
||||
private val listFilmLibraryEntriesUseCase: ListFilmLibraryEntriesUseCase,
|
||||
) {
|
||||
@PostMapping
|
||||
@ResponseStatus(HttpStatus.CREATED)
|
||||
@@ -60,18 +63,10 @@ class FilmLibraryController(
|
||||
),
|
||||
)
|
||||
|
||||
@GetMapping("/films")
|
||||
fun getAllFilmsInLibrary(
|
||||
@GetMapping("/entries")
|
||||
fun list(
|
||||
@PathVariable userId: UUID,
|
||||
): List<FilmResponse> {
|
||||
val library =
|
||||
getFilmLibraryUseCase.getLibrary(
|
||||
GetFilmLibraryQuery(userId = userId),
|
||||
)
|
||||
|
||||
val film = getFilmByIdUseCase.getById(library.filmId)
|
||||
return listOf(FilmResponse.fromDomain(film))
|
||||
}
|
||||
): List<FilmLibraryResponse> = listFilmLibraryEntriesUseCase.list(userId).map { FilmLibraryResponse.fromDomain(it) }
|
||||
|
||||
@PostMapping("/films/{filmId}")
|
||||
@ResponseStatus(HttpStatus.CREATED)
|
||||
@@ -88,6 +83,20 @@ class FilmLibraryController(
|
||||
),
|
||||
)
|
||||
|
||||
@PostMapping("/films/{filmId}/viewed")
|
||||
fun markViewed(
|
||||
@PathVariable userId: UUID,
|
||||
@PathVariable filmId: UUID,
|
||||
): FilmLibraryResponse =
|
||||
FilmLibraryResponse.fromDomain(
|
||||
markFilmViewedUseCase.markViewed(
|
||||
MarkFilmViewedCommand(
|
||||
userId = userId,
|
||||
filmId = filmId,
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
@DeleteMapping("/films/{filmId}")
|
||||
@ResponseStatus(HttpStatus.NO_CONTENT)
|
||||
fun removeFilm(
|
||||
|
||||
@@ -64,6 +64,7 @@ class UserController(
|
||||
command =
|
||||
EditUserCommand(
|
||||
name = request.name,
|
||||
jellyfinUserId = request.jellyfinUserId,
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
@@ -3,4 +3,14 @@ package com.project.movienight.adapters.web.dto.request
|
||||
data class CreateFilmRequest(
|
||||
val title: String,
|
||||
val description: String,
|
||||
val contentType: String = "FILM",
|
||||
val releaseYear: Int? = null,
|
||||
val genres: List<String> = emptyList(),
|
||||
val cast: List<String> = emptyList(),
|
||||
val directors: List<String> = emptyList(),
|
||||
val imdbRating: Double? = null,
|
||||
val platformRating: Double? = null,
|
||||
val externalUrl: String? = null,
|
||||
val jellyfinItemId: String? = null,
|
||||
val jellyfinLibraryId: String? = null,
|
||||
)
|
||||
|
||||
@@ -3,4 +3,14 @@ package com.project.movienight.adapters.web.dto.request
|
||||
data class EditFilmRequest(
|
||||
val title: String,
|
||||
val description: String,
|
||||
val contentType: String = "FILM",
|
||||
val releaseYear: Int? = null,
|
||||
val genres: List<String> = emptyList(),
|
||||
val cast: List<String> = emptyList(),
|
||||
val directors: List<String> = emptyList(),
|
||||
val imdbRating: Double? = null,
|
||||
val platformRating: Double? = null,
|
||||
val externalUrl: String? = null,
|
||||
val jellyfinItemId: String? = null,
|
||||
val jellyfinLibraryId: String? = null,
|
||||
)
|
||||
|
||||
@@ -2,4 +2,5 @@ package com.project.movienight.adapters.web.dto.request
|
||||
|
||||
data class EditUserRequest(
|
||||
val name: String,
|
||||
val jellyfinUserId: String? = null,
|
||||
)
|
||||
|
||||
+2
@@ -9,6 +9,7 @@ data class FilmLibraryResponse(
|
||||
val filmId: UUID,
|
||||
val comment: String?,
|
||||
val isViewed: Boolean,
|
||||
val watchedAt: java.time.LocalDateTime?,
|
||||
) {
|
||||
companion object {
|
||||
fun fromDomain(filmLibrary: FilmLibrary): FilmLibraryResponse =
|
||||
@@ -18,6 +19,7 @@ data class FilmLibraryResponse(
|
||||
filmId = filmLibrary.filmId,
|
||||
comment = filmLibrary.comment,
|
||||
isViewed = filmLibrary.isViewed,
|
||||
watchedAt = filmLibrary.watchedAt,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.project.movienight.adapters.web.dto.response
|
||||
|
||||
import com.project.movienight.domain.model.ContentType
|
||||
import com.project.movienight.domain.model.Film
|
||||
import java.util.UUID
|
||||
|
||||
@@ -7,6 +8,16 @@ data class FilmResponse(
|
||||
val id: UUID,
|
||||
val title: String,
|
||||
val description: String,
|
||||
val contentType: ContentType,
|
||||
val releaseYear: Int?,
|
||||
val genres: List<String>,
|
||||
val cast: List<String>,
|
||||
val directors: List<String>,
|
||||
val imdbRating: Double?,
|
||||
val platformRating: Double?,
|
||||
val externalUrl: String?,
|
||||
val jellyfinItemId: String?,
|
||||
val jellyfinLibraryId: String?,
|
||||
) {
|
||||
companion object {
|
||||
fun fromDomain(film: Film): FilmResponse =
|
||||
@@ -14,6 +25,16 @@ data class FilmResponse(
|
||||
id = film.id,
|
||||
title = film.title,
|
||||
description = film.description,
|
||||
contentType = film.contentType,
|
||||
releaseYear = film.releaseYear,
|
||||
genres = film.genres,
|
||||
cast = film.cast,
|
||||
directors = film.directors,
|
||||
imdbRating = film.imdbRating,
|
||||
platformRating = film.platformRating,
|
||||
externalUrl = film.externalUrl,
|
||||
jellyfinItemId = film.jellyfinItemId,
|
||||
jellyfinLibraryId = film.jellyfinLibraryId,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ data class UserResponse(
|
||||
val id: UUID,
|
||||
val name: String,
|
||||
val email: String,
|
||||
val jellyfinUserId: String?,
|
||||
) {
|
||||
companion object {
|
||||
fun fromDomain(user: User): UserResponse =
|
||||
@@ -14,6 +15,7 @@ data class UserResponse(
|
||||
id = user.id,
|
||||
name = user.name,
|
||||
email = user.email,
|
||||
jellyfinUserId = user.jellyfinUserId,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user