Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ buildscript {
}
dependencies {
classpath("dev.slne.surf:surf-api-gradle-plugin:1.21.11+")
classpath("dev.slne.surf.microservice:surf-microservice-gradle-plugin:1.21.11+")
}
}

Expand Down
13 changes: 12 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
rootProject.name = "surf-transaction"
pluginManagement {
repositories {
gradlePluginPortal()
maven("https://repo.slne.dev/repository/maven-public/") { name = "maven-public" }
}
}

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
id("dev.slne.surf.surfapi.gradle.settings") version "1.21.11+"
}

rootProject.name = "surf-transaction"

include("surf-transaction-api")
include("surf-transaction-core")
include("surf-transaction-core:surf-transaction-core-common")
include("surf-transaction-core:surf-transaction-core-client")
include("surf-transaction-microservice")
include("surf-transaction-paper")
include("surf-transaction-velocity")
15 changes: 15 additions & 0 deletions surf-transaction-api/api/surf-transaction-api.api
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,16 @@ public final class dev/slne/surf/transaction/api/account/member/results/AccountM
public static final field ACCOUNT_NOT_FOUND Ldev/slne/surf/transaction/api/account/member/results/AccountMemberResult;
public static final field NOTHING_CHANGED Ldev/slne/surf/transaction/api/account/member/results/AccountMemberResult;
public static final field SUCCESS Ldev/slne/surf/transaction/api/account/member/results/AccountMemberResult;
public static final field Companion Ldev/slne/surf/transaction/api/account/member/results/AccountMemberResult$Companion;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Ldev/slne/surf/transaction/api/account/member/results/AccountMemberResult;
public static fun values ()[Ldev/slne/surf/transaction/api/account/member/results/AccountMemberResult;
}

public final class dev/slne/surf/transaction/api/account/member/results/AccountMemberResult$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public abstract interface class dev/slne/surf/transaction/api/account/result/AccountCreationResult {
}

Expand All @@ -65,11 +70,16 @@ public final class dev/slne/surf/transaction/api/account/result/AccountCreationR
public static final field NAME_IS_UUID Ldev/slne/surf/transaction/api/account/result/AccountCreationResult$FailureReason;
public static final field NAME_TOO_LONG Ldev/slne/surf/transaction/api/account/result/AccountCreationResult$FailureReason;
public static final field NAME_TOO_SHORT Ldev/slne/surf/transaction/api/account/result/AccountCreationResult$FailureReason;
public static final field Companion Ldev/slne/surf/transaction/api/account/result/AccountCreationResult$FailureReason$Companion;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Ldev/slne/surf/transaction/api/account/result/AccountCreationResult$FailureReason;
public static fun values ()[Ldev/slne/surf/transaction/api/account/result/AccountCreationResult$FailureReason;
}

public final class dev/slne/surf/transaction/api/account/result/AccountCreationResult$FailureReason$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public final class dev/slne/surf/transaction/api/account/result/AccountCreationResult$Success : dev/slne/surf/transaction/api/account/result/AccountCreationResult {
public fun <init> (Ldev/slne/surf/transaction/api/account/Account;)V
public final fun component1 ()Ldev/slne/surf/transaction/api/account/Account;
Expand All @@ -85,11 +95,16 @@ public final class dev/slne/surf/transaction/api/account/result/AccountDeleteRes
public static final field ACCOUNT_NOT_FOUND Ldev/slne/surf/transaction/api/account/result/AccountDeleteResult;
public static final field DEFAULT_ACCOUNT_CANNOT_BE_DELETED Ldev/slne/surf/transaction/api/account/result/AccountDeleteResult;
public static final field SUCCESS Ldev/slne/surf/transaction/api/account/result/AccountDeleteResult;
public static final field Companion Ldev/slne/surf/transaction/api/account/result/AccountDeleteResult$Companion;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Ldev/slne/surf/transaction/api/account/result/AccountDeleteResult;
public static fun values ()[Ldev/slne/surf/transaction/api/account/result/AccountDeleteResult;
}

public final class dev/slne/surf/transaction/api/account/result/AccountDeleteResult$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public abstract interface class dev/slne/surf/transaction/api/currency/Currency : net/kyori/adventure/text/ComponentLike {
public static final field CURRENCY_NAME_MAX_LENGTH I
public static final field CURRENCY_SYMBOL_MAX_LENGTH I
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package dev.slne.surf.transaction.api.account.member.results

import kotlinx.serialization.Serializable

/**
* Represents the result of an account member modification operation.
*
* This result is returned when adding or removing members from an account.
*/
@Serializable
enum class AccountMemberResult {

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.slne.surf.transaction.api.account.result

import kotlinx.serialization.Serializable
import dev.slne.surf.transaction.api.account.Account

/**
Expand Down Expand Up @@ -27,6 +28,7 @@ sealed interface AccountCreationResult {
/**
* Describes possible reasons why account creation may fail.
*/
@Serializable
enum class FailureReason {
/**
* An account with the given name already exists.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package dev.slne.surf.transaction.api.account.result

import kotlinx.serialization.Serializable

/**
* Represents the result of an account deletion attempt.
*/
@Serializable
enum class AccountDeleteResult {

/**
Expand Down
13 changes: 1 addition & 12 deletions surf-transaction-core/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,12 +1 @@
plugins {
id("dev.slne.surf.surfapi.gradle.core")
}

surfCoreApi {
withSurfDatabaseR2dbc("1.3.0", "dev.slne.surf.transaction.libs.db")
withSurfRedis()
}

dependencies {
api(project(":surf-transaction-api"))
}
// Container module – no source code, sub-modules carry all implementation

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import dev.slne.surf.microservice.gradle.plugin.rabbit.RabbitModule

plugins {
id("dev.slne.surf.surfapi.gradle.core")
id("dev.slne.surf.microservice")
}

surfMicroservice {
withRabbitModule(RabbitModule.CLIENT_API)
}

surfCoreApi {
withSurfRedis()
}

dependencies {
api(project(":surf-transaction-api"))
api(project(":surf-transaction-core:surf-transaction-core-common"))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package dev.slne.surf.transaction.core.client.account

import com.google.auto.service.AutoService
import dev.slne.surf.microservice.api.rabbit.client.ClientRabbitMQApi
import dev.slne.surf.surfapi.core.api.util.requiredService
import dev.slne.surf.transaction.api.account.Account
import dev.slne.surf.transaction.api.account.AccountService
import dev.slne.surf.transaction.api.account.member.results.AccountMemberResult
import dev.slne.surf.transaction.api.account.result.AccountCreationResult
import dev.slne.surf.transaction.api.account.result.AccountDeleteResult
import dev.slne.surf.transaction.core.account.CoreAccountService
import dev.slne.surf.transaction.core.rabbit.account.AddMemberToAccountRequest
import dev.slne.surf.transaction.core.rabbit.account.CompleteAccountNameSuggestionsRequest
import dev.slne.surf.transaction.core.rabbit.account.CreateAccountRequest
import dev.slne.surf.transaction.core.rabbit.account.DeleteAccountRequest
import dev.slne.surf.transaction.core.rabbit.account.GetAccountByAccountIdRequest
import dev.slne.surf.transaction.core.rabbit.account.GetAccountByNameRequest
import dev.slne.surf.transaction.core.rabbit.account.GetAllAccountsByOwnerRequest
import dev.slne.surf.transaction.core.rabbit.account.GetDefaultAccountRequest
import dev.slne.surf.transaction.core.rabbit.account.RemoveMemberFromAccountRequest
import java.util.UUID

@AutoService(AccountService::class)
class AccountServiceClientImpl : CoreAccountService {
private val rabbitApi get() = requiredService<ClientRabbitMQApi>()

override suspend fun getAccountByAccountId(accountId: UUID): Account? {
val response = rabbitApi.sendRequest(GetAccountByAccountIdRequest(accountId))
return response.account
}

override suspend fun getAccountByName(accountName: String): Account? {
val response = rabbitApi.sendRequest(GetAccountByNameRequest(accountName.lowercase()))
return response.account
}

override suspend fun createAccount(ownerUuid: UUID, name: String): AccountCreationResult {
val response = rabbitApi.sendRequest(CreateAccountRequest(ownerUuid, name))
return if (response.account != null) {
AccountCreationResult.Success(response.account)
} else {
AccountCreationResult.Failed(
response.failureReason ?: AccountCreationResult.FailureReason.NAME_ALREADY_EXISTS
)
}
}

override suspend fun getAllAccountsByOwner(ownerUuid: UUID): Set<Account> {
val response = rabbitApi.sendRequest(GetAllAccountsByOwnerRequest(ownerUuid))
return response.accounts.toSet()
}

override suspend fun getDefaultAccount(playerUuid: UUID): Account {
val response = rabbitApi.sendRequest(GetDefaultAccountRequest(playerUuid))
return response.account
}

override suspend fun deleteAccount(account: Account): AccountDeleteResult {
val response = rabbitApi.sendRequest(DeleteAccountRequest(account.accountId))
return response.result
}

override suspend fun addMemberToAccount(
accountId: UUID,
executor: UUID,
target: UUID
): AccountMemberResult {
val response = rabbitApi.sendRequest(AddMemberToAccountRequest(accountId, executor, target))
return response.result
}

override suspend fun removeMemberFromAccount(
accountId: UUID,
executor: UUID,
target: UUID
): AccountMemberResult {
val response =
rabbitApi.sendRequest(RemoveMemberFromAccountRequest(accountId, executor, target))
return response.result
}

override suspend fun completeAccountNameSuggestions(
input: String,
maxSuggestions: Int
): List<String> {
val response =
rabbitApi.sendRequest(CompleteAccountNameSuggestionsRequest(input, maxSuggestions))
return response.suggestions
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package dev.slne.surf.transaction.core.client.currency

import com.google.auto.service.AutoService
import dev.slne.surf.microservice.api.rabbit.client.ClientRabbitMQApi
import dev.slne.surf.surfapi.core.api.util.requiredService
import dev.slne.surf.surfapi.core.api.util.toObjectSet
import dev.slne.surf.transaction.api.currency.CurrencyService
import dev.slne.surf.transaction.core.currency.CoreCurrencyService
import dev.slne.surf.transaction.core.currency.CurrencyCreateResult
import dev.slne.surf.transaction.core.currency.CurrencyDefaultResult
import dev.slne.surf.transaction.core.currency.CurrencyImpl
import dev.slne.surf.transaction.core.rabbit.currency.CreateCurrencyRequest
import dev.slne.surf.transaction.core.rabbit.currency.GetAllCurrenciesRequest
import dev.slne.surf.transaction.core.rabbit.currency.MakeDefaultCurrencyRequest
import kotlin.properties.Delegates

@AutoService(CurrencyService::class)
class CurrencyServiceClientImpl : CoreCurrencyService {
override var defaultCurrency: CurrencyImpl by Delegates.notNull()
override var currencies: Set<CurrencyImpl> by Delegates.notNull()

private val rabbitApi get() = requiredService<ClientRabbitMQApi>()

override fun getCurrencyByName(name: String) =
currencies.find { it.name.equals(name, ignoreCase = true) }

override suspend fun cacheCurrencies() {
val response = rabbitApi.sendRequest(GetAllCurrenciesRequest())
currencies = response.currencies.toObjectSet()
defaultCurrency = response.currencies.find { it.name == response.defaultCurrencyName }
?: response.currencies.firstOrNull()
?: CurrencyImpl.DEFAULT
}

override fun cacheCurrency(currency: CurrencyImpl) {
currencies = currencies.plus(currency).toObjectSet()
}

override fun updateDefaultCurrency(newDefaultName: String) {
val newDefaultCurrency =
currencies.find { it.name.equals(newDefaultName, ignoreCase = true) } ?: return
defaultCurrency.defaultCurrency = false
newDefaultCurrency.defaultCurrency = true
defaultCurrency = newDefaultCurrency
}

override suspend fun createCurrency(currency: CurrencyImpl): CurrencyCreateResult {
val response = rabbitApi.sendRequest(CreateCurrencyRequest(currency))
return response.result
}

override suspend fun makeDefaultCurrency(currency: CurrencyImpl): CurrencyDefaultResult {
val response = rabbitApi.sendRequest(MakeDefaultCurrencyRequest(currency.name))
return response.result
}
}
Loading