Update postgres-json to Add ShadowJar compatibility
Add .env for redis and ES change group name of project
This commit is contained in:
@@ -73,7 +73,6 @@ fun Application.module(env: Env = PROD) {
|
||||
}
|
||||
|
||||
install(DataConversion) {
|
||||
// TODO move to postgresJson lib
|
||||
convert<UUID> {
|
||||
decode { values, _ ->
|
||||
values.singleOrNull()?.let { UUID.fromString(it) }
|
||||
@@ -359,7 +358,6 @@ fun Application.module(env: Env = PROD) {
|
||||
maxAge = Duration.ofDays(1)
|
||||
}
|
||||
|
||||
// TODO move to postgresJson lib
|
||||
if (env == PROD) {
|
||||
get<Migrations>().run()
|
||||
}
|
||||
|
||||
@@ -5,17 +5,16 @@ import com.auth0.jwt.JWTVerifier
|
||||
import com.auth0.jwt.algorithms.Algorithm
|
||||
import com.typesafe.config.ConfigFactory
|
||||
import fr.dcproject.entity.UserI
|
||||
import org.eclipse.jetty.util.resource.JarResource
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
import java.net.URI
|
||||
|
||||
class Config {
|
||||
object Config {
|
||||
private var config = ConfigFactory.load()
|
||||
|
||||
val sqlFiles: File = try {
|
||||
File(this::class.java.getResource("/sql").toURI())
|
||||
} catch (e: IllegalArgumentException) {
|
||||
JarResource.newResource("./resources/sql").file
|
||||
object Sql {
|
||||
val migrationFiles: URI = this::class.java.getResource("/sql/migrations").toURI()
|
||||
val functionFiles: URI = this::class.java.getResource("/sql/functions").toURI()
|
||||
val fixtureFiles: URI = this::class.java.getResource("/sql/fixtures").toURI()
|
||||
}
|
||||
|
||||
val envName: String = config.getString("app.envName")
|
||||
@@ -27,6 +26,7 @@ class Config {
|
||||
var password: String = config.getString("db.password")
|
||||
val port: Int = config.getInt("db.port")
|
||||
val redis: String = config.getString("redis.connection")
|
||||
val elasticsearch: String = config.getString("elasticsearch.connection")
|
||||
val rabbitmq: String = config.getString("rabbitmq.connection")
|
||||
val exchangeNotificationName = "notification"
|
||||
val sendGridKey: String = config.getString("mail.sendGrid.key")
|
||||
|
||||
@@ -39,35 +39,33 @@ import fr.dcproject.repository.VoteComment as VoteCommentRepository
|
||||
import fr.dcproject.repository.VoteConstitution as VoteConstitutionRepository
|
||||
import fr.dcproject.repository.Workgroup as WorkgroupRepository
|
||||
|
||||
val config = Config()
|
||||
|
||||
@KtorExperimentalAPI
|
||||
val Module = module {
|
||||
|
||||
single { config }
|
||||
single { Config }
|
||||
|
||||
// SQL connection
|
||||
single {
|
||||
Connection(
|
||||
host = config.host,
|
||||
port = config.port,
|
||||
database = config.database,
|
||||
username = config.username,
|
||||
password = config.password
|
||||
host = Config.host,
|
||||
port = Config.port,
|
||||
database = Config.database,
|
||||
username = Config.username,
|
||||
password = Config.password
|
||||
)
|
||||
}
|
||||
|
||||
// Launch Database migration
|
||||
single { Migrations(connection = get(), directory = config.sqlFiles) }
|
||||
single { Migrations(get(), Config.Sql.migrationFiles, Config.Sql.functionFiles) }
|
||||
|
||||
// Redis client
|
||||
single<RedisAsyncCommands<String, String>> {
|
||||
RedisClient.create(config.redis).connect()?.async() ?: error("Unable to connect to redis")
|
||||
RedisClient.create(Config.redis).connect()?.async() ?: error("Unable to connect to redis")
|
||||
}
|
||||
|
||||
// RabbitMQ
|
||||
single<ConnectionFactory> {
|
||||
ConnectionFactory().apply { setUri(config.rabbitmq) }
|
||||
ConnectionFactory().apply { setUri(Config.rabbitmq) }
|
||||
}
|
||||
|
||||
// JsonSerializer
|
||||
@@ -93,7 +91,7 @@ val Module = module {
|
||||
single {
|
||||
Requester.RequesterFactory(
|
||||
connection = get(),
|
||||
functionsDirectory = config.sqlFiles.resolve("functions")
|
||||
functionsDirectory = Config.Sql.functionFiles
|
||||
).createRequester()
|
||||
}
|
||||
|
||||
@@ -117,15 +115,15 @@ val Module = module {
|
||||
// Elasticsearch Client
|
||||
single<RestClient> {
|
||||
RestClient.builder(
|
||||
HttpHost("localhost", 9200, "http")
|
||||
HttpHost.create(Config.elasticsearch)
|
||||
).build()
|
||||
}
|
||||
|
||||
single { ArticleViewManager(get()) }
|
||||
|
||||
// Mailler
|
||||
single { Mailer(config.sendGridKey) }
|
||||
single { Mailer(Config.sendGridKey) }
|
||||
|
||||
// SSO Manager for connection
|
||||
single { SsoManager(get<Mailer>(), config.domain, get()) }
|
||||
single { SsoManager(get<Mailer>(), Config.domain, get()) }
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package fr.dcproject.event
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import com.rabbitmq.client.*
|
||||
import com.rabbitmq.client.BuiltinExchangeType.DIRECT
|
||||
import fr.dcproject.config
|
||||
import fr.dcproject.Config
|
||||
import fr.dcproject.entity.Article
|
||||
import fr.dcproject.event.publisher.Publisher
|
||||
import fr.dcproject.repository.Follow
|
||||
@@ -32,7 +32,7 @@ fun EventSubscriber.Configuration.configEvent(
|
||||
serialiser: ObjectMapper
|
||||
) {
|
||||
/* Config Rabbit */
|
||||
val exchangeName = config.exchangeNotificationName
|
||||
val exchangeName = Config.exchangeNotificationName
|
||||
rabbitFactory.newConnection().use { connection ->
|
||||
connection.createChannel().use { channel ->
|
||||
channel.queueDeclare("push", true, false, false, null)
|
||||
|
||||
@@ -2,7 +2,7 @@ package fr.dcproject.event.publisher
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import com.rabbitmq.client.ConnectionFactory
|
||||
import fr.dcproject.config
|
||||
import fr.dcproject.Config
|
||||
import fr.dcproject.event.EntityEvent
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.Job
|
||||
@@ -19,7 +19,7 @@ class Publisher(
|
||||
return GlobalScope.launch {
|
||||
factory.newConnection().use { connection ->
|
||||
connection.createChannel().use { channel ->
|
||||
channel.basicPublish(config.exchangeNotificationName, "", null, it.serialize().toByteArray())
|
||||
channel.basicPublish(Config.exchangeNotificationName, "", null, it.serialize().toByteArray())
|
||||
logger.debug("Publish message ${it.target.id}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,11 @@ rabbitmq {
|
||||
connection = ${?RABBITMQ_CONNECTION}
|
||||
}
|
||||
|
||||
elasticsearch {
|
||||
connection = "http://localhost:9200"
|
||||
connection = ${?ELASTICSEARCH_CONNECTION}
|
||||
}
|
||||
|
||||
mail {
|
||||
sendGrid {
|
||||
key = ${?SEND_GRID_KEY}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import feature.KtorServerContext
|
||||
import fr.dcproject.Config
|
||||
import fr.dcproject.Env.CUCUMBER
|
||||
import fr.dcproject.config
|
||||
import fr.dcproject.module
|
||||
import fr.dcproject.utils.LoggerDelegate
|
||||
import fr.postgresjson.connexion.Connection
|
||||
@@ -36,9 +36,9 @@ class RunCucumberTest : En, KoinTest {
|
||||
|
||||
init {
|
||||
if (!unitialized) {
|
||||
config.database = "test"
|
||||
config.username = "test"
|
||||
config.password = "test"
|
||||
Config.database = "test"
|
||||
Config.username = "test"
|
||||
Config.password = "test"
|
||||
|
||||
withTestApplication({ module(CUCUMBER) }) {
|
||||
migrations()
|
||||
@@ -47,9 +47,9 @@ class RunCucumberTest : En, KoinTest {
|
||||
}
|
||||
|
||||
Before(-1) { _: Scenario ->
|
||||
config.database = "test"
|
||||
config.username = "test"
|
||||
config.password = "test"
|
||||
Config.database = "test"
|
||||
Config.username = "test"
|
||||
Config.password = "test"
|
||||
ktorContext.start()
|
||||
//language=PostgreSQL
|
||||
get<Connection>().sendQuery("start transaction;", listOf())
|
||||
@@ -63,9 +63,9 @@ class RunCucumberTest : En, KoinTest {
|
||||
}
|
||||
|
||||
private fun migrations() {
|
||||
config.database = "test"
|
||||
config.username = "test"
|
||||
config.password = "test"
|
||||
Config.database = "test"
|
||||
Config.username = "test"
|
||||
Config.password = "test"
|
||||
val migrations: Migrations = get()
|
||||
migrations.forceAllDown()
|
||||
migrations.run()
|
||||
@@ -89,7 +89,7 @@ class RunCucumberTest : En, KoinTest {
|
||||
private fun getFixturesRequester(): Requester {
|
||||
return Requester.RequesterFactory(
|
||||
connection = get(),
|
||||
queriesDirectory = config.sqlFiles.resolve("fixtures")
|
||||
queriesDirectory = Config.Sql.fixtureFiles
|
||||
).createRequester()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user