Merge branch 'master' of git.fosil.eu:eneko/okupamicoche

This commit is contained in:
2021-01-08 00:10:03 +01:00
9 changed files with 123 additions and 25 deletions

View File

@@ -0,0 +1,3 @@
package eu.fosil.okupamicoche.entities
class UserIdNotFoundException : Exception()

View File

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

View File

@@ -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,

View File

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

View File

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

View File

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

View File

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

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

View File

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