Merge branch 'master' of git.fosil.eu:eneko/okupamicoche
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
package eu.fosil.okupamicoche.entities
|
||||
|
||||
class UserIdNotFoundException : Exception()
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -5,6 +5,8 @@ import org.springframework.data.jpa.repository.Query
|
||||
import org.springframework.data.repository.CrudRepository
|
||||
|
||||
interface TravelRepository : CrudRepository<Travel, Long> {
|
||||
@Query("SELECT t FROM Travel t JOIN t.driver u ON t.id=u.id WHERE t.id = ?1")
|
||||
fun findUserTravelsAsDriver(userId: Long): List<Travel>
|
||||
@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>
|
||||
}
|
||||
@@ -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<TravelDto> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
@@ -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<User> {
|
||||
return ListUsers(userRepository).listUsers()
|
||||
fun listUsers(): List<UserDto> {
|
||||
return ListUsers(userRepository).listUsers().map { UserDto(it) }
|
||||
}
|
||||
}
|
||||
@@ -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<Long>,
|
||||
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
|
||||
)
|
||||
}
|
||||
}
|
||||
33
src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt
Normal file
33
src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt
Normal file
@@ -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<TravelDto>,
|
||||
val travelsAsTraveler: List<TravelDto>
|
||||
) {
|
||||
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) }
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,10 @@ import eu.fosil.okupamicoche.repositories.TravelRepository
|
||||
class ListUserTravels(private val travelRepository: TravelRepository) {
|
||||
fun listUserTravels(user: User): List<Travel> {
|
||||
user.id?.let {
|
||||
return travelRepository.findUserTravelsAsTraveler(it)
|
||||
return listOf(
|
||||
travelRepository.findUserTravelsAsDriver(it),
|
||||
travelRepository.findUserTravelsAsTraveler(it)
|
||||
).flatten()
|
||||
}
|
||||
return listOf()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user