You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Api/Sources/src/main/kotlin/allin/data/postgres/PostgresFriendDataSource.kt

42 lines
1.4 KiB

package allin.data.postgres
import allin.data.FriendDataSource
import allin.data.postgres.entities.FriendEntity
import allin.data.postgres.entities.friends
import allin.data.postgres.entities.users
import org.ktorm.database.Database
import org.ktorm.dsl.and
import org.ktorm.dsl.eq
import org.ktorm.entity.*
class PostgresFriendDataSource(private val database: Database) : FriendDataSource {
override fun addFriend(sender: String, receiver: String) {
database.friends.add(
FriendEntity {
this.sender = sender
this.receiver = receiver
}
)
}
override fun getFriendFromUserId(id: String) =
database.friends.map { it.toFriend() }
.filter { it.sender == id }
.mapNotNull {
database.users.find { usr ->
usr.id eq it.receiver
}?.toUserDTO()
}
override fun deleteFriend(senderId: String, receiverId: String): Boolean {
database.friends.removeIf { (it.sender eq receiverId) and (it.receiver eq senderId) }
return database.friends.removeIf { (it.sender eq senderId) and (it.receiver eq receiverId) } > 0
}
override fun isFriend(firstUser: String, secondUser: String) =
database.friends
.filter { (it.sender eq firstUser) and (it.receiver eq secondUser) }
.map { it.toFriend() }
.isNotEmpty()
}