feat: wire relay API with dependency injection

- split settings module into per-struct files
- add DatabaseSettings with default in-memory SQLite path
- implement RelayApi struct with GET /relays and POST
  /relays/{id}/toggle
- wire create_relay_controller and create_label_repository into
  Application::build() with mock/real selection via cfg!(test) || CI
- register RelayApi in OpenApiService alongside existing APIs
This commit is contained in:
2026-03-04 12:47:21 +01:00
parent fd00d1925b
commit 2eebc52f17
30 changed files with 1170 additions and 670 deletions

View File

@@ -30,7 +30,7 @@ impl HealthApi {
#[tokio::test]
async fn health_check_works() {
let app = crate::get_test_app();
let app = crate::get_test_app().await;
let cli = poem::test::TestClient::new(app);
let resp = cli.get("/api/health").send().await;
resp.assert_status_is_ok();

View File

@@ -59,7 +59,7 @@ impl MetaApi {
mod tests {
#[tokio::test]
async fn meta_endpoint_returns_correct_data() {
let app = crate::get_test_app();
let app = crate::get_test_app().await;
let cli = poem::test::TestClient::new(app);
let resp = cli.get("/api/meta").send().await;
resp.assert_status_is_ok();
@@ -78,7 +78,7 @@ mod tests {
#[tokio::test]
async fn meta_endpoint_returns_200_status() {
let app = crate::get_test_app();
let app = crate::get_test_app().await;
let cli = poem::test::TestClient::new(app);
let resp = cli.get("/api/meta").send().await;
resp.assert_status_is_ok();

View File

@@ -12,9 +12,10 @@ mod meta;
use crate::settings::Settings;
#[derive(Tags)]
enum ApiCategory {
pub enum ApiCategory {
Health,
Meta,
Relays,
}
pub(crate) struct Api {