From 58d8d431eb590edffa4f3208043a2c03fa22078d Mon Sep 17 00:00:00 2001 From: Eneko Nieto Date: Mon, 18 Jan 2021 23:58:38 +0100 Subject: [PATCH] Trabajo en controllers --- .../eu/fosil/okupamicoche/entities/Travel.kt | 2 +- .../spring/controller/TravelRestController.kt | 45 +++++++++++++------ .../okupamicoche/spring/dto/TravelDto.kt | 2 +- .../usecases/travel/CancelTravel.kt | 10 +++++ .../usecases/travel/DeleteTravel.kt | 1 + 5 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/CancelTravel.kt diff --git a/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt b/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt index e480df7..455d593 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt @@ -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 diff --git a/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/TravelRestController.kt b/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/TravelRestController.kt index 691e7cd..80cb3d2 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/TravelRestController.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/TravelRestController.kt @@ -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 { - 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() } } \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/TravelDto.kt b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/TravelDto.kt index 7001f3e..437ccce 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/TravelDto.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/TravelDto.kt @@ -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, val departureDate: String, diff --git a/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/CancelTravel.kt b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/CancelTravel.kt new file mode 100644 index 0000000..0790b7c --- /dev/null +++ b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/CancelTravel.kt @@ -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 + } +} \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/DeleteTravel.kt b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/DeleteTravel.kt index d060518..d24bcb9 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/DeleteTravel.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/DeleteTravel.kt @@ -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) } } \ No newline at end of file