From 9a520007efca8fd8a24e74f5b0723b0029eea4cc Mon Sep 17 00:00:00 2001 From: Eneko Nieto Date: Mon, 4 Jan 2021 21:03:59 +0100 Subject: [PATCH] findUserTravelsAsTraveler por JPA --- .../kotlin/eu/fosil/okupamicoche/entities/Travel.kt | 9 +++++++-- src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt | 10 ++++++---- .../okupamicoche/repositories/TravelRepository.kt | 6 +++++- .../fosil/okupamicoche/usecases/travel/AddTraveler.kt | 2 +- .../okupamicoche/usecases/travel/ListUserTravels.kt | 6 ++++-- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt b/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt index f72e73c..d5c41bd 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt @@ -5,9 +5,14 @@ import javax.persistence.* @Entity class Travel( @Id @GeneratedValue var id: Long? = null, - @OneToOne + @ManyToOne var driver: User, - @OneToMany + @ManyToMany +// @JoinTable( +// name = "travel_travelers", +// joinColumns = [JoinColumn(name = "travel_id")], +// inverseJoinColumns = [JoinColumn(name = "user_id")] +// ) var travelers: MutableList, var departureDate: String, var origin: String, diff --git a/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt b/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt index 55c2d97..d6e995b 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt @@ -1,13 +1,15 @@ package eu.fosil.okupamicoche.entities -import javax.persistence.Entity -import javax.persistence.GeneratedValue -import javax.persistence.Id +import javax.persistence.* @Entity class User( @Id @GeneratedValue var id: Long? = null, var matrixId: String, var name: String, - var email: String + var email: String, + @OneToMany(mappedBy = "driver") + var travelsAsDriver: List, + @ManyToMany(mappedBy = "travelers") + var travelsAsTraveler: List ) \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt b/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt index 359a516..6c9e585 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt @@ -1,6 +1,10 @@ package eu.fosil.okupamicoche.repositories import eu.fosil.okupamicoche.entities.Travel +import org.springframework.data.jpa.repository.Query import org.springframework.data.repository.CrudRepository -interface TravelRepository : CrudRepository \ No newline at end of file +interface TravelRepository : CrudRepository { + @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/usecases/travel/AddTraveler.kt b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/AddTraveler.kt index 953092d..8696bba 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/AddTraveler.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/AddTraveler.kt @@ -6,7 +6,7 @@ import eu.fosil.okupamicoche.repositories.TravelRepository class AddTraveler(private val travelRepository: TravelRepository) { fun addTraveler(travel: Travel, user: User) { - if (travel.travelers.none { u -> u.id == user.id }) + if (!travel.travelers.contains(user)) travel.travelers.add(user) travelRepository.save(travel) } 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 571cb8f..75475e3 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/ListUserTravels.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/ListUserTravels.kt @@ -6,7 +6,9 @@ import eu.fosil.okupamicoche.repositories.TravelRepository class ListUserTravels(private val travelRepository: TravelRepository) { fun listUserTravels(user: User): List { - val travels: List = travelRepository.findAll().toList() - return travels.filter { travel -> travel.travelers.contains(user) } + user.id?.let { + return travelRepository.findUserTravelsAsTraveler(it) + } + return listOf() } } \ No newline at end of file