Skip to content

Commit

Permalink
Add support for the new transaction command for the garticos transfer…
Browse files Browse the repository at this point in the history
… endpoint
  • Loading branch information
MrPowerGamerBR committed Oct 16, 2024
1 parent 1358ed7 commit 8486540
Show file tree
Hide file tree
Showing 10 changed files with 103 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -99,5 +99,10 @@ enum class TransactionType(
I18nKeysData.Commands.Command.Transactions.Types.BomDiaECia.Title,
I18nKeysData.Commands.Command.Transactions.Types.BomDiaECia.Description,
Emotes.Telephone,
),
GARTICOS(
I18nKeysData.Commands.Command.Transactions.Types.Garticos.Title,
I18nKeysData.Commands.Command.Transactions.Types.Garticos.Description,
Emotes.Wave,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,9 @@ class SonhosTransactionsExecutor(val loritta: LorittaBot) : LorittaSlashCommandE
is BomDiaECiaCallCalledTransaction -> BomDiaECiaCallCalledSonhosTransactionTransformer.transform(loritta, i18nContext, cachedUserInfo, cachedUserInfos, transaction)
is BomDiaECiaCallWonTransaction -> BomDiaECiaCallWonSonhosTransactionTransformer.transform(loritta, i18nContext, cachedUserInfo, cachedUserInfos, transaction)

// ===[ GARTICBOT ]===
is GarticosTransferTransaction -> GarticosTransferSonhosTransactionTransformer.transform(loritta, i18nContext, cachedUserInfo, cachedUserInfos, transaction)

// This should never happen because we do a left join with a "isNotNull" check
is UnknownSonhosTransaction -> UnknownSonhosTransactionTransformer.transform(loritta, i18nContext, cachedUserInfo, cachedUserInfos, transaction)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package net.perfectdreams.loritta.morenitta.interactions.vanilla.economy.transactiontransformers

import net.perfectdreams.i18nhelper.core.I18nContext
import net.perfectdreams.loritta.morenitta.LorittaBot
import net.perfectdreams.loritta.morenitta.interactions.vanilla.economy.SonhosCommand
import net.perfectdreams.loritta.morenitta.utils.CachedUserInfo
import net.perfectdreams.loritta.serializable.GarticosTransferTransaction
import net.perfectdreams.loritta.serializable.UserId

object GarticosTransferSonhosTransactionTransformer : SonhosTransactionTransformer<GarticosTransferTransaction> {
override suspend fun transform(
loritta: LorittaBot,
i18nContext: I18nContext,
cachedUserInfo: CachedUserInfo,
cachedUserInfos: MutableMap<UserId, CachedUserInfo?>,
transaction: GarticosTransferTransaction
): suspend StringBuilder.() -> (Unit) = {
appendMoneyEarnedEmoji()
append(
i18nContext.get(
SonhosCommand.TRANSACTIONS_I18N_PREFIX.Types.Garticos.ExchangedFromGarticBot(transaction.garticos, transaction.sonhos)
)
)
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package net.perfectdreams.loritta.morenitta.website.routes.api.v1.economy

import com.github.salomonbrys.kotson.double
import com.github.salomonbrys.kotson.get
import com.github.salomonbrys.kotson.jsonObject
import com.github.salomonbrys.kotson.long
import com.github.salomonbrys.kotson.string
import com.github.salomonbrys.kotson.*
import com.google.gson.JsonParser
import io.ktor.server.application.*
import io.ktor.server.request.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import mu.KotlinLogging
import net.perfectdreams.loritta.cinnamon.pudding.utils.SimpleSonhosTransactionsLogUtils
import net.perfectdreams.loritta.common.utils.TransactionType
import net.perfectdreams.loritta.morenitta.LorittaBot
import net.perfectdreams.loritta.serializable.SonhosPaymentReason
import net.perfectdreams.loritta.morenitta.website.routes.api.v1.RequiresAPIAuthenticationRoute
import net.perfectdreams.loritta.morenitta.website.utils.extensions.respondJson
import net.perfectdreams.loritta.serializable.SonhosPaymentReason
import net.perfectdreams.loritta.serializable.StoredGarticosTransferTransaction
import java.time.Instant

class PostTransferBalanceExternalRoute(loritta: LorittaBot) : RequiresAPIAuthenticationRoute(loritta, "/api/v1/economy/transfer/garticos") {
companion object {
Expand All @@ -38,6 +38,17 @@ class PostTransferBalanceExternalRoute(loritta: LorittaBot) : RequiresAPIAuthent
finalMoney.toLong(),
SonhosPaymentReason.GARTICOS_TRANSFER
)

SimpleSonhosTransactionsLogUtils.insert(
profile.userId,
Instant.now(),
TransactionType.GARTICOS,
finalMoney.toLong(),
StoredGarticosTransferTransaction(
garticos,
transferRate
)
)
}

logger.info { "$receiverId (now has ${profile.money} dreams) transferred $garticos garticos to Loritta with transfer rate is $transferRate" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,15 @@ class GetUserTransactionsRoute(m: LorittaBot) : LoriPublicAPIRoute(
transaction.user,
transaction.sonhos
)
is net.perfectdreams.loritta.serializable.GarticosTransferTransaction -> GarticosTransferTransaction(
transaction.id,
transaction.transactionType,
transaction.timestamp,
transaction.user,
transaction.sonhos,
transaction.garticos,
transaction.transferRate
)
is net.perfectdreams.loritta.serializable.UnknownSonhosTransaction -> UnknownSonhosTransaction(
transaction.id,
transaction.transactionType,
Expand Down Expand Up @@ -680,6 +689,18 @@ class GetUserTransactionsRoute(m: LorittaBot) : LoriPublicAPIRoute(
val sonhos: Long
) : SonhosTransaction()

@Serializable
data class GarticosTransferTransaction(
override val id: Long,
override val transactionType: TransactionType,
override val timestamp: kotlinx.datetime.Instant,
@Serializable(UserIdAsStringSerializer::class)
override val user: UserId,
val sonhos: Long,
val garticos: Long,
val transferRate: Double
) : SonhosTransaction()

@Serializable
data class UnknownSonhosTransaction(
override val id: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,17 @@ data class BomDiaECiaCallWonTransaction(
val sonhos: Long
) : SonhosTransaction()

@Serializable
data class GarticosTransferTransaction(
override val id: Long,
override val transactionType: TransactionType,
override val timestamp: Instant,
override val user: UserId,
val sonhos: Long,
val garticos: Long,
val transferRate: Double
) : SonhosTransaction()

@Serializable
data class UnknownSonhosTransaction(
override val id: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,12 @@ data object StoredBomDiaECiaCallCalledTransaction : StoredSonhosTransaction()
@Serializable
data object StoredBomDiaECiaCallWonTransaction : StoredSonhosTransaction()

@Serializable
data class StoredGarticosTransferTransaction(
val garticos: Long,
val transferRate: Double
) : StoredSonhosTransaction()

@Serializable
data class StoredLorittaItemShopBoughtBackgroundTransaction(
val internalBackgroundId: String
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class Pudding(
private val DRIVER_CLASS_NAME = "org.postgresql.Driver"
private val ISOLATION_LEVEL =
IsolationLevel.TRANSACTION_REPEATABLE_READ // We use repeatable read to avoid dirty and non-repeatable reads! Very useful and safe!!
private const val SCHEMA_VERSION = 57 // Bump this every time any table is added/updated!
private const val SCHEMA_VERSION = 58 // Bump this every time any table is added/updated!
private val SCHEMA_ID = UUID.fromString("600556aa-2920-41c7-b26c-7717eff2d392") // This is a random unique ID, it is used for upserting the schema version

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,16 @@ class SonhosService(private val pudding: Pudding) : Service(pudding) {
it[SimpleSonhosTransactionsLog.sonhos]
)

is StoredGarticosTransferTransaction -> GarticosTransferTransaction(
it[SimpleSonhosTransactionsLog.id].value,
it[SimpleSonhosTransactionsLog.type],
it[SimpleSonhosTransactionsLog.timestamp].toKotlinInstant(),
UserId(it[SimpleSonhosTransactionsLog.user].value),
it[SimpleSonhosTransactionsLog.sonhos],
stored.garticos,
stored.transferRate
)

is StoredEmojiFightBetSonhosTransaction -> {
val emojiFightMatchmakingResult = emojiFightMatchmakingResults.first { it[EmojiFightMatchmakingResults.id].value == stored.emojiFightMatchmakingResultsId }

Expand Down
4 changes: 4 additions & 0 deletions resources/languages/pt/commands/transactions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ types:
description: "Transações relacionadas ao Bom Dia & Cia"
called: "Pagou {quantity,plural, =0 {# sonhos} one {# sonho} other {# sonhos}} para ligar no Bom Dia & Cia"
won: "Recebeu {quantity,plural, =0 {# sonhos} one {# sonho} other {# sonhos}} por ter ligado para o Bom Dia & Cia"
garticos:
title: "Garticos"
description: "Transações relacionadas ao GarticBot"
exchangedFromGarticBot: "Transferiu {garticosQuantity,plural, =0 {# garticos} one {# gartico} other {# garticos}} do GarticBot para {sonhosQuantity,plural, =0 {# sonhos} one {# sonho} other {# sonhos}} na Loritta"
options:
user:
text: "O usuário que você deseja ver as transações"
Expand Down

0 comments on commit 8486540

Please sign in to comment.