ApiResponse
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
package eu.fosil.okupamicoche.entities
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
class ApiResponse<T>(val success: Boolean, val data: T?, val error: Exception?) {
|
||||
constructor(success: Boolean, data: T) : this(success, data, null)
|
||||
constructor(success: Boolean, error: Exception) : this(success, null, error)
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package eu.fosil.okupamicoche.spring.controller
|
||||
|
||||
import eu.fosil.okupamicoche.entities.ApiResponse
|
||||
import eu.fosil.okupamicoche.entities.UserIdNotFoundException
|
||||
import org.springframework.security.core.context.SecurityContextHolder
|
||||
import org.springframework.security.oauth2.jwt.Jwt
|
||||
|
||||
open class ApiRestController {
|
||||
fun <T> response(function: () -> T): ApiResponse<T> {
|
||||
return try {
|
||||
val data = function()
|
||||
ApiResponse(true, data)
|
||||
} catch (e: Exception) {
|
||||
ApiResponse(false, e)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Devuelve el id del usuario actual.
|
||||
*/
|
||||
fun getCurrentUserId(): String {
|
||||
val authentication = SecurityContextHolder.getContext().authentication
|
||||
if (authentication.principal is Jwt) {
|
||||
val jwt = authentication.principal as Jwt
|
||||
return jwt.claims["sub"].toString()
|
||||
}
|
||||
throw UserIdNotFoundException()
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,13 @@
|
||||
package eu.fosil.okupamicoche.spring.controller
|
||||
|
||||
import eu.fosil.okupamicoche.entities.ApiResponse
|
||||
import eu.fosil.okupamicoche.entities.TravelId
|
||||
import eu.fosil.okupamicoche.entities.UserId
|
||||
import eu.fosil.okupamicoche.entities.UserIdNotFoundException
|
||||
import eu.fosil.okupamicoche.repositories.TravelRepository
|
||||
import eu.fosil.okupamicoche.repositories.UserRepository
|
||||
import eu.fosil.okupamicoche.spring.dto.TravelDto
|
||||
import eu.fosil.okupamicoche.usecases.travel.*
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
import org.springframework.security.core.context.SecurityContextHolder
|
||||
import org.springframework.security.oauth2.jwt.Jwt
|
||||
import org.springframework.validation.annotation.Validated
|
||||
import org.springframework.web.bind.annotation.ModelAttribute
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
@@ -22,76 +20,91 @@ import org.springframework.web.bind.annotation.RestController
|
||||
class TravelRestController(
|
||||
private val userRepository: UserRepository,
|
||||
private val travelRepository: TravelRepository
|
||||
) {
|
||||
) : ApiRestController() {
|
||||
|
||||
@RequestMapping("/create")
|
||||
fun createTravel(@ModelAttribute @Validated travel: TravelDto) {
|
||||
CreateTravel(travelRepository).createTravel(travel.toTravel(userRepository))
|
||||
fun createTravel(@ModelAttribute @Validated travel: TravelDto): ApiResponse<Unit> {
|
||||
return response {
|
||||
CreateTravel(travelRepository).createTravel(travel.toTravel(userRepository))
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/get")
|
||||
fun getTravel(@RequestParam @Validated travelId: TravelId): TravelDto? {
|
||||
return travelRepository.findByIdOrNull(travelId)?.let { TravelDto(it) }
|
||||
fun getTravel(@RequestParam @Validated travelId: TravelId): ApiResponse<TravelDto?> {
|
||||
return response {
|
||||
travelRepository.findByIdOrNull(travelId)?.let { TravelDto(it) }
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/cancel")
|
||||
fun cancelTravel(@RequestParam @Validated travelId: TravelId) {
|
||||
CancelTravel(travelRepository).cancelTravel(travelId)
|
||||
fun cancelTravel(@RequestParam @Validated travelId: TravelId): ApiResponse<Unit> {
|
||||
return response {
|
||||
CancelTravel(travelRepository).cancelTravel(travelId)
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/delete")
|
||||
fun deleteTravel(@RequestParam @Validated travelId: TravelId) {
|
||||
DeleteTravel(travelRepository).deleteTravel(travelId)
|
||||
fun deleteTravel(@RequestParam @Validated travelId: TravelId): ApiResponse<Unit> {
|
||||
return response {
|
||||
DeleteTravel(travelRepository).deleteTravel(travelId)
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/edit")
|
||||
fun editTravel(@RequestParam @Validated travel: TravelDto) {
|
||||
EditTravel(travelRepository).editTravel(travel.toTravel(userRepository))
|
||||
fun editTravel(@RequestParam @Validated travel: TravelDto): ApiResponse<Unit> {
|
||||
return response {
|
||||
EditTravel(travelRepository).editTravel(travel.toTravel(userRepository))
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/list")
|
||||
fun listTravels(): List<TravelDto> {
|
||||
return ListTravels(travelRepository).listTravels().map { t -> TravelDto(t) }
|
||||
fun listTravels(): ApiResponse<List<TravelDto>> {
|
||||
return response {
|
||||
ListTravels(travelRepository).listTravels().map { t -> TravelDto(t) }
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/listusertravels")
|
||||
fun listUserTravels(): List<TravelDto> {
|
||||
val userId = getCurrentUserId()
|
||||
return ListUserTravels(travelRepository).listUserTravels(userId).map { t -> TravelDto(t) }
|
||||
fun listUserTravels(): ApiResponse<List<TravelDto>> {
|
||||
return response {
|
||||
val userId = getCurrentUserId()
|
||||
ListUserTravels(travelRepository).listUserTravels(userId).map { t -> TravelDto(t) }
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/join")
|
||||
fun join(@RequestParam @Validated travelId: TravelId) {
|
||||
val userId = getCurrentUserId()
|
||||
AddTraveler(userRepository, travelRepository).addTraveler(travelId, userId)
|
||||
fun join(@RequestParam @Validated travelId: TravelId): ApiResponse<Unit> {
|
||||
return response {
|
||||
val userId = getCurrentUserId()
|
||||
AddTraveler(userRepository, travelRepository).addTraveler(travelId, userId)
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/leave")
|
||||
fun leave(@RequestParam @Validated travelId: TravelId) {
|
||||
val userId = getCurrentUserId()
|
||||
RemoveTraveler(userRepository, travelRepository).removeTraveler(travelId, userId)
|
||||
fun leave(@RequestParam @Validated travelId: TravelId): ApiResponse<Unit> {
|
||||
return response {
|
||||
val userId = getCurrentUserId()
|
||||
RemoveTraveler(userRepository, travelRepository).removeTraveler(travelId, userId)
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/addtraveler")
|
||||
fun addTraveler(@RequestParam @Validated travelId: TravelId, @RequestParam @Validated userId: UserId) {
|
||||
AddTraveler(userRepository, travelRepository).addTraveler(travelId, userId)
|
||||
fun addTraveler(
|
||||
@RequestParam @Validated travelId: TravelId,
|
||||
@RequestParam @Validated userId: UserId
|
||||
): ApiResponse<Unit> {
|
||||
return response {
|
||||
AddTraveler(userRepository, travelRepository).addTraveler(travelId, userId)
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/removetraveler")
|
||||
fun removeTraveler(@RequestParam @Validated travelId: TravelId, @RequestParam @Validated userId: UserId) {
|
||||
RemoveTraveler(userRepository, travelRepository).removeTraveler(travelId, userId)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Devuelve el id del usuario actual.
|
||||
*/
|
||||
private fun getCurrentUserId(): String {
|
||||
val authentication = SecurityContextHolder.getContext().authentication
|
||||
if (authentication.principal is Jwt) {
|
||||
val jwt = authentication.principal as Jwt
|
||||
return jwt.claims["sub"].toString()
|
||||
fun removeTraveler(
|
||||
@RequestParam @Validated travelId: TravelId,
|
||||
@RequestParam @Validated userId: UserId
|
||||
): ApiResponse<Unit> {
|
||||
return response {
|
||||
RemoveTraveler(userRepository, travelRepository).removeTraveler(travelId, userId)
|
||||
}
|
||||
throw UserIdNotFoundException()
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package eu.fosil.okupamicoche.spring.controller
|
||||
|
||||
import eu.fosil.okupamicoche.entities.ApiResponse
|
||||
import eu.fosil.okupamicoche.entities.UserId
|
||||
import eu.fosil.okupamicoche.repositories.UserRepository
|
||||
import eu.fosil.okupamicoche.spring.dto.CreateUserDto
|
||||
@@ -12,30 +13,40 @@ import org.springframework.web.bind.annotation.RestController
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/user")
|
||||
class UserRestController(private val userRepository: UserRepository) {
|
||||
class UserRestController(private val userRepository: UserRepository) : ApiRestController() {
|
||||
|
||||
@RequestMapping("/create")
|
||||
fun createUser(@RequestBody @Validated createUserDto: CreateUserDto) {
|
||||
CreateUser(userRepository).createUser(createUserDto.toUser(userRepository))
|
||||
fun createUser(@RequestBody @Validated createUserDto: CreateUserDto): ApiResponse<Unit> {
|
||||
return response {
|
||||
CreateUser(userRepository).createUser(createUserDto.toUser(userRepository))
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/get")
|
||||
fun getUser(@RequestBody @Validated userId: UserId): UserDto? {
|
||||
return GetUser(userRepository).getUser(userId)?.let { UserDto(it) }
|
||||
fun getUser(@RequestBody @Validated userId: UserId): ApiResponse<UserDto?> {
|
||||
return response {
|
||||
GetUser(userRepository).getUser(userId)?.let { UserDto(it) }
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/delete")
|
||||
fun deleteUser(@RequestBody @Validated userId: UserId) {
|
||||
DeleteUser(userRepository).deleteUser(userId)
|
||||
fun deleteUser(@RequestBody @Validated userId: UserId): ApiResponse<Unit> {
|
||||
return response {
|
||||
DeleteUser(userRepository).deleteUser(userId)
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/edit")
|
||||
fun editUser(@RequestBody @Validated userDto: UserDto) {
|
||||
EditUser(userRepository).editUser(userDto.toUser(userRepository))
|
||||
fun editUser(@RequestBody @Validated userDto: UserDto): ApiResponse<Unit> {
|
||||
return response {
|
||||
EditUser(userRepository).editUser(userDto.toUser(userRepository))
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping("/list")
|
||||
fun listUsers(): List<UserDto> {
|
||||
return ListUsers(userRepository).listUsers().map { UserDto(it) }
|
||||
fun listUsers(): ApiResponse<List<UserDto>> {
|
||||
return response {
|
||||
ListUsers(userRepository).listUsers().map { UserDto(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user