From 034171f5cabf72b6dc0946454c1257062d7f54e4 Mon Sep 17 00:00:00 2001 From: Eneko Nieto Date: Thu, 7 Jan 2021 01:16:49 +0100 Subject: [PATCH] DTOs de Travel y User --- .../fosil/okupamicoche/entities/Exceptions.kt | 3 ++ .../eu/fosil/okupamicoche/entities/Travel.kt | 2 +- .../eu/fosil/okupamicoche/entities/User.kt | 2 +- .../repositories/TravelRepository.kt | 2 + .../spring/controller/TravelRestController.kt | 36 +++++++++----- .../spring/controller/UserRestController.kt | 18 +++---- .../okupamicoche/spring/dto/TravelDto.kt | 47 +++++++++++++++++++ .../fosil/okupamicoche/spring/dto/UserDto.kt | 33 +++++++++++++ .../usecases/travel/ListUserTravels.kt | 5 +- 9 files changed, 123 insertions(+), 25 deletions(-) create mode 100644 src/main/kotlin/eu/fosil/okupamicoche/entities/Exceptions.kt create mode 100644 src/main/kotlin/eu/fosil/okupamicoche/spring/dto/TravelDto.kt create mode 100644 src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt diff --git a/src/main/kotlin/eu/fosil/okupamicoche/entities/Exceptions.kt b/src/main/kotlin/eu/fosil/okupamicoche/entities/Exceptions.kt new file mode 100644 index 0000000..fec60d5 --- /dev/null +++ b/src/main/kotlin/eu/fosil/okupamicoche/entities/Exceptions.kt @@ -0,0 +1,3 @@ +package eu.fosil.okupamicoche.entities + +class UserIdNotFoundException : Exception() \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt b/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt index d5c41bd..5956692 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt @@ -4,7 +4,7 @@ import javax.persistence.* @Entity class Travel( - @Id @GeneratedValue var id: Long? = null, + @Id @GeneratedValue var id: Long, @ManyToOne var driver: User, @ManyToMany diff --git a/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt b/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt index d6e995b..e49b365 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt @@ -4,7 +4,7 @@ import javax.persistence.* @Entity class User( - @Id @GeneratedValue var id: Long? = null, + @Id @GeneratedValue var id: Long, var matrixId: String, var name: String, var email: String, diff --git a/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt b/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt index 6c9e585..5238817 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt @@ -5,6 +5,8 @@ import org.springframework.data.jpa.repository.Query import org.springframework.data.repository.CrudRepository interface TravelRepository : CrudRepository { + @Query("SELECT t FROM Travel t JOIN t.driver u ON t.id=u.id WHERE t.id = ?1") + fun findUserTravelsAsDriver(userId: Long): List @Query("SELECT t FROM Travel t JOIN t.travelers u ON t.id=u.id WHERE t.id = ?1") fun findUserTravelsAsTraveler(userId: Long): List } \ No newline at end of file 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 884c08e..351195c 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/TravelRestController.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/TravelRestController.kt @@ -1,9 +1,9 @@ package eu.fosil.okupamicoche.spring.controller -import eu.fosil.okupamicoche.entities.Travel import eu.fosil.okupamicoche.entities.User 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.validation.annotation.Validated import org.springframework.web.bind.annotation.RequestBody @@ -12,29 +12,39 @@ import org.springframework.web.bind.annotation.RestController @RestController -@RequestMapping("/api/Travel") -class TravelRestController(private val travelRepository: TravelRepository) { +@RequestMapping("/api/travel") +class TravelRestController( + private val userRepository: UserRepository, + private val travelRepository: TravelRepository +) { @RequestMapping("/create") - fun cerateTravel(@RequestBody @Validated travel: Travel) { - CreateTravel(travelRepository).createTravel(travel) + fun createTravel(@RequestBody @Validated travelDto: TravelDto) { + CreateTravel(travelRepository).createTravel(travelDto.toTravel(userRepository)) } @RequestMapping("/delete") - fun deleteTravel(travel: Travel) { - DeleteTravel(travelRepository).deleteTravel(travel) + fun deleteTravel(travelDto: TravelDto) { + DeleteTravel(travelRepository).deleteTravel(travelDto.toTravel(userRepository)) } @RequestMapping("/edit") - fun editTravel(travel: Travel) { - EditTravel(travelRepository).editTravel(travel) + fun editTravel(travelDto: TravelDto) { + EditTravel(travelRepository).editTravel(travelDto.toTravel(userRepository)) } + + @RequestMapping("/list") + fun listTravels(): List { + return ListTravels(travelRepository).listTravels().map { t -> TravelDto(t) } + } + @RequestMapping("/addtraveler") - fun addTraveler(travel: Travel,user:User) { - AddTraveler(travelRepository).addTraveler(travel,user) + fun addTraveler(travelDto: TravelDto, user: User) { + AddTraveler(travelRepository).addTraveler(travelDto.toTravel(userRepository), user) } + @RequestMapping("/removetraveler") - fun removeTraveler(travel: Travel,user:User) { - RemoveTraveler(travelRepository).removeTraveler(travel,user) + fun removeTraveler(travelDto: TravelDto, user: User) { + RemoveTraveler(travelRepository).removeTraveler(travelDto.toTravel(userRepository), user) } } \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/UserRestController.kt b/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/UserRestController.kt index 0d25cca..672ea34 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/UserRestController.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/UserRestController.kt @@ -1,7 +1,7 @@ package eu.fosil.okupamicoche.spring.controller -import eu.fosil.okupamicoche.entities.User import eu.fosil.okupamicoche.repositories.UserRepository +import eu.fosil.okupamicoche.spring.dto.UserDto import eu.fosil.okupamicoche.usecases.user.CreateUser import eu.fosil.okupamicoche.usecases.user.DeleteUser import eu.fosil.okupamicoche.usecases.user.EditUser @@ -16,22 +16,22 @@ import org.springframework.web.bind.annotation.RestController class UserRestController(private val userRepository: UserRepository) { @RequestMapping("/create") - fun createUser(@RequestBody @Validated user: User) { - CreateUser(userRepository).createUser(user) + fun createUser(@RequestBody @Validated userDto: UserDto) { + CreateUser(userRepository).createUser(userDto.toUser(userRepository)) } @RequestMapping("/delete") - fun deleteUser(user: User) { - DeleteUser(userRepository).deleteUser(user) + fun deleteUser(userDto: UserDto) { + DeleteUser(userRepository).deleteUser(userDto.toUser(userRepository)) } @RequestMapping("/edit") - fun editUser(user: User) { - EditUser(userRepository).editUser(user) + fun editUser(userDto: UserDto) { + EditUser(userRepository).editUser(userDto.toUser(userRepository)) } @RequestMapping("/list") - fun listUsers(): List { - return ListUsers(userRepository).listUsers() + fun listUsers(): List { + return ListUsers(userRepository).listUsers().map { UserDto(it) } } } \ 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 new file mode 100644 index 0000000..4517bbb --- /dev/null +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/TravelDto.kt @@ -0,0 +1,47 @@ +package eu.fosil.okupamicoche.spring.dto + +import eu.fosil.okupamicoche.entities.Travel +import eu.fosil.okupamicoche.entities.UserIdNotFoundException +import eu.fosil.okupamicoche.repositories.UserRepository +import org.springframework.data.repository.findByIdOrNull + +class TravelDto( + val id: Long, + val driverId: Long, + val travelersId: List, + val departureDate: String, + val origin: String, + val destination: String, + val availablePlaces: Int, + val description: String? = null, + val matrixRoomId: String +) { + constructor(travel: Travel) : this( + travel.id, + travel.driver.id, + travel.travelers.map { traveler -> traveler.id }, + travel.departureDate, + travel.origin, + travel.destination, + travel.availablePlaces, + travel.description, + travel.matrixRoomId + ) + + fun toTravel(userRepository: UserRepository): Travel { + val driver = userRepository.findByIdOrNull(driverId) ?: throw UserIdNotFoundException() + val travelers = travelersId.mapNotNull { id -> userRepository.findByIdOrNull(id) } + .toMutableList() + return Travel( + id, + driver, + travelers, + departureDate, + origin, + destination, + availablePlaces, + description, + matrixRoomId + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt new file mode 100644 index 0000000..6f506ce --- /dev/null +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt @@ -0,0 +1,33 @@ +package eu.fosil.okupamicoche.spring.dto + +import eu.fosil.okupamicoche.entities.User +import eu.fosil.okupamicoche.repositories.UserRepository + +class UserDto( + val id: Long, + val matrixId: String, + val name: String, + val email: String, + val travelsAsDriver: List, + val travelsAsTraveler: List +) { + constructor(user: User) : this( + user.id, + user.matrixId, + user.name, + user.email, + user.travelsAsDriver.map { t -> TravelDto(t) }, + user.travelsAsTraveler.map { t -> TravelDto(t) } + ) + + fun toUser(userRepository: UserRepository): User { + return User( + id, + matrixId, + name, + email, + travelsAsDriver.map { t -> t.toTravel(userRepository) }, + travelsAsTraveler.map { t -> t.toTravel(userRepository) } + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/ListUserTravels.kt b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/ListUserTravels.kt index 75475e3..521f843 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/ListUserTravels.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/ListUserTravels.kt @@ -7,7 +7,10 @@ import eu.fosil.okupamicoche.repositories.TravelRepository class ListUserTravels(private val travelRepository: TravelRepository) { fun listUserTravels(user: User): List { user.id?.let { - return travelRepository.findUserTravelsAsTraveler(it) + return listOf( + travelRepository.findUserTravelsAsDriver(it), + travelRepository.findUserTravelsAsTraveler(it) + ).flatten() } return listOf() }