diff --git a/.gitignore b/.gitignore index c2065bc..a3377b4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +okupamicoche.mv.db + HELP.md .gradle build/ diff --git a/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt b/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt index 5956692..ac624d6 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/entities/Travel.kt @@ -8,11 +8,6 @@ class Travel( @ManyToOne var driver: User, @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 e49b365..c0657d0 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/entities/User.kt @@ -4,12 +4,12 @@ import javax.persistence.* @Entity class User( - @Id @GeneratedValue var id: Long, - var matrixId: String, + @Id var id: String, + var matrixId: String? = null, var name: String, - var email: String, + var email: String? = null, @OneToMany(mappedBy = "driver") - var travelsAsDriver: List, + var travelsAsDriver: List = emptyList(), @ManyToMany(mappedBy = "travelers") - var travelsAsTraveler: List + var travelsAsTraveler: List = emptyList() ) \ 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 5238817..e0d44b9 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/repositories/TravelRepository.kt @@ -3,10 +3,11 @@ package eu.fosil.okupamicoche.repositories import eu.fosil.okupamicoche.entities.Travel import org.springframework.data.jpa.repository.Query import org.springframework.data.repository.CrudRepository +import org.springframework.data.repository.query.Param 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 + @Query("SELECT t FROM Travel t WHERE t.driver.id = :userId") + fun findUserTravelsAsDriver(@Param("userId") userId: String): List + @Query("SELECT t FROM Travel t JOIN t.travelers u WHERE u.id = :userId") + fun findUserTravelsAsTraveler(@Param("userId") userId: String): List } \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/okupamicoche/repositories/UserRepository.kt b/src/main/kotlin/eu/fosil/okupamicoche/repositories/UserRepository.kt index f17cdae..5ee04fe 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/repositories/UserRepository.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/repositories/UserRepository.kt @@ -3,4 +3,4 @@ package eu.fosil.okupamicoche.repositories import eu.fosil.okupamicoche.entities.User import org.springframework.data.repository.CrudRepository -interface UserRepository : CrudRepository \ No newline at end of file +interface UserRepository : CrudRepository \ 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 351195c..560615f 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/TravelRestController.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/TravelRestController.kt @@ -5,6 +5,8 @@ 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.security.core.context.SecurityContextHolder +import org.springframework.security.oauth2.jwt.Jwt import org.springframework.validation.annotation.Validated import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping @@ -38,6 +40,12 @@ class TravelRestController( return ListTravels(travelRepository).listTravels().map { t -> TravelDto(t) } } + @RequestMapping("/listusertravels") + fun listUserTravels(): List { + val userId = getCurrentUserId() ?: throw Exception() + return ListUserTravels(travelRepository).listUserTravels(userId).map { t -> TravelDto(t) } + } + @RequestMapping("/addtraveler") fun addTraveler(travelDto: TravelDto, user: User) { AddTraveler(travelRepository).addTraveler(travelDto.toTravel(userRepository), user) @@ -47,4 +55,17 @@ class TravelRestController( fun removeTraveler(travelDto: TravelDto, user: User) { RemoveTraveler(travelRepository).removeTraveler(travelDto.toTravel(userRepository), user) } + + + /** + * Devuelve el docnumber del usuario actual. + */ + private fun getCurrentUserId(): String? { + val authentication = SecurityContextHolder.getContext().authentication + if (authentication.principal is Jwt) { + val jwt = authentication.principal as Jwt + return jwt.claims["sub"].toString() + } + return null + } } \ 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 672ea34..4133ed8 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/UserRestController.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/controller/UserRestController.kt @@ -1,12 +1,12 @@ package eu.fosil.okupamicoche.spring.controller import eu.fosil.okupamicoche.repositories.UserRepository +import eu.fosil.okupamicoche.spring.dto.CreateUserDto 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 import eu.fosil.okupamicoche.usecases.user.ListUsers -import org.springframework.validation.annotation.Validated import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @@ -16,8 +16,8 @@ import org.springframework.web.bind.annotation.RestController class UserRestController(private val userRepository: UserRepository) { @RequestMapping("/create") - fun createUser(@RequestBody @Validated userDto: UserDto) { - CreateUser(userRepository).createUser(userDto.toUser(userRepository)) + fun createUser(@RequestBody createUserDto: CreateUserDto) { + CreateUser(userRepository).createUser(createUserDto.toUser(userRepository)) } @RequestMapping("/delete") diff --git a/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/CreateUserDto.kt b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/CreateUserDto.kt new file mode 100644 index 0000000..853a8e7 --- /dev/null +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/CreateUserDto.kt @@ -0,0 +1,24 @@ +package eu.fosil.okupamicoche.spring.dto + +import eu.fosil.okupamicoche.entities.User +import eu.fosil.okupamicoche.repositories.UserRepository + +class CreateUserDto( + private val id: String, + private val name: String, + private val email: String? +) { + constructor(user: User) : this( + user.id, + user.name, + user.email + ) + + fun toUser(userRepository: UserRepository): User { + return User( + id = id, + name = name, + email = email + ) + } +} \ 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 index 4517bbb..10a8228 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/TravelDto.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/TravelDto.kt @@ -6,9 +6,10 @@ import eu.fosil.okupamicoche.repositories.UserRepository import org.springframework.data.repository.findByIdOrNull class TravelDto( + // Los campos deben ser públicos para que aparezcan en el JSON val id: Long, - val driverId: Long, - val travelersId: List, + val driverId: String, + val travelersId: List, val departureDate: String, val origin: String, val destination: String, diff --git a/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt index 6f506ce..ba818da 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/spring/dto/UserDto.kt @@ -4,10 +4,11 @@ import eu.fosil.okupamicoche.entities.User import eu.fosil.okupamicoche.repositories.UserRepository class UserDto( - val id: Long, - val matrixId: String, + // Los campos deben ser públicos para que aparezcan en el JSON + val id: String, + val matrixId: String?, val name: String, - val email: String, + val email: String?, val travelsAsDriver: List, val travelsAsTraveler: List ) { 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 521f843..b0e9477 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/ListUserTravels.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/usecases/travel/ListUserTravels.kt @@ -1,17 +1,13 @@ package eu.fosil.okupamicoche.usecases.travel import eu.fosil.okupamicoche.entities.Travel -import eu.fosil.okupamicoche.entities.User import eu.fosil.okupamicoche.repositories.TravelRepository class ListUserTravels(private val travelRepository: TravelRepository) { - fun listUserTravels(user: User): List { - user.id?.let { + fun listUserTravels(idUser: String): List { return listOf( - travelRepository.findUserTravelsAsDriver(it), - travelRepository.findUserTravelsAsTraveler(it) + travelRepository.findUserTravelsAsDriver(idUser), + travelRepository.findUserTravelsAsTraveler(idUser) ).flatten() - } - return listOf() } } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index faa8c62..7e10329 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,6 @@ spring.security.oauth2.resourceserver.jwt.issuer-uri=https://auth.fosil.eu/auth/realms/fosil spring.security.oauth2.resourceserver.jwt.jwk-set-uri=https://auth.fosil.eu/auth/realms/fosil/protocol/openid-connect/certs +spring.jpa.hibernate.ddl-auto=update +spring.datasource.url=jdbc:h2:file:./okupamicoche;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE +spring.datasource.driver-class-name=org.h2.Driver +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file