|
|
|
@ -1,14 +1,13 @@
|
|
|
|
|
package allin.routing
|
|
|
|
|
|
|
|
|
|
import allin.dataSource
|
|
|
|
|
import allin.dto.UserDTO
|
|
|
|
|
import allin.ext.hasToken
|
|
|
|
|
import allin.ext.verifyUserFromToken
|
|
|
|
|
import allin.model.ApiMessage
|
|
|
|
|
import allin.model.Bet
|
|
|
|
|
import io.github.smiley4.ktorswaggerui.dsl.get
|
|
|
|
|
import io.github.smiley4.ktorswaggerui.dsl.post
|
|
|
|
|
import io.ktor.http.*
|
|
|
|
|
|
|
|
|
|
import io.ktor.server.application.*
|
|
|
|
|
import io.ktor.server.auth.*
|
|
|
|
|
import io.ktor.server.auth.jwt.*
|
|
|
|
@ -32,7 +31,7 @@ fun Application.friendRouter() {
|
|
|
|
|
response {
|
|
|
|
|
HttpStatusCode.Accepted to {
|
|
|
|
|
description = "The list of friends is available"
|
|
|
|
|
body<List<Bet>> {
|
|
|
|
|
body<List<UserDTO>> {
|
|
|
|
|
description = "List of friends"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -58,7 +57,7 @@ fun Application.friendRouter() {
|
|
|
|
|
response {
|
|
|
|
|
HttpStatusCode.Created to {
|
|
|
|
|
description = "the friend has been added"
|
|
|
|
|
body<String>() {
|
|
|
|
|
body<String> {
|
|
|
|
|
description = "Friend with assigned id"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -70,7 +69,10 @@ fun Application.friendRouter() {
|
|
|
|
|
}) {
|
|
|
|
|
hasToken { principal ->
|
|
|
|
|
val requestMap = call.receive<Map<String, String>>()
|
|
|
|
|
val usernameFriend = requestMap["username"] ?: return@hasToken call.respond(HttpStatusCode.BadRequest, "Username is missing")
|
|
|
|
|
val usernameFriend = requestMap["username"] ?: return@hasToken call.respond(
|
|
|
|
|
HttpStatusCode.BadRequest,
|
|
|
|
|
"Username is missing"
|
|
|
|
|
)
|
|
|
|
|
val username = tokenManagerBet.getUsernameFromToken(principal)
|
|
|
|
|
|
|
|
|
|
val user = userDataSource.getUserByUsername(username).first
|
|
|
|
@ -78,13 +80,11 @@ fun Application.friendRouter() {
|
|
|
|
|
|
|
|
|
|
if (user == null || userFriend == null) {
|
|
|
|
|
call.respond(HttpStatusCode.Conflict, ApiMessage.USER_NOT_FOUND)
|
|
|
|
|
}
|
|
|
|
|
else if (userFriend == user) {
|
|
|
|
|
} else if (userFriend == user) {
|
|
|
|
|
call.respond(HttpStatusCode.Conflict, ApiMessage.FRIENDS_REQUEST_HIMSELF)
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
} else {
|
|
|
|
|
val friendlist = friendDataSource.getFriendFromUserId(user.id)
|
|
|
|
|
if (friendlist.contains(userFriend.id)) {
|
|
|
|
|
if (friendlist.map { it.id }.contains(userFriend.id)) {
|
|
|
|
|
call.respond(HttpStatusCode.Conflict, ApiMessage.FRIENDS_ALREADY_EXISTS)
|
|
|
|
|
} else {
|
|
|
|
|
friendDataSource.addFriend(user.id, userFriend.id)
|
|
|
|
@ -92,7 +92,6 @@ fun Application.friendRouter() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
post("/friends/delete", {
|
|
|
|
|
description = "Allows a user to delete a friend"
|
|
|
|
@ -105,7 +104,7 @@ fun Application.friendRouter() {
|
|
|
|
|
response {
|
|
|
|
|
HttpStatusCode.Created to {
|
|
|
|
|
description = "the friend has been delete"
|
|
|
|
|
body<String>() {
|
|
|
|
|
body<String> {
|
|
|
|
|
description = "Friend with assigned id"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -117,7 +116,10 @@ fun Application.friendRouter() {
|
|
|
|
|
}) {
|
|
|
|
|
hasToken { principal ->
|
|
|
|
|
val requestMap = call.receive<Map<String, String>>()
|
|
|
|
|
val usernameFriend = requestMap["username"] ?: return@hasToken call.respond(HttpStatusCode.BadRequest, "Username is missing")
|
|
|
|
|
val usernameFriend = requestMap["username"] ?: return@hasToken call.respond(
|
|
|
|
|
HttpStatusCode.BadRequest,
|
|
|
|
|
"Username is missing"
|
|
|
|
|
)
|
|
|
|
|
val username = tokenManagerBet.getUsernameFromToken(principal)
|
|
|
|
|
|
|
|
|
|
val user = userDataSource.getUserByUsername(username).first
|
|
|
|
@ -127,7 +129,7 @@ fun Application.friendRouter() {
|
|
|
|
|
call.respond(HttpStatusCode.Conflict, ApiMessage.USER_NOT_FOUND)
|
|
|
|
|
} else {
|
|
|
|
|
val friendlist = friendDataSource.getFriendFromUserId(user.id)
|
|
|
|
|
if (!friendlist.contains(userFriend.id)) {
|
|
|
|
|
if (!friendlist.map { it.id }.contains(userFriend.id)) {
|
|
|
|
|
call.respond(HttpStatusCode.Conflict, ApiMessage.FRIENDS_DOESNT_EXISTS)
|
|
|
|
|
} else {
|
|
|
|
|
friendDataSource.deleteFriend(user.id, userFriend.id)
|
|
|
|
@ -138,6 +140,33 @@ fun Application.friendRouter() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get("/friends/search/{search}", {
|
|
|
|
|
description = "Search for users based on username"
|
|
|
|
|
request {
|
|
|
|
|
headerParameter<JWTPrincipal>("JWT token of the logged user")
|
|
|
|
|
pathParameter<String>("Search string")
|
|
|
|
|
}
|
|
|
|
|
response {
|
|
|
|
|
HttpStatusCode.OK to {
|
|
|
|
|
body<List<UserDTO>> {
|
|
|
|
|
description = "Filtered users."
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}) {
|
|
|
|
|
hasToken { principal ->
|
|
|
|
|
verifyUserFromToken(userDataSource, principal) { userDto, _ ->
|
|
|
|
|
val users = friendDataSource.filterUsersByUsername(
|
|
|
|
|
fromUserId = userDto.id,
|
|
|
|
|
search = call.parameters["search"] ?: ""
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
call.respond(HttpStatusCode.OK, users)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|