findUserTravelsAsTraveler por JPA

This commit is contained in:
Eneko Nieto
2021-01-04 21:03:59 +01:00
parent f1d4e805e7
commit 9a520007ef
5 changed files with 23 additions and 10 deletions

View File

@@ -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<User>,
var departureDate: String,
var origin: String,

View File

@@ -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<Travel>,
@ManyToMany(mappedBy = "travelers")
var travelsAsTraveler: List<Travel>
)

View File

@@ -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<Travel, Long>
interface TravelRepository : CrudRepository<Travel, Long> {
@Query("SELECT t FROM Travel t JOIN t.travelers u ON t.id=u.id WHERE t.id = ?1")
fun findUserTravelsAsTraveler(userId: Long): List<Travel>
}

View File

@@ -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)
}

View File

@@ -6,7 +6,9 @@ import eu.fosil.okupamicoche.repositories.TravelRepository
class ListUserTravels(private val travelRepository: TravelRepository) {
fun listUserTravels(user: User): List<Travel> {
val travels: List<Travel> = travelRepository.findAll().toList()
return travels.filter { travel -> travel.travelers.contains(user) }
user.id?.let {
return travelRepository.findUserTravelsAsTraveler(it)
}
return listOf()
}
}