Invite user to chat on travel join
This commit is contained in:
@@ -36,8 +36,8 @@ class PrivateTravelRestController(
|
||||
throw CannotDuplicateIdException("Travel id already exists.")
|
||||
travel.driverInfo = UserInfoDto(driver)
|
||||
|
||||
val createTravel = useCaseService.getCreateTravel()
|
||||
createTravel.createTravel(travel.toTravel(userRepository))
|
||||
val useCase = useCaseService.getCreateTravel()
|
||||
useCase.createTravel(travel.toTravel(userRepository))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +98,8 @@ class PrivateTravelRestController(
|
||||
suspend fun join(@RequestParam @Validated travelId: TravelId, principal: Principal): ApiResponse<Unit> {
|
||||
return response {
|
||||
val userId = authService.currentUser(principal).id
|
||||
AddTraveler(userRepository, travelRepository).addTraveler(travelId, userId)
|
||||
val useCase = useCaseService.getAddTraveler()
|
||||
useCase.addTraveler(travelId, userId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,7 +107,8 @@ class PrivateTravelRestController(
|
||||
suspend fun leave(@RequestParam @Validated travelId: TravelId, principal: Principal): ApiResponse<Unit> {
|
||||
return response {
|
||||
val userId = authService.currentUser(principal).id
|
||||
RemoveTraveler(userRepository, travelRepository).removeTraveler(travelId, userId)
|
||||
val useCase = useCaseService.getRemoveTraveler()
|
||||
useCase.removeTraveler(travelId, userId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +120,8 @@ class PrivateTravelRestController(
|
||||
): ApiResponse<Unit> {
|
||||
return response {
|
||||
throwErrorIfCannotEditTravel(travelId, principal)
|
||||
AddTraveler(userRepository, travelRepository).addTraveler(travelId, userId)
|
||||
val useCase = useCaseService.getAddTraveler()
|
||||
useCase.addTraveler(travelId, userId)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,8 +132,8 @@ class PrivateTravelRestController(
|
||||
principal: Principal
|
||||
): ApiResponse<Unit> {
|
||||
return response {
|
||||
throwErrorIfCannotEditTravel(travelId, principal)
|
||||
RemoveTraveler(userRepository, travelRepository).removeTraveler(travelId, userId)
|
||||
val useCase = useCaseService.getRemoveTraveler()
|
||||
useCase.removeTraveler(travelId, userId)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,4 +31,10 @@ class MatrixService(private val matrixClient: MatrixClient) : MatrixApi {
|
||||
logger.debug { "Invite user $matrixUserId to room $roomId" }
|
||||
matrixClient.roomsApi.inviteUser(MatrixId.RoomId(roomId), matrixUserId)
|
||||
}
|
||||
|
||||
override suspend fun kickUser(roomId: String, user: User) {
|
||||
val matrixUserId = MatrixId.UserId(user.matrixId)
|
||||
logger.debug { "Kick user $matrixUserId from room $roomId" }
|
||||
matrixClient.roomsApi.leaveRoom(MatrixId.RoomId(roomId), matrixUserId)
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,18 @@
|
||||
package eu.fosil.okupamicoche.spring.services
|
||||
|
||||
import eu.fosil.okupamicoche.repositories.TravelRepository
|
||||
import eu.fosil.okupamicoche.repositories.UserRepository
|
||||
import eu.fosil.okupamicoche.usecases.UseCaseFactory
|
||||
import eu.fosil.okupamicoche.usecases.matrix.CreateRoomForTravel
|
||||
import eu.fosil.okupamicoche.usecases.travel.AddTraveler
|
||||
import eu.fosil.okupamicoche.usecases.travel.CreateTravel
|
||||
import eu.fosil.okupamicoche.usecases.travel.RemoveTraveler
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
class UseCaseService(
|
||||
private val travelRepository: TravelRepository,
|
||||
private val userRepository: UserRepository,
|
||||
private val matrixService: MatrixService
|
||||
) : UseCaseFactory {
|
||||
override fun getCreateTravel(): CreateTravel {
|
||||
@@ -18,4 +22,12 @@ class UseCaseService(
|
||||
override fun getCreateRoomForTravel(): CreateRoomForTravel {
|
||||
return CreateRoomForTravel(matrixService)
|
||||
}
|
||||
|
||||
override fun getAddTraveler(): AddTraveler {
|
||||
return AddTraveler(userRepository, travelRepository, matrixService)
|
||||
}
|
||||
|
||||
override fun getRemoveTraveler(): RemoveTraveler {
|
||||
return RemoveTraveler(userRepository, travelRepository, matrixService)
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,13 @@
|
||||
package eu.fosil.okupamicoche.usecases
|
||||
|
||||
import eu.fosil.okupamicoche.usecases.matrix.CreateRoomForTravel
|
||||
import eu.fosil.okupamicoche.usecases.travel.AddTraveler
|
||||
import eu.fosil.okupamicoche.usecases.travel.CreateTravel
|
||||
import eu.fosil.okupamicoche.usecases.travel.RemoveTraveler
|
||||
|
||||
interface UseCaseFactory {
|
||||
fun getCreateTravel(): CreateTravel
|
||||
|
||||
fun getCreateRoomForTravel(): CreateRoomForTravel
|
||||
fun getAddTraveler(): AddTraveler
|
||||
fun getRemoveTraveler(): RemoveTraveler
|
||||
}
|
||||
@@ -10,4 +10,6 @@ interface MatrixApi {
|
||||
suspend fun createRoom(name: String, alias: String, usersToInvite: Set<User>, topic: String?): String
|
||||
|
||||
suspend fun inviteUser(roomId: String, user: User)
|
||||
|
||||
suspend fun kickUser(roomId: String, user: User)
|
||||
}
|
||||
@@ -4,16 +4,21 @@ import eu.fosil.okupamicoche.entities.TravelId
|
||||
import eu.fosil.okupamicoche.entities.UserId
|
||||
import eu.fosil.okupamicoche.repositories.TravelRepository
|
||||
import eu.fosil.okupamicoche.repositories.UserRepository
|
||||
import eu.fosil.okupamicoche.usecases.matrix.MatrixApi
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
|
||||
class AddTraveler(
|
||||
private val userRepository: UserRepository,
|
||||
private val travelRepository: TravelRepository
|
||||
private val userRepository: UserRepository,
|
||||
private val travelRepository: TravelRepository,
|
||||
private val matrixApi: MatrixApi
|
||||
) {
|
||||
fun addTraveler(travelId: TravelId, userId: UserId) {
|
||||
suspend fun addTraveler(travelId: TravelId, userId: UserId) {
|
||||
val user = userRepository.findByIdOrNull(userId)
|
||||
val travel = travelRepository.findByIdOrNull(travelId)
|
||||
if ((travel?.travelers?.contains(user) == false) && (user != null)) {
|
||||
|
||||
val traveler = travel?.travelers?.find { it.id == userId }
|
||||
if ((traveler == null) && (travel != null) && (user != null)) {
|
||||
matrixApi.inviteUser(travel.matrixRoomId, user)
|
||||
travel.travelers.add(user)
|
||||
travelRepository.save(travel)
|
||||
}
|
||||
|
||||
@@ -4,17 +4,24 @@ import eu.fosil.okupamicoche.entities.TravelId
|
||||
import eu.fosil.okupamicoche.entities.UserId
|
||||
import eu.fosil.okupamicoche.repositories.TravelRepository
|
||||
import eu.fosil.okupamicoche.repositories.UserRepository
|
||||
import eu.fosil.okupamicoche.usecases.matrix.MatrixApi
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
|
||||
class RemoveTraveler(
|
||||
private val userRepository: UserRepository,
|
||||
private val travelRepository: TravelRepository
|
||||
private val userRepository: UserRepository,
|
||||
private val travelRepository: TravelRepository,
|
||||
private val matrixApi: MatrixApi
|
||||
) {
|
||||
fun removeTraveler(travelId: TravelId, userId: UserId) {
|
||||
suspend fun removeTraveler(travelId: TravelId, userId: UserId) {
|
||||
val user = userRepository.findByIdOrNull(userId)
|
||||
val travel = travelRepository.findByIdOrNull(travelId)
|
||||
if ((user != null) && (travel != null)) {
|
||||
travel.travelers.remove(user)
|
||||
|
||||
println("userId=$userId user=$user travel=$travel contains=${travel?.travelers?.contains(user)}")
|
||||
|
||||
val traveler = travel?.travelers?.find { it.id == userId }
|
||||
if ((traveler != null) && (user != null)) {
|
||||
matrixApi.kickUser(travel.matrixRoomId, user)
|
||||
travel.travelers.remove(traveler)
|
||||
travelRepository.save(travel)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user