Update postgres-json to Add ShadowJar compatibility

Add .env for redis and ES
change group name of project
This commit is contained in:
2020-05-11 01:50:40 +02:00
parent b4be28ddc8
commit 8640d9146d
15 changed files with 135 additions and 51 deletions

View File

@@ -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()
}

View File

@@ -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")

View File

@@ -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()) }
}

View File

@@ -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)

View File

@@ -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}")
}
}

View File

@@ -32,6 +32,11 @@ rabbitmq {
connection = ${?RABBITMQ_CONNECTION}
}
elasticsearch {
connection = "http://localhost:9200"
connection = ${?ELASTICSEARCH_CONNECTION}
}
mail {
sendGrid {
key = ${?SEND_GRID_KEY}