diff options
83 files changed, 2091 insertions, 116 deletions
diff --git a/basetypes/src/main/kotlin/moe/nea/ledger/TransactionType.kt b/basetypes/src/main/kotlin/moe/nea/ledger/TransactionType.kt index b353e29..d4c15e5 100644 --- a/basetypes/src/main/kotlin/moe/nea/ledger/TransactionType.kt +++ b/basetypes/src/main/kotlin/moe/nea/ledger/TransactionType.kt @@ -17,6 +17,7 @@ enum class TransactionType { BAZAAR_SELL_ORDER, BITS_PURSE_STATUS, BOOSTER_COOKIE_ATE, + CADUCOUS_FEEDER_USED, CAPSAICIN_EYEDROPS_USED, COMMUNITY_SHOP_BUY, CORPSE_DESECRATED, @@ -24,6 +25,7 @@ enum class TransactionType { DRACONIC_SACRIFICE, DUNGEON_CHEST_OPEN, FORGED, + GHOST_COIN_DROP, GOD_POTION_DRANK, GOD_POTION_MIXIN_DRANK, GUMMY_POLAR_BEAR_ATE, @@ -34,6 +36,7 @@ enum class TransactionType { NPC_BUY, NPC_SELL, PEST_REPELLENT_USED, + STONKS_AUCTION, VISITOR_BARGAIN, WYRM_EVOKED, }
\ No newline at end of file diff --git a/basetypes/src/main/kotlin/moe/nea/ledger/utils/ULIDWrapper.kt b/basetypes/src/main/kotlin/moe/nea/ledger/utils/ULIDWrapper.kt index b8c5d3b..29d5e31 100644 --- a/basetypes/src/main/kotlin/moe/nea/ledger/utils/ULIDWrapper.kt +++ b/basetypes/src/main/kotlin/moe/nea/ledger/utils/ULIDWrapper.kt @@ -9,6 +9,14 @@ value class ULIDWrapper( val wrapped: String ) { companion object { + fun lowerBound(timestamp: Instant): ULIDWrapper { + return ULIDWrapper(ULID.generate(timestamp.toEpochMilli(), ByteArray(10))) + } + + fun upperBound(timestamp: Instant): ULIDWrapper { + return ULIDWrapper(ULID.generate(timestamp.toEpochMilli(), ByteArray(10) { -1 })) + } + fun createULIDAt(timestamp: Instant): ULIDWrapper { return ULIDWrapper(ULID.generate( timestamp.toEpochMilli(), diff --git a/build.gradle.kts b/build.gradle.kts index 8377205..4c6ee45 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,11 +2,12 @@ import com.github.gmazzo.buildconfig.BuildConfigExtension import java.io.ByteArrayOutputStream plugins { - val kotlinVersion = "2.0.20" + val kotlinVersion = "2.0.21" kotlin("jvm") version kotlinVersion apply false kotlin("plugin.serialization") version kotlinVersion apply false id("com.github.gmazzo.buildconfig") version "5.5.0" apply false id("ledger-globals") + id("com.google.devtools.ksp") version "2.0.21-1.0.26" apply false id("com.github.johnrengelman.shadow") version "8.1.1" apply false } diff --git a/database/core/src/main/kotlin/moe/nea/ledger/database/Column.kt b/database/core/src/main/kotlin/moe/nea/ledger/database/Column.kt index 33727de..c21a159 100644 --- a/database/core/src/main/kotlin/moe/nea/ledger/database/Column.kt +++ b/database/core/src/main/kotlin/moe/nea/ledger/database/Column.kt @@ -4,20 +4,20 @@ import moe.nea.ledger.database.sql.IntoSelectable import moe.nea.ledger.database.sql.Selectable import java.sql.PreparedStatement -class Column<T> @Deprecated("Use Table.column instead") constructor( +class Column<T, Raw> @Deprecated("Use Table.column instead") constructor( val table: Table, val name: String, - val type: DBType<T> + val type: DBType<T, Raw> ) : IntoSelectable<T> { - override fun asSelectable() = object : Selectable<T> { + override fun asSelectable() = object : Selectable<T, Raw> { override fun asSql(): String { return qualifiedSqlName } - override val dbType: DBType<T> + override val dbType: DBType<T, Raw> get() = this@Column.type - override fun guessColumn(): Column<T>? { + override fun guessColumn(): Column<T, Raw> { return this@Column } diff --git a/database/core/src/main/kotlin/moe/nea/ledger/database/Constraint.kt b/database/core/src/main/kotlin/moe/nea/ledger/database/Constraint.kt index 9f7c9ef..729c6b8 100644 --- a/database/core/src/main/kotlin/moe/nea/ledger/database/Constraint.kt +++ b/database/core/src/main/kotlin/moe/nea/ledger/database/Constraint.kt @@ -1,6 +1,6 @@ package moe.nea.ledger.database interface Constraint { - val affectedColumns: Collection<Column<*>> + val affectedColumns: Collection<Column<*, *>> fun asSQL(): String }
\ No newline at end of file diff --git a/database/core/src/main/kotlin/moe/nea/ledger/database/DBType.kt b/database/core/src/main/kotlin/moe/nea/ledger/database/DBType.kt index 86ff544..622aff3 100644 --- a/database/core/src/main/kotlin/moe/nea/ledger/database/DBType.kt +++ b/database/core/src/main/kotlin/moe/nea/ledger/database/DBType.kt @@ -1,9 +1,19 @@ package moe.nea.ledger.database +import moe.nea.ledger.database.sql.ClauseBuilder import java.sql.PreparedStatement import java.sql.ResultSet -interface DBType<T> { + +interface DBType< + /** + * Mapped type of this db type. Represents the Java type this db type accepts for saving to the database. + */ + T, + /** + * Phantom marker type representing how this db type is presented to the actual DB. Is used by APIs such as [ClauseBuilder] to allow for rough typechecking. + */ + RawType> { val dbType: String fun get(result: ResultSet, index: Int): T @@ -12,8 +22,8 @@ interface DBType<T> { fun <R> mapped( from: (R) -> T, to: (T) -> R, - ): DBType<R> { - return object : DBType<R> { + ): DBType<R, RawType> { + return object : DBType<R, RawType> { override fun getName(): String { return "Mapped(${this@DBType.getName()})" } diff --git a/database/core/src/main/kotlin/moe/nea/ledger/database/InsertStatement.kt b/database/core/src/main/kotlin/moe/nea/ledger/database/InsertStatement.kt index 7871ba8..25bef22 100644 --- a/database/core/src/main/kotlin/moe/nea/ledger/database/InsertStatement.kt +++ b/database/core/src/main/kotlin/moe/nea/ledger/database/InsertStatement.kt @@ -1,7 +1,7 @@ package moe.nea.ledger.database -class InsertStatement(val properties: MutableMap<Column<*>, Any>) { - operator fun <T : Any> set(key: Column<T>, value: T) { +class InsertStatement(val properties: MutableMap<Column<*, *>, Any>) { + operator fun <T : Any> set(key: Column<T, *>, value: T) { properties[key] = value } }
\ No newline at end of file diff --git a/database/core/src/main/kotlin/moe/nea/ledger/database/Query.kt b/database/core/src/main/kotlin/moe/nea/ledger/database/Query.kt index e58eef4..a23c878 100644 --- a/database/core/src/main/kotlin/moe/nea/ledger/database/Query.kt +++ b/database/core/src/main/kotlin/moe/nea/ledger/database/Query.kt @@ -12,7 +12,7 @@ import java.sql.Connection class Query( val connection: Connection, - val selectedColumns: MutableList<Selectable<*>>, + val selectedColumns: MutableList<Selectable<*, *>>, var table: Table, var limit: UInt? = null, var skip: UInt? = null, diff --git a/database/core/src/main/kotlin/moe/nea/ledger/database/ResultRow.kt b/database/core/src/main/kotlin/moe/nea/ledger/database/ResultRow.kt index 6715f27..7b57abd 100644 --- a/database/core/src/main/kotlin/moe/nea/ledger/database/ResultRow.kt +++ b/database/core/src/main/kotlin/moe/nea/ledger/database/ResultRow.kt @@ -2,19 +2,19 @@ package moe.nea.ledger.database import moe.nea.ledger.database.sql.Selectable -class ResultRow(val selectableValues: Map<Selectable<*>, *>) { +class ResultRow(val selectableValues: Map<Selectable<*, *>, *>) { val columnValues = selectableValues.mapNotNull { val col = it.key.guessColumn() ?: return@mapNotNull null col to it.value }.toMap() - operator fun <T> get(column: Column<T>): T { + operator fun <T> get(column: Column<T, *>): T { val value = columnValues[column] ?: error("Invalid column ${column.name}. Only ${columnValues.keys.joinToString { it.name }} are available.") return value as T } - operator fun <T> get(column: Selectable<T>): T { + operator fun <T> get(column: Selectable<T, *>): T { val value = selectableValues[column] ?: error("Invalid selectable ${column}. Only ${selectableValues.keys} are available.") return value as T diff --git a/database/core/src/main/kotlin/moe/nea/ledger/database/Table.kt b/database/core/src/main/kotlin/moe/nea/ledger/database/Table.kt index 61dc8f0..a462813 100644 --- a/database/core/src/main/kotlin/moe/nea/ledger/database/Table.kt +++ b/database/core/src/main/kotlin/moe/nea/ledger/database/Table.kt @@ -4,15 +4,15 @@ import java.sql.Connection abstract class Table(val name: String) { val sqlName get() = "`$name`" - protected val _mutable_columns: MutableList<Column<*>> = mutableListOf() + protected val _mutable_columns: MutableList<Column<*, *>> = mutableListOf() protected val _mutable_constraints: MutableList<Constraint> = mutableListOf() - val columns: List<Column<*>> get() = _mutable_columns + val columns: List<Column<*, *>> get() = _mutable_columns val constraints get() = _mutable_constraints - protected fun unique(vararg columns: Column<*>) { + protected fun unique(vararg columns: Column<*, *>) { _mutable_constraints.add(UniqueConstraint(columns.toList())) } - protected fun <T> column(name: String, type: DBType<T>): Column<T> { + protected fun <T, R> column(name: String, type: DBType<T, R>): Column<T, R> { @Suppress("DEPRECATION") val column = Column(this, name, type) _mutable_columns.add(column) return column @@ -39,7 +39,7 @@ abstract class Table(val name: String) { fun createIfNotExists( connection: Connection, - filteredColumns: List<Column<*>> = columns + filteredColumns: List<Column<*, *>> = columns ) { val properties = mutableListOf<String>() for (column in filteredColumns) { @@ -57,7 +57,7 @@ abstract class Table(val name: String) { fun alterTableAddColumns( connection: Connection, - newColumns: List<Column<*>> + newColumns: List<Column<*, *>> ) { for (column in newColumns) { connection.prepareAndLog("ALTER TABLE $sqlName ADD ${column.sqlName} ${column.type.dbType}") @@ -88,7 +88,7 @@ abstract class Table(val name: String) { val statement = connection.prepareAndLog("INSERT OR ${onConflict.asSql()} INTO $sqlName ($columnNames) VALUES ($valueNames)") for ((index, column) in columns.withIndex()) { - (column as Column<Any>).type.set(statement, index + 1, insert.properties[column]!!) + (column as Column<Any, *>).type.set(statement, index + 1, insert.properties[column]!!) } statement.execute() } diff --git a/database/core/src/main/kotlin/moe/nea/ledger/database/UniqueConstraint.kt b/database/core/src/main/kotlin/moe/nea/ledger/database/UniqueConstraint.kt index 32e9f79..31ef06c 100644 --- a/database/core/src/main/kotlin/moe/nea/ledger/database/UniqueConstraint.kt +++ b/database/core/src/main/kotlin/moe/nea/ledger/database/UniqueConstraint.kt @@ -1,11 +1,11 @@ package moe.nea.ledger.database |
