Add friend request route
continuous-integration/drone/push Build is passing Details

pull/15/head
avalin 11 months ago
parent 4100272965
commit 680b1c2cb1

@ -6,6 +6,7 @@ import allin.model.FriendStatus
interface FriendDataSource { interface FriendDataSource {
fun addFriend(sender: String, receiver: String) fun addFriend(sender: String, receiver: String)
fun getFriendFromUserId(id: String): List<UserDTO> fun getFriendFromUserId(id: String): List<UserDTO>
fun getFriendRequestsFromUserId(id: String): List<UserDTO>
fun deleteFriend(senderId: String, receiverId: String): Boolean fun deleteFriend(senderId: String, receiverId: String): Boolean
fun isFriend(firstUser: String, secondUser: String): Boolean fun isFriend(firstUser: String, secondUser: String): Boolean
fun filterUsersByUsername(fromUserId: String, search: String): List<UserDTO> fun filterUsersByUsername(fromUserId: String, search: String): List<UserDTO>

@ -26,6 +26,15 @@ class MockFriendDataSource(private val mockData: MockDataSource.MockData) : Frie
) )
} }
override fun getFriendRequestsFromUserId(id: String): List<UserDTO> {
return friends
.filter { (it.receiver == id) && !isFriend(id, it.sender) }
.mapNotNull {
users.find { usr -> usr.id == it.sender }
?.toDto(friendStatus = FriendStatus.NOT_FRIEND)
}
}
override fun deleteFriend(senderId: String, receiverId: String) = override fun deleteFriend(senderId: String, receiverId: String) =
friends.removeIf { (it.sender == senderId) && (it.receiver == receiverId) } friends.removeIf { (it.sender == senderId) && (it.receiver == receiverId) }

@ -37,6 +37,20 @@ class PostgresFriendDataSource(private val database: Database) : FriendDataSourc
) )
} }
override fun getFriendRequestsFromUserId(id: String): List<UserDTO> {
return database.friends
.filter { it.receiver eq id }
.mapNotNull {
if (isFriend(firstUser = id, secondUser = it.sender)) {
null
} else {
database.users.find { usr ->
usr.id eq it.sender
}?.toUserDTO(friendStatus = FriendStatus.NOT_FRIEND)
}
}
}
override fun deleteFriend(senderId: String, receiverId: String): Boolean { override fun deleteFriend(senderId: String, receiverId: String): Boolean {
database.friends.removeIf { (it.sender eq receiverId) and (it.receiver eq senderId) } database.friends.removeIf { (it.sender eq receiverId) and (it.receiver eq senderId) }

@ -45,6 +45,32 @@ fun Application.friendRouter() {
} }
} }
}
get("/friends/requests", {
description = "Allows you to recover all friend requests of a JWT Token"
request {
headerParameter<JWTPrincipal>("JWT token of the logged user")
}
response {
HttpStatusCode.Accepted to {
description = "The list of friend requests is available"
body<List<UserDTO>> {
description = "List of friend requests"
}
}
}
}) {
hasToken { principal ->
verifyUserFromToken(userDataSource, principal) { _, _ ->
val username = tokenManagerBet.getUsernameFromToken(principal)
val user = userDataSource.getUserByUsername(username).first
call.respond(
HttpStatusCode.Accepted,
friendDataSource.getFriendRequestsFromUserId(user?.id.toString())
)
}
}
} }
post("/friends/add", { post("/friends/add", {
description = "Allows a user to add a friend" description = "Allows a user to add a friend"

Loading…
Cancel
Save