server:
  port: 18087
  mode: release  # debug, release
  read_timeout: 30s
  read_header_timeout: 10s
  write_timeout: 30s
  idle_timeout: 60s
  shutdown_timeout: 15s
  max_header_bytes: 1048576

database:
  type: sqlite  # sqlite, postgresql, mysql
  sqlite:
    path: "D:/project/docs/evidence/ops/2026-03-24/rollback/20260324-084928/user_management.stable.db"
  postgresql:
    host: localhost
    port: 5432
    database: user_management
    username: postgres
    password: password
    ssl_mode: disable
    max_open_conns: 100
    max_idle_conns: 10
  mysql:
    host: localhost
    port: 3306
    database: user_management
    username: root
    password: password
    charset: utf8mb4
    max_open_conns: 100
    max_idle_conns: 10

cache:
  l1:
    enabled: true
    max_size: 10000
    ttl: 5m
  l2:
    enabled: false
    type: redis
    redis:
      addr: localhost:6379
      password: ""
      db: 0
      pool_size: 50
      ttl: 30m

redis:
  enabled: false
  addr: localhost:6379
  password: ""
  db: 0

jwt:
  algorithm: RS256
  secret: your-secret-key-change-in-production
  private_key_path: "./data/jwt/private.pem"
  public_key_path: "./data/jwt/public.pem"
  private_key_pem: ""
  public_key_pem: ""
  access_token_expire: 2h
  refresh_token_expire: 168h  # 7澶?= 168灏忔椂

security:
  password_min_length: 8
  password_require_special: true
  password_require_number: true
  login_max_attempts: 5
  login_lock_duration: 30m

ratelimit:
  enabled: true
  login:
    enabled: true
    algorithm: token_bucket
    capacity: 5
    rate: 1
    window: 1m
  register:
    enabled: true
    algorithm: leaky_bucket
    capacity: 3
    rate: 1
    window: 1h
  api:
    enabled: true
    algorithm: sliding_window
    capacity: 1000
    window: 1m

monitoring:
  prometheus:
    enabled: true
    path: /metrics
  tracing:
    enabled: false
    endpoint: http://localhost:4318
    service_name: user-management-system

logging:
  level: info  # debug, info, warn, error
  format: json  # json, text
  output:
    - stdout
    - ./logs/app.log
  rotation:
    max_size: 100  # MB
    max_age: 30    # days
    max_backups: 10

admin:
  username: ""
  password: ""
  email: ""

cors:
  enabled: true
  allowed_origins:
    - "*"

