Type alias para los ids

This commit is contained in:
Eneko Nieto
2021-01-13 02:30:33 +01:00
parent 07291d7e82
commit 96086f7bde
12 changed files with 61 additions and 25 deletions

View File

@@ -2,9 +2,11 @@ package eu.fosil.okupamicoche.entities
import javax.persistence.*
typealias TravelId = Long
@Entity
class Travel(
@Id @GeneratedValue var id: Long,
@Id @GeneratedValue var id: TravelId,
@ManyToOne
var driver: User,
@ManyToMany

View File

@@ -2,9 +2,11 @@ package eu.fosil.okupamicoche.entities
import javax.persistence.*
typealias UserId = String
@Entity
class User(
@Id var id: String,
@Id var id: UserId,
var matrixId: String? = null,
var name: String,
var email: String? = null,

View File

@@ -1,13 +1,15 @@
package eu.fosil.okupamicoche.repositories
import eu.fosil.okupamicoche.entities.Travel
import eu.fosil.okupamicoche.entities.TravelId
import eu.fosil.okupamicoche.entities.UserId
import org.springframework.data.jpa.repository.Query
import org.springframework.data.repository.CrudRepository
import org.springframework.data.repository.query.Param
interface TravelRepository : CrudRepository<Travel, Long> {
interface TravelRepository : CrudRepository<Travel, TravelId> {
@Query("SELECT t FROM Travel t WHERE t.driver.id = :userId")
fun findUserTravelsAsDriver(@Param("userId") userId: String): List<Travel>
fun findUserTravelsAsDriver(@Param("userId") userId: UserId): List<Travel>
@Query("SELECT t FROM Travel t JOIN t.travelers u WHERE u.id = :userId")
fun findUserTravelsAsTraveler(@Param("userId") userId: String): List<Travel>
fun findUserTravelsAsTraveler(@Param("userId") userId: UserId): List<Travel>
}

View File

@@ -1,6 +1,7 @@
package eu.fosil.okupamicoche.repositories
import eu.fosil.okupamicoche.entities.User
import eu.fosil.okupamicoche.entities.UserId
import org.springframework.data.repository.CrudRepository
interface UserRepository : CrudRepository<User, String>
interface UserRepository : CrudRepository<User, UserId>

View File

@@ -1,10 +1,12 @@
package eu.fosil.okupamicoche.spring.controller
import eu.fosil.okupamicoche.entities.TravelId
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.data.repository.findByIdOrNull
import org.springframework.security.core.context.SecurityContextHolder
import org.springframework.security.oauth2.jwt.Jwt
import org.springframework.validation.annotation.Validated
@@ -25,9 +27,14 @@ class TravelRestController(
CreateTravel(travelRepository).createTravel(travelDto.toTravel(userRepository))
}
@RequestMapping("/get")
fun getTravel(@RequestBody @Validated travelId: TravelId): TravelDto? {
return travelRepository.findByIdOrNull(travelId)?.let { TravelDto(it) }
}
@RequestMapping("/delete")
fun deleteTravel(travelDto: TravelDto) {
DeleteTravel(travelRepository).deleteTravel(travelDto.toTravel(userRepository))
fun deleteTravel(id: TravelId) {
DeleteTravel(travelRepository).deleteTravel(id)
}
@RequestMapping("/edit")

View File

@@ -1,12 +1,13 @@
package eu.fosil.okupamicoche.spring.controller
import eu.fosil.okupamicoche.entities.UserId
import eu.fosil.okupamicoche.repositories.UserRepository
import eu.fosil.okupamicoche.spring.dto.CreateUserDto
import eu.fosil.okupamicoche.spring.dto.TravelDto
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 eu.fosil.okupamicoche.usecases.user.*
import org.springframework.data.repository.findByIdOrNull
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
@@ -20,9 +21,14 @@ class UserRestController(private val userRepository: UserRepository) {
CreateUser(userRepository).createUser(createUserDto.toUser(userRepository))
}
@RequestMapping("/get")
fun getUser(@RequestBody @Validated userId: UserId): UserDto? {
return GetUser(userRepository).getUser(userId)?.let { UserDto(it) }
}
@RequestMapping("/delete")
fun deleteUser(userDto: UserDto) {
DeleteUser(userRepository).deleteUser(userDto.toUser(userRepository))
fun deleteUser(userId: UserId) {
DeleteUser(userRepository).deleteUser(userId)
}
@RequestMapping("/edit")

View File

@@ -1,15 +1,17 @@
package eu.fosil.okupamicoche.spring.dto
import eu.fosil.okupamicoche.entities.Travel
import eu.fosil.okupamicoche.entities.TravelId
import eu.fosil.okupamicoche.entities.UserId
import eu.fosil.okupamicoche.entities.UserIdNotFoundException
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: String,
val travelersId: List<String>,
val id: TravelId,
val driverId: UserId,
val travelersId: List<UserId>,
val departureDate: String,
val origin: String,
val destination: String,

View File

@@ -1,11 +1,12 @@
package eu.fosil.okupamicoche.spring.dto
import eu.fosil.okupamicoche.entities.User
import eu.fosil.okupamicoche.entities.UserId
import eu.fosil.okupamicoche.repositories.UserRepository
class UserDto(
// Los campos deben ser públicos para que aparezcan en el JSON
val id: String,
val id: UserId,
val matrixId: String?,
val name: String,
val email: String?,

View File

@@ -1,10 +1,10 @@
package eu.fosil.okupamicoche.usecases.travel
import eu.fosil.okupamicoche.entities.Travel
import eu.fosil.okupamicoche.entities.TravelId
import eu.fosil.okupamicoche.repositories.TravelRepository
class DeleteTravel(private val travelRepository: TravelRepository) {
fun deleteTravel(travel: Travel) {
travelRepository.delete(travel)
fun deleteTravel(id: TravelId) {
travelRepository.deleteById(id)
}
}

View File

@@ -1,10 +1,11 @@
package eu.fosil.okupamicoche.usecases.travel
import eu.fosil.okupamicoche.entities.Travel
import eu.fosil.okupamicoche.entities.UserId
import eu.fosil.okupamicoche.repositories.TravelRepository
class ListUserTravels(private val travelRepository: TravelRepository) {
fun listUserTravels(idUser: String): List<Travel> {
fun listUserTravels(idUser: UserId): List<Travel> {
return listOf(
travelRepository.findUserTravelsAsDriver(idUser),
travelRepository.findUserTravelsAsTraveler(idUser)

View File

@@ -1,11 +1,11 @@
package eu.fosil.okupamicoche.usecases.user
import eu.fosil.okupamicoche.entities.User
import eu.fosil.okupamicoche.entities.UserId
import eu.fosil.okupamicoche.repositories.UserRepository
class DeleteUser(private val userRepository: UserRepository) {
fun deleteUser(user: User) {
userRepository.delete(user)
fun deleteUser(userId: UserId) {
userRepository.deleteById(userId)
// cancelarViajes()
// desapuntarseViajes()
}

View File

@@ -0,0 +1,12 @@
package eu.fosil.okupamicoche.usecases.user
import eu.fosil.okupamicoche.entities.User
import eu.fosil.okupamicoche.entities.UserId
import eu.fosil.okupamicoche.repositories.UserRepository
import org.springframework.data.repository.findByIdOrNull
class GetUser(private val userRepository: UserRepository) {
fun getUser(userId: UserId): User? {
return userRepository.findByIdOrNull(userId)
}
}