This commit is contained in:
Данил 2024-04-17 17:57:52 +03:00
commit ff828ff9e1
19 changed files with 1250 additions and 0 deletions

View file

@ -0,0 +1,12 @@
package su.redume
import io.ktor.server.application.*
import su.redume.database.DatabaseFactory
import su.redume.plugins.*
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
fun Application.module() {
DatabaseFactory.init(environment.config)
configureRouting(environment.config)
}

View file

@ -0,0 +1,14 @@
package su.redume.dao
class Currency(table: String,
fromCurrency: String,
convCurrency: String,
periodStart: Int,
periodEnd: Int) {
fun getData() {
}
}

View file

@ -0,0 +1,53 @@
package su.redume.database
import io.ktor.server.config.*
import org.jetbrains.exposed.sql.Database
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import kotlinx.coroutines.Dispatchers
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
import org.jetbrains.exposed.sql.transactions.transaction
import su.redume.models.Crypto
import su.redume.models.Fiat
object DatabaseFactory {
fun init(config: ApplicationConfig) {
val jdbcURL = config.property("ktor.database.jdbcURL").getString()
val maxPoolSize = config.property("ktor.database.maxPoolSize").getString()
val autoCommit = config.property("ktor.database.autoCommit").getString()
val username = config.property("ktor.database.user").getString()
val password = config.property("ktor.database.password").getString()
val defaultDatabase = config.property("ktor.database.database").getString()
val connectPool = createHikariDataSource(
url = "$jdbcURL/$defaultDatabase?user=$username&password=$password",
maxPoolSize.toInt(),
autoCommit.toBoolean()
)
val database = Database.connect(connectPool)
transaction(database) {
SchemaUtils.create(Fiat)
SchemaUtils.create(Crypto)
}
}
private fun createHikariDataSource(
url: String,
maxPoolSize: Int,
autoCommit: Boolean
) = HikariDataSource(HikariConfig().apply {
driverClassName = "org.postgresql.Driver"
jdbcUrl = url
maximumPoolSize = maxPoolSize
isAutoCommit = autoCommit
transactionIsolation = "TRANSACTION_REPEATABLE_READ"
validate()
})
suspend fun <T> dbQuery(block: suspend () -> T): T =
newSuspendedTransaction(Dispatchers.IO) { block() }
}

View file

@ -0,0 +1,11 @@
package su.redume.models
import org.jetbrains.exposed.sql.Table
import org.jetbrains.exposed.sql.stringParam
object Crypto : Table() {
val fromCurrecny = stringParam("fromCurrecny")
val convCurrency = stringParam("convCurrency")
val rate = integer("rate")
val date = long("date")
}

View file

@ -0,0 +1,11 @@
package su.redume.models
import org.jetbrains.exposed.sql.Table
import org.jetbrains.exposed.sql.stringParam
object Fiat : Table() {
val fromCurrecny = stringParam("fromCurrecny")
val convCurrency = stringParam("convCurrency")
val rate = integer("rate")
val date = long("date")
}

View file

@ -0,0 +1,14 @@
package su.redume.plugins
import io.ktor.server.application.*
import io.ktor.server.config.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
fun Application.configureRouting(config: ApplicationConfig) {
routing {
get("/") {
call.respondText("Hello World!")
}
}
}

View file

@ -0,0 +1,10 @@
ktor:
port: 3000
host: localhost
database:
jdbcURL: "jdbc:postgresql://localhost:5432"
database: "DATABASE_NAME"
user: "DATABASE_USER"
password: "DATABASE_PASSWORD"
maxPoolSize: 50
autoCommit: false

View file

@ -0,0 +1,12 @@
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="trace">
<appender-ref ref="STDOUT"/>
</root>
<logger name="org.eclipse.jetty" level="INFO"/>
<logger name="io.netty" level="INFO"/>
</configuration>