Skip to content

Commit

Permalink
Merge pull request #13 from Astra-Interactive/multiplatform
Browse files Browse the repository at this point in the history
Multiplatform
  • Loading branch information
makeevrserg authored Dec 2, 2023
2 parents 234ca28 + 6afcfa8 commit ef098ac
Show file tree
Hide file tree
Showing 81 changed files with 1,949 additions and 1,392 deletions.
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
buildscript {
dependencies {
classpath("ru.astrainteractive.gradleplugin:convention:0.0.10")
classpath("ru.astrainteractive.gradleplugin:minecraft:0.0.10")
classpath("ru.astrainteractive.gradleplugin:convention:0.4.0")
classpath("ru.astrainteractive.gradleplugin:minecraft:0.4.0")
}
}

Expand Down
76 changes: 0 additions & 76 deletions data/src/test/java/AuctionsTests.kt

This file was deleted.

32 changes: 0 additions & 32 deletions data/src/test/java/ORMTest.kt

This file was deleted.

3 changes: 1 addition & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ makeevrserg.java.ktarget=17
# Project
makeevrserg.project.name=AstraMarket
makeevrserg.project.group=ru.astrainteractive.astramarket
makeevrserg.project.version.string=1.7.0
makeevrserg.project.version.string=1.9.0
makeevrserg.project.description=Market plugin for EmpireSMP
makeevrserg.project.developers=makeevrserg|Makeev Roman|[email protected]
makeevrserg.project.url=https://empireprojekt.ru
makeevrserg.publish.developers=makeevrserg|Makeev Roman|[email protected]
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ minecraft-protocollib = "4.8.0"
minecraft-wg = "7.0.7"
minecraft-vault = "1.7"
minecraft-coreprotect = "21.2"
minecraft-astralibs = "2.11.0"
minecraft-astralibs = "2.17.0"
minecraft-bstats = "3.0.0"
minecraft-mockbukkit = "v1.19-SNAPSHOT"

Expand Down Expand Up @@ -89,7 +89,7 @@ minecraft-mockbukkit = { module = "com.github.MockBukkit:MockBukkit", version.re

# klibs
klibs-kdi = { module = "ru.astrainteractive.klibs:kdi", version.strictly = "1.1.0" }
klibs-mikro = { module = "ru.astrainteractive.klibs:mikro-core", version.strictly = "1.0.0" }
klibs-mikro = { module = "ru.astrainteractive.klibs:mikro-core", version.strictly = "1.4.0" }

# AstraLibs
minecraft-astralibs-ktxcore = { module = "ru.astrainteractive.astralibs:ktx-core", version.ref = "minecraft-astralibs" }
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import ru.astrainteractive.astramarket.db.market.entity.AuctionTable
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers
import kotlin.coroutines.CoroutineContext

internal class AuctionsAPIImpl(
internal class AuctionsApiImpl(
private val database: Database,
private val auctionMapper: AuctionMapper,
dispatchers: KotlinDispatchers
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,38 @@
package ru.astrainteractive.astramarket.di

import ru.astrainteractive.astralibs.orm.DBConnection
import ru.astrainteractive.astralibs.orm.DBSyntax
import ru.astrainteractive.astralibs.orm.Database
import ru.astrainteractive.astramarket.api.market.AuctionsAPI
import ru.astrainteractive.astramarket.api.market.impl.AuctionsAPIImpl
import ru.astrainteractive.astramarket.api.market.impl.AuctionsApiImpl
import ru.astrainteractive.astramarket.api.market.mapping.AuctionMapper
import ru.astrainteractive.astramarket.api.market.mapping.AuctionMapperImpl
import ru.astrainteractive.astramarket.di.factory.DatabaseFactory
import ru.astrainteractive.klibs.kdi.Provider
import ru.astrainteractive.klibs.kdi.getValue
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers

interface DataModule {
val database: Database
val auctionApi: AuctionsAPI

class Default(
database: Database,
dbConnection: DBConnection,
dbSyntax: DBSyntax,
dispatchers: KotlinDispatchers
) : DataModule {
override val database: Database by lazy {
DatabaseFactory(
dbConnection = dbConnection,
dbSyntax = dbSyntax
).create()
}
private val auctionMapper: AuctionMapper by Provider {
AuctionMapperImpl()
}

override val auctionApi: AuctionsAPI by Provider {
AuctionsAPIImpl(
AuctionsApiImpl(
database = database,
auctionMapper = auctionMapper,
dispatchers = dispatchers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import ru.astrainteractive.astralibs.orm.DefaultDatabase
import ru.astrainteractive.astramarket.db.market.entity.AuctionTable
import ru.astrainteractive.klibs.kdi.Factory

class DatabaseFactory(
internal class DatabaseFactory(
private val dbConnection: DBConnection,
private val dbSyntax: DBSyntax,
) : Factory<Database> {
Expand Down
90 changes: 90 additions & 0 deletions modules/data/src/test/java/AuctionsTests.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import kotlinx.coroutines.runBlocking
import ru.astrainteractive.astralibs.encoding.IO
import ru.astrainteractive.astralibs.orm.DBConnection
import ru.astrainteractive.astralibs.orm.DBSyntax
import ru.astrainteractive.astramarket.api.market.AuctionsAPI
import ru.astrainteractive.astramarket.db.market.entity.AuctionTable
import ru.astrainteractive.astramarket.di.DataModule
import ru.astrainteractive.klibs.mikro.core.dispatchers.DefaultKotlinDispatchers
import java.io.File
import java.util.UUID
import kotlin.random.Random
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals

class AuctionsTests {
private val moduleFactory = {
DataModule.Default(
dispatchers = DefaultKotlinDispatchers,
dbSyntax = DBSyntax.SQLite,
dbConnection = DBConnection.SQLite("db")
)
}
private var module: DataModule? = null
private val auctionsApi: AuctionsAPI
get() = module?.auctionApi ?: error("Module is null")

private val randomAuction: ru.astrainteractive.astramarket.api.market.dto.AuctionDTO
get() = ru.astrainteractive.astramarket.api.market.dto.AuctionDTO(
id = -1,
discordId = UUID.randomUUID().toString(),
minecraftUuid = UUID.randomUUID().toString(),
time = System.currentTimeMillis(),
item = IO.ByteArray(ByteArray(0)),
price = Random.nextInt().toFloat(),
expired = false
)

@BeforeTest
fun setup(): Unit = runBlocking {
val module = moduleFactory.invoke()
module.database.openConnection()
AuctionTable.create(module.database)
this@AuctionsTests.module = module
}

@AfterTest
fun destroy(): Unit = runBlocking {
module?.database?.closeConnection()
(module?.database?.dbConnection as? DBConnection.SQLite)?.let {
File(it.dbName).delete()
}
module = null
}

@Test
fun `Insert, fetch, expire same auction`(): Unit = runBlocking {
val auction = randomAuction
// Insert and fetch
val id = auctionsApi.insertAuction(auction)!!
var auctionDTO = auctionsApi.fetchAuction(id)!!
assertEquals(auctionDTO.minecraftUuid, auction.minecraftUuid)
// Get unexpiredAuctions
var amount = auctionsApi.getUserAuctions(auctionDTO.minecraftUuid, false)!!.size
assertEquals(amount, 1)
// Expire
auctionsApi.expireAuction(auctionDTO)
assertEquals(auctionDTO.expired, false)
auctionDTO = auctionsApi.fetchAuction(id)!!
assertEquals(auctionDTO.expired, true)
// Get expiredAuctions
amount = auctionsApi.getUserAuctions(auctionDTO.minecraftUuid, true)!!.size
assertEquals(amount, 1)
// Get unexpiredAuctions
amount = auctionsApi.getUserAuctions(auctionDTO.minecraftUuid, false)!!.size
assertEquals(amount, 0)
// Count auctions
amount = auctionsApi.countPlayerAuctions(auctionDTO.minecraftUuid)!!
assertEquals(amount, 1)
// Delete and count auction
auctionsApi.deleteAuction(auctionDTO)
amount = auctionsApi.countPlayerAuctions(auctionDTO.minecraftUuid)!!
assertEquals(amount, 0)
val oldAuctionDTO = randomAuction.copy(time = 0)
auctionsApi.insertAuction(oldAuctionDTO)
amount = auctionsApi.getAuctionsOlderThan(System.currentTimeMillis() - 1)!!.size
assertEquals(amount, 1)
}
}
30 changes: 30 additions & 0 deletions modules/shared/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// import ru.astrainteractive.gradleplugin.sourceset.JvmSourceSet.Companion.configureAstraSourceSet

plugins {
kotlin("jvm")
kotlin("plugin.serialization")
id("ru.astrainteractive.gradleplugin.minecraft.multiplatform")
}

minecraftMultiplatform {
bukkit()
}

dependencies {
// Kotlin
implementation(libs.bundles.kotlin)
// AstraLibs
implementation(libs.minecraft.astralibs.ktxcore)
implementation(libs.minecraft.astralibs.spigot.core)
implementation(libs.minecraft.astralibs.spigot.gui)
implementation(libs.minecraft.astralibs.orm)
implementation(libs.klibs.kdi)
implementation(libs.minecraft.bstats)
// Test
testImplementation(libs.bundles.testing.kotlin)
testImplementation(libs.tests.kotlin.test)
// Bukkit
"bukkitMainCompileOnly"(libs.minecraft.paper.api)
// Local
implementation(projects.modules.data)
}
Loading

0 comments on commit ef098ac

Please sign in to comment.