Files
biggus-dickus/crates/server/src/config.rs
T
logaritmisk d15afda9b2 feat(api): on-write search reindex after catalogue writes (#17)
Wire best-effort Meilisearch index sync into the admin write paths
(create/update/delete/set_fields/set_visibility). Adds
SearchClient::sync_object (reindex if the object exists, remove if gone —
one uniform path), an optional AppState.search client, and a reindex
helper that logs failures via tracing without failing the committed
write. Server gains MEILI_URL/MEILI_MASTER_KEY/MEILI_INDEX config;
search stays disabled (no-op) when unset. reindex_all remains the
recovery path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 23:25:43 +02:00

46 lines
1.7 KiB
Rust

use clap::Parser;
/// Runtime configuration, sourced from CLI arguments and environment variables.
#[derive(Debug, Clone, Parser)]
#[command(version, about = "Collection management system server")]
pub struct Config {
/// PostgreSQL connection string.
#[arg(long, env = "DATABASE_URL")]
pub database_url: String,
/// Address to bind the HTTP server to.
#[arg(long, env = "BIND_ADDR", default_value = "0.0.0.0:8080")]
pub bind_addr: String,
/// User-facing application name (OpenAPI title, page title, …).
///
/// Defaults to a neutral name; set this to the real product name at deploy
/// time. The product name must never be hardcoded in source.
#[arg(long, env = "APP_NAME", default_value = "Collection Management System")]
pub app_name: String,
/// Send the session cookie with the `Secure` attribute (HTTPS-only). Disable
/// only for plain-HTTP self-hosting behind no TLS at all.
#[arg(
long = "session-cookie-secure",
env = "SESSION_COOKIE_SECURE",
default_value_t = true
)]
pub cookie_secure: bool,
/// Meilisearch base URL (e.g. `http://localhost:7700`). On-write search indexing
/// is enabled only when both this and `--meili-master-key` are set; otherwise
/// search is disabled (best-effort feature) and `reindex_all` remains the rebuild
/// path.
#[arg(long = "meili-url", env = "MEILI_URL")]
pub meili_url: Option<String>,
/// Meilisearch API key (master or a scoped key).
#[arg(long = "meili-master-key", env = "MEILI_MASTER_KEY")]
pub meili_master_key: Option<String>,
/// Meilisearch index name for catalogue objects.
#[arg(long = "meili-index", env = "MEILI_INDEX", default_value = "objects")]
pub meili_index: String,
}