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(
createFilmUseCase.create( @RequestBody request: CreateFilmRequest,
CreateFilmCommand( ): FilmResponse =
title = request.title, FilmResponse.fromDomain(
description = request.description, createFilmUseCase.create(
) CreateFilmCommand(
title = request.title,
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 =
editFilmUseCase.edit( FilmResponse.fromDomain(
id = id, editFilmUseCase.edit(
command = EditFilmCommand( id = id,
title = request.title, command =
description = request.description, EditFilmCommand(
) title = request.title,
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 =
createFilmLibraryUseCase.create( FilmLibraryResponse.fromDomain(
CreateFilmLibraryCommand( createFilmLibraryUseCase.create(
userId = userId, CreateFilmLibraryCommand(
name = request.name, userId = userId,
) name = request.name,
),
),
) )
@GetMapping @GetMapping
fun get(@PathVariable userId: UUID): FilmLibrary = fun get(
getFilmLibraryUseCase.getLibrary( @PathVariable userId: UUID,
GetFilmLibraryQuery(userId = userId) ): FilmLibraryResponse =
FilmLibraryResponse.fromDomain(
getFilmLibraryUseCase.getLibrary(
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 =
addFilmToLibraryUseCase.addFilm( FilmLibraryResponse.fromDomain(
AddFilmToLibraryCommand( addFilmToLibraryUseCase.addFilm(
userId = userId, AddFilmToLibraryCommand(
filmId = filmId, userId = userId,
) 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(
createUserUseCase.create( @RequestBody request: CreateUserRequest,
CreateUserCommand( ): UserResponse =
name = request.name, UserResponse.fromDomain(
email = request.email, createUserUseCase.create(
) CreateUserCommand(
name = request.name,
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 =
editUserUseCase.edit( UserResponse.fromDomain(
id = id, editUserUseCase.edit(
command = EditUserCommand( id = id,
name = request.name, command =
) EditUserCommand(
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,
)