# Loco configuration file documentation

# Application logging configuration
logger:
  # Enable or disable logging.
  enable: true
  # Enable pretty backtrace (sets RUST_BACKTRACE=1)
  pretty_backtrace: true
  # Log level, options: trace, debug, info, warn or error.
  level: debug
  # Define the logging format. options: compact, pretty or Json
  format: compact
  # By default the logger has filtering only logs that came from your code or logs that came from `loco` framework. to see all third party libraries
  # Uncomment the line below to override to see all third party libraries you can enable this config and override the logger filters.
  # override_filter: trace

# Web server configuration
server:
  # Port on which the server will listen. the server binding is 0.0.0.0:{PORT}
  port: 5001
  # The UI hostname or IP address that mailers will point to.
  host: http://webui.konobangu.com
  # Out of the box middleware configuration. to disable middleware you can changed the `enable` field to `false` of comment the middleware block
  middlewares:
    # Enable Etag cache header middleware
    etag:
      enable: true
    # Allows to limit the payload size request. payload that bigger than this file will blocked the request.
    limit_payload:
      # Enable/Disable the middleware.
      enable: true
      # the limit size. can be b,kb,kib,mb,mib,gb,gib
      body_limit: 5mb
    # Generating a unique request ID and enhancing logging with additional information such as the start and completion of request processing, latency, status code, and other request details.
    logger:
      # Enable/Disable the middleware.
      enable: true
    # when your code is panicked, the request still returns 500 status code.
    catch_panic:
      # Enable/Disable the middleware.
      enable: true
    # Timeout for incoming requests middleware. requests that take more time from the configuration will cute and 408 status code will returned.
    timeout_request:
      # Enable/Disable the middleware.
      enable: false
      # Duration time in milliseconds.
      timeout: 5000
    cors:
      enable: true
      # Set the value of the [`Access-Control-Allow-Origin`][mdn] header
      # allow_origins:
      #   - https://loco.rs
      # Set the value of the [`Access-Control-Allow-Headers`][mdn] header
      # allow_headers:
      # - Content-Type
      # Set the value of the [`Access-Control-Allow-Methods`][mdn] header
      # allow_methods:
      #   - POST
      # Set the value of the [`Access-Control-Max-Age`][mdn] header in seconds
      # max_age: 3600

# Worker Configuration
workers:
  # specifies the worker mode. Options:
  #   - BackgroundQueue - Workers operate asynchronously in the background, processing queued.
  #   - ForegroundBlocking - Workers operate in the foreground and block until tasks are completed.
  #   - BackgroundAsync - Workers operate asynchronously in the background, processing tasks with async capabilities.
  mode: BackgroundQueue

# Mailer Configuration.
mailer:
  # SMTP mailer configuration.
  smtp:
    # Enable/Disable smtp mailer.
    enable: true
    # SMTP server host. e.x localhost, smtp.gmail.com
    host: '{{ get_env(name="MAILER_HOST", default="localhost") }}'
    # SMTP server port
    port: 1025
    # Use secure connection (SSL/TLS).
    secure: false
    # auth:
    #   user:
    #   password:

# Database Configuration
database:
  # Database connection URI
  uri: '{{ get_env(name="DATABASE_URL", default="postgres://konobangu:konobangu@127.0.0.1:5432/konobangu") }}'
  # When enabled, the sql query will be logged.
  enable_logging: true
  # Set the timeout duration when acquiring a connection.
  connect_timeout: 500
  # Set the idle duration before closing a connection.
  idle_timeout: 500
  # Minimum number of connections for a pool.
  min_connections: 1
  # Maximum number of connections for a pool.
  max_connections: 1
  # Run migration up when application loaded
  auto_migrate: true
  # Truncate database when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode
  dangerously_truncate: false
  # Recreating schema when application loaded.  This is a dangerous operation, make sure that you using this flag only on dev environments or test mode
  dangerously_recreate: false

# Redis Configuration
redis:
  # Redis connection URI
  uri: '{{ get_env(name="REDIS_URL", default="redis://127.0.0.1:6379") }}'
  # Dangerously flush all data in Redis on startup. dangerous operation, make sure that you using this flag only on dev environments or test mode
  dangerously_flush: false

settings:
  dal:
    data_dir: ./temp
  mikan:
    http_client:
      exponential_backoff_max_retries: 3
      leaky_bucket_max_tokens: 2
      leaky_bucket_initial_tokens: 0
      leaky_bucket_refill_tokens: 1
      leaky_bucket_refill_interval: 500
      user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
    base_url: "https://mikanani.me/"
