wifi-densepose/v2/crates/wifi-densepose-db
rUv f49c722764
chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427)
The Rust port lived two directories deep (rust-port/wifi-densepose-rs/)
without any sibling under rust-port/ that warranted the extra level.
Move the whole workspace up to v2/ to match v1/ (Python) at the same
depth and shorten every cd / build command across the repo.

git mv preserves history for all tracked files. 60 files updated for
path references (CI workflows, ADRs, docs, scripts, READMEs, internal
.claude-flow state). Two manual fixes for relative-cd paths in
CLAUDE.md and ADR-043 that became wrong after the depth change
(cd ../.. → cd ..).

Validated:
- cargo check --workspace --no-default-features → clean (after target/
  nuke; the gitignored target/ was carried by the OS rename and had
  hard-coded old paths in build scripts)
- cargo test --workspace --no-default-features → 1,539 passed, 0 failed,
  8 ignored (same totals as pre-rename)
- ESP32-S3 on COM7 → still streaming live CSI (cb #40300, RSSI -64 dBm)

After-merge follow-up: contributors should `rm -rf v2/target` once and
let cargo regenerate from the new path.
2026-04-25 21:28:13 -04:00
..
src chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427) 2026-04-25 21:28:13 -04:00
Cargo.toml chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427) 2026-04-25 21:28:13 -04:00
README.md chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427) 2026-04-25 21:28:13 -04:00

README.md

wifi-densepose-db

Crates.io Documentation License

Database persistence layer for the WiFi-DensePose pose estimation system.

Overview

wifi-densepose-db implements the DataStore trait defined in wifi-densepose-core, providing persistent storage for CSI frames, pose estimates, scan sessions, and alert history. The intended backends are SQLx for relational storage (PostgreSQL and SQLite) and Redis for real-time caching and pub/sub.

Status: This crate is currently a stub. The intended API surface is documented below.

Planned Features

  • Dual backend -- PostgreSQL for production deployments, SQLite for single-node and embedded use. Selectable at compile time via feature flags.
  • Redis caching -- Connection-pooled Redis for low-latency pose estimate lookups, session state, and pub/sub event distribution.
  • Migrations -- Embedded SQL migrations managed by SQLx, applied automatically on startup.
  • Repository pattern -- Typed repository structs (PoseRepository, SessionRepository, AlertRepository) implementing the core DataStore trait.
  • Connection pooling -- Configurable pool sizes via sqlx::PgPool / sqlx::SqlitePool.
  • Transaction support -- Scoped transactions for multi-table writes (e.g., survivor detection plus alert creation).
  • Time-series optimisation -- Partitioned tables and retention policies for high-frequency CSI frame storage.

Planned feature flags

Flag Default Description
postgres no Enable PostgreSQL backend
sqlite yes Enable SQLite backend
redis no Enable Redis caching layer

Quick Start

// Intended usage (not yet implemented)
use wifi_densepose_db::{Database, PoseRepository};
use wifi_densepose_core::PoseEstimate;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let db = Database::connect("sqlite://data/wifi-densepose.db").await?;
    db.run_migrations().await?;

    let repo = PoseRepository::new(db.pool());

    // Store a pose estimate
    repo.insert(&pose_estimate).await?;

    // Query recent poses
    let recent = repo.find_recent(10).await?;
    println!("Last 10 poses: {:?}", recent);

    Ok(())
}

Planned Schema

-- Core tables
CREATE TABLE csi_frames (
    id          UUID PRIMARY KEY,
    session_id  UUID NOT NULL,
    timestamp   TIMESTAMPTZ NOT NULL,
    subcarriers BYTEA NOT NULL,
    antenna_id  INTEGER NOT NULL
);

CREATE TABLE pose_estimates (
    id          UUID PRIMARY KEY,
    frame_id    UUID REFERENCES csi_frames(id),
    timestamp   TIMESTAMPTZ NOT NULL,
    keypoints   JSONB NOT NULL,
    confidence  REAL NOT NULL
);

CREATE TABLE scan_sessions (
    id          UUID PRIMARY KEY,
    started_at  TIMESTAMPTZ NOT NULL,
    ended_at    TIMESTAMPTZ,
    config      JSONB NOT NULL
);
Crate Role
wifi-densepose-core DataStore trait definition
wifi-densepose-config Database connection configuration
wifi-densepose-api REST API (consumer)
wifi-densepose-mat Disaster detection (consumer)
wifi-densepose-signal CSI signal processing

License

MIT OR Apache-2.0