Skip to content

Commit

Permalink
Refactor user data access to use suspendable getAuthorData
Browse files Browse the repository at this point in the history
  • Loading branch information
WinG4merBR committed Dec 27, 2024
1 parent f64775e commit 187b57b
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import net.cakeyfox.foxy.FoxyInstance

import net.cakeyfox.foxy.utils.FoxyUtils
import net.cakeyfox.foxy.utils.locales.FoxyLocale
import net.cakeyfox.serializable.database.data.FoxyUser
import net.dv8tion.jda.api.entities.ISnowflake
import net.dv8tion.jda.api.entities.Message
import net.dv8tion.jda.api.events.interaction.GenericInteractionCreateEvent
Expand All @@ -30,9 +31,12 @@ class FoxyInteractionContext(
val locale = FoxyLocale(parsedLocale[event.userLocale] ?: "en-us")
val utils = FoxyUtils(foxy)
val user = event.user
val authorData = db.utils.user.getDiscordUser(user.id)
val guild = event.guild

suspend fun getAuthorData(): FoxyUser {
return db.utils.user.getDiscordUser(user.id)
}

suspend fun reply(ephemeral: Boolean = false, block: InlineMessage<*>.() -> Unit): ISnowflake? {
val msg = MessageCreateBuilder {
apply(block)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class CoinflipBetExecutor : FoxyCommandExecutor() {
return
}

if (amount > context.authorData.userCakes.balance) {
if (amount > context.getAuthorData().userCakes.balance) {
context.reply {
content = pretty(
FoxyEmotes.FoxyCry,
Expand Down Expand Up @@ -79,7 +79,7 @@ class CoinflipBetExecutor : FoxyCommandExecutor() {
context.db.utils.user.updateUser(
context.user.id,
mapOf(
"userCakes.balance" to context.authorData.userCakes.balance + amount
"userCakes.balance" to context.getAuthorData().userCakes.balance + amount
)
)

Expand Down Expand Up @@ -107,7 +107,7 @@ class CoinflipBetExecutor : FoxyCommandExecutor() {
context.db.utils.user.updateUser(
context.user.id,
mapOf(
"userCakes.balance" to context.authorData.userCakes.balance - amount
"userCakes.balance" to context.getAuthorData().userCakes.balance - amount
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class PayExecutor : FoxyCommandExecutor() {
context.db.utils.user.updateUser(
context.user.id,
mapOf(
"userCakes.balance" to context.authorData.userCakes.balance - amount
"userCakes.balance" to context.getAuthorData().userCakes.balance - amount
)
)

Expand Down Expand Up @@ -76,7 +76,7 @@ class PayExecutor : FoxyCommandExecutor() {
return
}

if (context.authorData.userCakes.balance < amount) {
if (context.getAuthorData().userCakes.balance < amount) {
context.reply {
content = pretty(
FoxyEmotes.FoxyCry,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle

class DivorceExecutor : FoxyCommandExecutor() {
override suspend fun execute(context: FoxyInteractionContext) {
if (context.authorData.marryStatus.marriedWith == null) {
if (context.getAuthorData().marryStatus.marriedWith == null) {
context.reply {
content = pretty(
FoxyEmotes.FoxyCry,
Expand All @@ -20,7 +20,7 @@ class DivorceExecutor : FoxyCommandExecutor() {
}

val partner = context.db.utils.user.getDiscordUser(
context.authorData.marryStatus.marriedWith!!
context.getAuthorData().marryStatus.marriedWith!!
)
val partnerAsUser = context.jda.retrieveUserById(partner._id).await()

Expand All @@ -39,7 +39,7 @@ class DivorceExecutor : FoxyCommandExecutor() {
) {
context.db.utils.user.updateUsers(
listOf(
context.authorData,
context.getAuthorData(),
partner
),
mapOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class MarryExecutor : FoxyCommandExecutor() {
return
}

if (context.authorData.marryStatus.marriedWith != null) {
if (context.getAuthorData().marryStatus.marriedWith != null) {
context.reply {
content = pretty(
FoxyEmotes.FoxyCry,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,48 +6,58 @@ import kotlinx.serialization.encodeToString
import net.cakeyfox.foxy.utils.database.MongoDBClient
import net.cakeyfox.serializable.database.data.*
import org.bson.Document
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

class UserUtils(
private val client: MongoDBClient
) {
fun getDiscordUser(userId: String): FoxyUser {
val collection: MongoCollection<Document> = client.database!!.getCollection("users")

val query = Document("_id", userId)
val existingUserDocument = collection.find(query).firstOrNull()
?: return createUser(userId)
suspend fun getDiscordUser(userId: String): FoxyUser {
return withContext(Dispatchers.IO) {
val collection: MongoCollection<Document> = client.database.getCollection("users")

val documentToJSON = existingUserDocument.toJson()
val query = Document("_id", userId)
val existingUserDocument = collection.find(query).firstOrNull()
?: return@withContext createUser(userId)

return client.json.decodeFromString<FoxyUser>(documentToJSON)
}
val documentToJSON = existingUserDocument.toJson()

return@withContext client.json.decodeFromString<FoxyUser>(documentToJSON)
}
}

fun updateUser(userId: String, updates: Map<String, Any?>) {
val query = Document("_id", userId)
val update = Document("\$set", Document(updates))
suspend fun updateUser(userId: String, updates: Map<String, Any?>) {
withContext(Dispatchers.IO) {
val query = Document("_id", userId)
val update = Document("\$set", Document(updates))

client.users.updateOne(query, update)
client.users.updateOne(query, update)
}
}

fun updateUsers(users: List<FoxyUser>, updates: Map<String, Any?>) {
val query = Document("_id", Document("\$in", users.map { it._id }))
val update = Document("\$set", Document(updates))
suspend fun updateUsers(users: List<FoxyUser>, updates: Map<String, Any?>) {
withContext(Dispatchers.IO) {
val query = Document("_id", Document("\$in", users.map { it._id }))
val update = Document("\$set", Document(updates))

client.users.updateMany(query, update)
client.users.updateMany(query, update)
}
}

fun getAllUsers(): List<FoxyUser> {
val collection: MongoCollection<Document> = client.database!!.getCollection("users")
suspend fun getAllUsers(): List<FoxyUser> {
return withContext(Dispatchers.IO) {
val collection: MongoCollection<Document> = client.database!!.getCollection("users")

val users = mutableListOf<FoxyUser>()
val users = mutableListOf<FoxyUser>()

collection.find().forEach {
val documentToJSON = it.toJson()
users.add(client.json.decodeFromString(documentToJSON))
}
collection.find().forEach {
val documentToJSON = it.toJson()
users.add(client.json.decodeFromString(documentToJSON))
}

return users
return@withContext users
}
}

private fun createUser(userId: String): FoxyUser {
Expand Down

0 comments on commit 187b57b

Please sign in to comment.