chore(web): refactored REST controllers

This commit is contained in:
ITQ
2026-04-18 13:16:17 +03:00
parent 4113c1a873
commit dd36ecdcbd
3 changed files with 101 additions and 77 deletions
@@ -1,13 +1,22 @@
package com.project.movienight.adapters.web 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.CreateFilmCommand
import com.project.movienight.application.ports.input.CreateFilmUseCase 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.domain.model.Film
import org.springframework.http.HttpStatus 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 import java.util.UUID
@RestController @RestController
@@ -17,42 +26,39 @@ class FilmController(
private val editFilmUseCase: EditFilmUseCase, private val editFilmUseCase: EditFilmUseCase,
private val deleteFilmUseCase: DeleteFilmUseCase, private val deleteFilmUseCase: DeleteFilmUseCase,
) { ) {
@PostMapping @PostMapping
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
fun create(@RequestBody request: CreateFilmRequest): Film = fun create(
@RequestBody request: CreateFilmRequest,
): FilmResponse =
FilmResponse.fromDomain(
createFilmUseCase.create( createFilmUseCase.create(
CreateFilmCommand( CreateFilmCommand(
title = request.title, title = request.title,
description = request.description, description = request.description,
) ),
),
) )
@PatchMapping("/{id}") @PatchMapping("/{id}")
fun edit( fun edit(
@PathVariable id: UUID, @PathVariable id: UUID,
@RequestBody request: EditFilmRequest, @RequestBody request: EditFilmRequest,
): Film = ): FilmResponse =
FilmResponse.fromDomain(
editFilmUseCase.edit( editFilmUseCase.edit(
id = id, id = id,
command = EditFilmCommand( command =
EditFilmCommand(
title = request.title, title = request.title,
description = request.description, description = request.description,
) ),
),
) )
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT) @ResponseStatus(HttpStatus.NO_CONTENT)
fun delete(@PathVariable id: UUID) = fun delete(
deleteFilmUseCase.delete(id) @PathVariable id: UUID,
) = deleteFilmUseCase.delete(id)
} }
data class CreateFilmRequest(
val title: String,
val description: String,
)
data class EditFilmRequest(
val title: String,
val description: String,
)
@@ -1,5 +1,7 @@
package com.project.movienight.adapters.web 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.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
@@ -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.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.domain.model.FilmLibrary
import org.springframework.http.HttpStatus 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 import java.util.UUID
@RestController @RestController
@@ -21,24 +29,29 @@ class FilmLibraryController(
private val removeFilmFromLibraryUseCase: RemoveFilmFromLibraryUseCase, private val removeFilmFromLibraryUseCase: RemoveFilmFromLibraryUseCase,
private val getFilmLibraryUseCase: GetFilmLibraryUseCase, private val getFilmLibraryUseCase: GetFilmLibraryUseCase,
) { ) {
@PostMapping @PostMapping
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
fun create( fun create(
@PathVariable userId: UUID, @PathVariable userId: UUID,
@RequestBody request: CreateFilmLibraryRequest, @RequestBody request: CreateFilmLibraryRequest,
): FilmLibrary = ): FilmLibraryResponse =
FilmLibraryResponse.fromDomain(
createFilmLibraryUseCase.create( createFilmLibraryUseCase.create(
CreateFilmLibraryCommand( CreateFilmLibraryCommand(
userId = userId, userId = userId,
name = request.name, name = request.name,
) ),
),
) )
@GetMapping @GetMapping
fun get(@PathVariable userId: UUID): FilmLibrary = fun get(
@PathVariable userId: UUID,
): FilmLibraryResponse =
FilmLibraryResponse.fromDomain(
getFilmLibraryUseCase.getLibrary( getFilmLibraryUseCase.getLibrary(
GetFilmLibraryQuery(userId = userId) GetFilmLibraryQuery(userId = userId),
),
) )
@PostMapping("/films/{filmId}") @PostMapping("/films/{filmId}")
@@ -46,12 +59,14 @@ class FilmLibraryController(
fun addFilm( fun addFilm(
@PathVariable userId: UUID, @PathVariable userId: UUID,
@PathVariable filmId: UUID, @PathVariable filmId: UUID,
): FilmLibrary = ): FilmLibraryResponse =
FilmLibraryResponse.fromDomain(
addFilmToLibraryUseCase.addFilm( addFilmToLibraryUseCase.addFilm(
AddFilmToLibraryCommand( AddFilmToLibraryCommand(
userId = userId, userId = userId,
filmId = filmId, filmId = filmId,
) ),
),
) )
@DeleteMapping("/films/{filmId}") @DeleteMapping("/films/{filmId}")
@@ -63,10 +78,6 @@ class FilmLibraryController(
RemoveFilmFromLibraryCommand( RemoveFilmFromLibraryCommand(
userId = userId, userId = userId,
filmId = filmId, filmId = filmId,
) ),
) )
} }
data class CreateFilmLibraryRequest(
val name: String = "Мои фильмы",
)
@@ -1,13 +1,22 @@
package com.project.movienight.adapters.web 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.CreateUserCommand
import com.project.movienight.application.ports.input.CreateUserUseCase import com.project.movienight.application.ports.input.CreateUserUseCase
import com.project.movienight.application.ports.input.DeleteUserUseCase import com.project.movienight.application.ports.input.DeleteUserUseCase
import com.project.movienight.application.ports.input.EditUserCommand import com.project.movienight.application.ports.input.EditUserCommand
import com.project.movienight.application.ports.input.EditUserUseCase import com.project.movienight.application.ports.input.EditUserUseCase
import com.project.movienight.domain.model.User
import org.springframework.http.HttpStatus 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 import java.util.UUID
@RestController @RestController
@@ -17,40 +26,38 @@ class UserController(
private val editUserUseCase: EditUserUseCase, private val editUserUseCase: EditUserUseCase,
private val deleteUserUseCase: DeleteUserUseCase, private val deleteUserUseCase: DeleteUserUseCase,
) { ) {
@PostMapping @PostMapping
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
fun create(@RequestBody request: CreateUserRequest): User = fun create(
@RequestBody request: CreateUserRequest,
): UserResponse =
UserResponse.fromDomain(
createUserUseCase.create( createUserUseCase.create(
CreateUserCommand( CreateUserCommand(
name = request.name, name = request.name,
email = request.email, email = request.email,
) ),
),
) )
@PatchMapping("/{id}") @PatchMapping("/{id}")
fun edit( fun edit(
@PathVariable id: UUID, @PathVariable id: UUID,
@RequestBody request: EditUserRequest, @RequestBody request: EditUserRequest,
): User = ): UserResponse =
UserResponse.fromDomain(
editUserUseCase.edit( editUserUseCase.edit(
id = id, id = id,
command = EditUserCommand( command =
EditUserCommand(
name = request.name, name = request.name,
) ),
),
) )
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT) @ResponseStatus(HttpStatus.NO_CONTENT)
fun delete(@PathVariable id: UUID) = fun delete(
deleteUserUseCase.delete(id) @PathVariable id: UUID,
) = deleteUserUseCase.delete(id)
} }
data class CreateUserRequest(
val name: String,
val email: String,
)
data class EditUserRequest(
val name: String,
)