feat(01-01): create configuration infrastructure

- AppConfig, ServerConfig, DatabaseConfig case classes
- zio-config-magnolia for automatic Config derivation
- HOCON application.conf with env variable overrides
- Server: host/port with SERVER_HOST/SERVER_PORT overrides
- Database: host/port/database/user/password with DB_* overrides
This commit is contained in:
Jakub Zych
2026-02-04 21:39:44 +01:00
parent aedb45fc13
commit 4278b84614
2 changed files with 83 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
server {
host = "0.0.0.0"
host = ${?SERVER_HOST}
port = 8080
port = ${?SERVER_PORT}
}
database {
host = "localhost"
host = ${?DB_HOST}
port = 5432
port = ${?DB_PORT}
database = "summercms"
database = ${?DB_NAME}
user = "summercms"
user = ${?DB_USER}
password = "summercms"
password = ${?DB_PASSWORD}
}

View File

@@ -0,0 +1,64 @@
package config
import zio.Config
import zio.config.magnolia.deriveConfig
/** Server configuration
*
* @param host
* Server bind host
* @param port
* Server bind port
*/
final case class ServerConfig(
host: String,
port: Int
)
object ServerConfig {
given config: Config[ServerConfig] = deriveConfig[ServerConfig]
}
/** Database configuration
*
* @param host
* Database host
* @param port
* Database port
* @param database
* Database name
* @param user
* Database user
* @param password
* Database password
*/
final case class DatabaseConfig(
host: String,
port: Int,
database: String,
user: String,
password: String
)
object DatabaseConfig {
given config: Config[DatabaseConfig] = deriveConfig[DatabaseConfig]
}
/** Application configuration
*
* Composed from server and database configurations. Uses zio-config-magnolia for automatic
* derivation.
*
* @param server
* Server configuration
* @param database
* Database configuration
*/
final case class AppConfig(
server: ServerConfig,
database: DatabaseConfig
)
object AppConfig {
given config: Config[AppConfig] = deriveConfig[AppConfig]
}