Trabajo en controllers

This commit is contained in:
Eneko Nieto
2021-01-18 23:58:38 +01:00
parent 732c3b3e8c
commit 58d8d431eb
5 changed files with 45 additions and 15 deletions

View File

@@ -6,7 +6,7 @@ typealias TravelId = Long
@Entity
class Travel(
@Id @GeneratedValue var id: TravelId,
@Id @GeneratedValue var id: TravelId? = null,
@ManyToOne
var driver: User,
@ManyToMany

View File

@@ -2,6 +2,7 @@ package eu.fosil.okupamicoche.spring.controller
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
@@ -10,8 +11,9 @@ 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.RequestBody
import org.springframework.web.bind.annotation.ModelAttribute
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
@@ -23,23 +25,28 @@ class TravelRestController(
) {
@RequestMapping("/create")
fun createTravel(@RequestBody @Validated travelDto: TravelDto) {
CreateTravel(travelRepository).createTravel(travelDto.toTravel(userRepository))
fun createTravel(@ModelAttribute @Validated travel: TravelDto) {
CreateTravel(travelRepository).createTravel(travel.toTravel(userRepository))
}
@RequestMapping("/get")
fun getTravel(@RequestBody @Validated travelId: TravelId): TravelDto? {
fun getTravel(@RequestParam @Validated travelId: TravelId): TravelDto? {
return travelRepository.findByIdOrNull(travelId)?.let { TravelDto(it) }
}
@RequestMapping("/cancel")
fun cancelTravel(@RequestParam @Validated travelId: TravelId) {
CancelTravel(travelRepository).cancelTravel(travelId)
}
@RequestMapping("/delete")
fun deleteTravel(@RequestBody @Validated id: TravelId) {
DeleteTravel(travelRepository).deleteTravel(id)
fun deleteTravel(@RequestParam @Validated travelId: TravelId) {
DeleteTravel(travelRepository).deleteTravel(travelId)
}
@RequestMapping("/edit")
fun editTravel(@RequestBody @Validated travelDto: TravelDto) {
EditTravel(travelRepository).editTravel(travelDto.toTravel(userRepository))
fun editTravel(@RequestParam @Validated travel: TravelDto) {
EditTravel(travelRepository).editTravel(travel.toTravel(userRepository))
}
@RequestMapping("/list")
@@ -49,17 +56,29 @@ class TravelRestController(
@RequestMapping("/listusertravels")
fun listUserTravels(): List<TravelDto> {
val userId = getCurrentUserId() ?: throw Exception()
val userId = getCurrentUserId()
return 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)
}
@RequestMapping("/leave")
fun leave(@RequestParam @Validated travelId: TravelId) {
val userId = getCurrentUserId()
RemoveTraveler(userRepository, travelRepository).removeTraveler(travelId, userId)
}
@RequestMapping("/addtraveler")
fun addTraveler(@RequestBody @Validated travelId: TravelId, @RequestBody @Validated userId: UserId) {
fun addTraveler(@RequestParam @Validated travelId: TravelId, @RequestParam @Validated userId: UserId) {
AddTraveler(userRepository, travelRepository).addTraveler(travelId, userId)
}
@RequestMapping("/removetraveler")
fun removeTraveler(@RequestBody @Validated travelId: TravelId, @RequestBody @Validated userId: UserId) {
fun removeTraveler(@RequestParam @Validated travelId: TravelId, @RequestParam @Validated userId: UserId) {
RemoveTraveler(userRepository, travelRepository).removeTraveler(travelId, userId)
}
@@ -67,12 +86,12 @@ class TravelRestController(
/**
* Devuelve el id del usuario actual.
*/
private fun getCurrentUserId(): String? {
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()
}
return null
throw UserIdNotFoundException()
}
}

View File

@@ -9,7 +9,7 @@ import org.springframework.data.repository.findByIdOrNull
class TravelDto(
// Los campos deben ser públicos para que aparezcan en el JSON
val id: TravelId,
val id: TravelId? = null,
val driverId: UserId,
val travelersId: List<UserId>,
val departureDate: String,

View File

@@ -0,0 +1,10 @@
package eu.fosil.okupamicoche.usecases.travel
import eu.fosil.okupamicoche.entities.TravelId
import eu.fosil.okupamicoche.repositories.TravelRepository
class CancelTravel(private val travelRepository: TravelRepository) {
fun cancelTravel(id: TravelId) {
// notificar viajeros
}
}

View File

@@ -5,6 +5,7 @@ import eu.fosil.okupamicoche.repositories.TravelRepository
class DeleteTravel(private val travelRepository: TravelRepository) {
fun deleteTravel(id: TravelId) {
CancelTravel(travelRepository).cancelTravel(id)
travelRepository.deleteById(id)
}
}