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 a0a24d8..d4d52ef 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/FilmController.kt @@ -1,13 +1,22 @@ package com.project.movienight.adapters.web +import com.project.movienight.adapters.web.dto.request.CreateFilmRequest +import com.project.movienight.adapters.web.dto.request.EditFilmRequest +import com.project.movienight.adapters.web.dto.response.FilmResponse import com.project.movienight.application.ports.input.CreateFilmCommand 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.domain.model.Film import org.springframework.http.HttpStatus -import org.springframework.web.bind.annotation.* +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 java.util.UUID @RestController @@ -17,42 +26,39 @@ class FilmController( private val editFilmUseCase: EditFilmUseCase, private val deleteFilmUseCase: DeleteFilmUseCase, ) { - @PostMapping @ResponseStatus(HttpStatus.CREATED) - fun create(@RequestBody request: CreateFilmRequest): Film = - createFilmUseCase.create( - CreateFilmCommand( - title = request.title, - description = request.description, - ) + fun create( + @RequestBody request: CreateFilmRequest, + ): FilmResponse = + FilmResponse.fromDomain( + createFilmUseCase.create( + CreateFilmCommand( + title = request.title, + description = request.description, + ), + ), ) @PatchMapping("/{id}") fun edit( @PathVariable id: UUID, @RequestBody request: EditFilmRequest, - ): Film = - editFilmUseCase.edit( - id = id, - command = EditFilmCommand( - title = request.title, - description = request.description, - ) + ): FilmResponse = + FilmResponse.fromDomain( + editFilmUseCase.edit( + id = id, + command = + EditFilmCommand( + title = request.title, + description = request.description, + ), + ), ) @DeleteMapping("/{id}") @ResponseStatus(HttpStatus.NO_CONTENT) - fun delete(@PathVariable id: UUID) = - deleteFilmUseCase.delete(id) + fun delete( + @PathVariable id: UUID, + ) = deleteFilmUseCase.delete(id) } - -data class CreateFilmRequest( - val title: String, - val description: String, -) - -data class EditFilmRequest( - val title: String, - val description: 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 9c908db..59022b0 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/FilmLibraryController.kt @@ -1,5 +1,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.application.ports.input.AddFilmToLibraryCommand import com.project.movienight.application.ports.input.AddFilmToLibraryUseCase import com.project.movienight.application.ports.input.CreateFilmLibraryCommand @@ -8,9 +10,15 @@ 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.domain.model.FilmLibrary 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 @@ -21,24 +29,29 @@ class FilmLibraryController( private val removeFilmFromLibraryUseCase: RemoveFilmFromLibraryUseCase, private val getFilmLibraryUseCase: GetFilmLibraryUseCase, ) { - @PostMapping @ResponseStatus(HttpStatus.CREATED) fun create( @PathVariable userId: UUID, @RequestBody request: CreateFilmLibraryRequest, - ): FilmLibrary = - createFilmLibraryUseCase.create( - CreateFilmLibraryCommand( - userId = userId, - name = request.name, - ) + ): FilmLibraryResponse = + FilmLibraryResponse.fromDomain( + createFilmLibraryUseCase.create( + CreateFilmLibraryCommand( + userId = userId, + name = request.name, + ), + ), ) @GetMapping - fun get(@PathVariable userId: UUID): FilmLibrary = - getFilmLibraryUseCase.getLibrary( - GetFilmLibraryQuery(userId = userId) + fun get( + @PathVariable userId: UUID, + ): FilmLibraryResponse = + FilmLibraryResponse.fromDomain( + getFilmLibraryUseCase.getLibrary( + GetFilmLibraryQuery(userId = userId), + ), ) @PostMapping("/films/{filmId}") @@ -46,12 +59,14 @@ class FilmLibraryController( fun addFilm( @PathVariable userId: UUID, @PathVariable filmId: UUID, - ): FilmLibrary = - addFilmToLibraryUseCase.addFilm( - AddFilmToLibraryCommand( - userId = userId, - filmId = filmId, - ) + ): FilmLibraryResponse = + FilmLibraryResponse.fromDomain( + addFilmToLibraryUseCase.addFilm( + AddFilmToLibraryCommand( + userId = userId, + filmId = filmId, + ), + ), ) @DeleteMapping("/films/{filmId}") @@ -63,10 +78,6 @@ class FilmLibraryController( RemoveFilmFromLibraryCommand( userId = userId, filmId = filmId, - ) + ), ) } - -data class CreateFilmLibraryRequest( - val name: String = "Мои фильмы", -) 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 7fc8d2a..f270736 100644 --- a/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt +++ b/src/main/kotlin/com/project/movienight/adapters/web/UserController.kt @@ -1,13 +1,22 @@ package com.project.movienight.adapters.web +import com.project.movienight.adapters.web.dto.request.CreateUserRequest +import com.project.movienight.adapters.web.dto.request.EditUserRequest +import com.project.movienight.adapters.web.dto.response.UserResponse import com.project.movienight.application.ports.input.CreateUserCommand 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.domain.model.User import org.springframework.http.HttpStatus -import org.springframework.web.bind.annotation.* +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 java.util.UUID @RestController @@ -17,40 +26,38 @@ class UserController( private val editUserUseCase: EditUserUseCase, private val deleteUserUseCase: DeleteUserUseCase, ) { - @PostMapping @ResponseStatus(HttpStatus.CREATED) - fun create(@RequestBody request: CreateUserRequest): User = - createUserUseCase.create( - CreateUserCommand( - name = request.name, - email = request.email, - ) + fun create( + @RequestBody request: CreateUserRequest, + ): UserResponse = + UserResponse.fromDomain( + createUserUseCase.create( + CreateUserCommand( + name = request.name, + email = request.email, + ), + ), ) @PatchMapping("/{id}") fun edit( @PathVariable id: UUID, @RequestBody request: EditUserRequest, - ): User = - editUserUseCase.edit( - id = id, - command = EditUserCommand( - name = request.name, - ) + ): UserResponse = + UserResponse.fromDomain( + editUserUseCase.edit( + id = id, + command = + EditUserCommand( + name = request.name, + ), + ), ) @DeleteMapping("/{id}") @ResponseStatus(HttpStatus.NO_CONTENT) - fun delete(@PathVariable id: UUID) = - deleteUserUseCase.delete(id) + fun delete( + @PathVariable id: UUID, + ) = deleteUserUseCase.delete(id) } - -data class CreateUserRequest( - val name: String, - val email: String, -) - -data class EditUserRequest( - val name: String, -)