|
|
@ -3,14 +3,15 @@ package allin.data.postgres
|
|
|
|
import allin.data.FriendDataSource
|
|
|
|
import allin.data.FriendDataSource
|
|
|
|
import allin.data.postgres.entities.FriendEntity
|
|
|
|
import allin.data.postgres.entities.FriendEntity
|
|
|
|
import allin.data.postgres.entities.friends
|
|
|
|
import allin.data.postgres.entities.friends
|
|
|
|
import allin.data.postgres.entities.getFriendStatus
|
|
|
|
|
|
|
|
import allin.data.postgres.entities.users
|
|
|
|
import allin.data.postgres.entities.users
|
|
|
|
import allin.dto.UserDTO
|
|
|
|
import allin.dto.UserDTO
|
|
|
|
|
|
|
|
import allin.ext.toLowerCase
|
|
|
|
import allin.model.FriendStatus
|
|
|
|
import allin.model.FriendStatus
|
|
|
|
import org.ktorm.database.Database
|
|
|
|
import org.ktorm.database.Database
|
|
|
|
import org.ktorm.dsl.and
|
|
|
|
import org.ktorm.dsl.and
|
|
|
|
import org.ktorm.dsl.eq
|
|
|
|
import org.ktorm.dsl.eq
|
|
|
|
import org.ktorm.dsl.like
|
|
|
|
import org.ktorm.dsl.like
|
|
|
|
|
|
|
|
import org.ktorm.dsl.notEq
|
|
|
|
import org.ktorm.entity.*
|
|
|
|
import org.ktorm.entity.*
|
|
|
|
|
|
|
|
|
|
|
|
class PostgresFriendDataSource(private val database: Database) : FriendDataSource {
|
|
|
|
class PostgresFriendDataSource(private val database: Database) : FriendDataSource {
|
|
|
@ -29,7 +30,11 @@ class PostgresFriendDataSource(private val database: Database) : FriendDataSourc
|
|
|
|
.mapNotNull {
|
|
|
|
.mapNotNull {
|
|
|
|
database.users.find { usr ->
|
|
|
|
database.users.find { usr ->
|
|
|
|
usr.id eq it.receiver
|
|
|
|
usr.id eq it.receiver
|
|
|
|
}?.toUserDTO(friendStatus = FriendStatus.FRIEND)
|
|
|
|
}?.toUserDTO(
|
|
|
|
|
|
|
|
friendStatus = if (isFriend(it.receiver, id)) {
|
|
|
|
|
|
|
|
FriendStatus.FRIEND
|
|
|
|
|
|
|
|
} else FriendStatus.REQUESTED
|
|
|
|
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -39,18 +44,10 @@ class PostgresFriendDataSource(private val database: Database) : FriendDataSourc
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun isFriend(firstUser: String, secondUser: String) =
|
|
|
|
override fun isFriend(firstUser: String, secondUser: String) =
|
|
|
|
database.friends
|
|
|
|
database.friends.any { (it.sender eq firstUser) and (it.receiver eq secondUser) }
|
|
|
|
.filter { (it.sender eq firstUser) and (it.receiver eq secondUser) }
|
|
|
|
|
|
|
|
.map { it.toFriend() }
|
|
|
|
|
|
|
|
.isNotEmpty()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun filterUsersByUsername(fromUserId: String, search: String): List<UserDTO> =
|
|
|
|
override fun filterUsersByUsername(fromUserId: String, search: String): List<UserDTO> =
|
|
|
|
database.users.filter {
|
|
|
|
database.users
|
|
|
|
it.username like "%$search%"
|
|
|
|
.filter { (it.username.toLowerCase() like "%$search%") and (it.id notEq fromUserId) }
|
|
|
|
}
|
|
|
|
.map { user -> user.toUserDTO(friendStatus = getFriendStatus(fromUserId, user.id)) }
|
|
|
|
.map { user ->
|
|
|
|
|
|
|
|
user.toUserDTO(
|
|
|
|
|
|
|
|
friendStatus = database.getFriendStatus(fromUserId, user.id)
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|