You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.9 KiB
2.9 KiB
+++ title = "Implement database connection module and SQLx migrations (quotes + quote_tags schema)" priority = 8 status = "todo" ticket_type = "task" dependencies = ["1f5bb5", "580e66", "33ed29"] +++
The `quotesdb` API is built with Axum + Tokio, targeting Cloudflare Workers via `workers-rs`. It serves JSON at `/api/*` endpoints and persists data to Cloudflare D1 (production) or a local SQLite file via Turso (development). Source lives in `src/bin/api/`.Shared types and utilities are in src/lib.rs — code placed there must compile for both the host target and wasm32-unknown-unknown.
The database schema consists of two tables:
quotes— stores id (NanoID), text, author, source, date, auth_code, created_at, updated_atquote_tags— join table for quote-to-tag relationships with cascade delete
TRIAGE e8a330 concluded that SQLx is incompatible with workers-rs/D1. The new approach uses:
- workers-rs
D1Databasebindings for the WASM/production target rusqlite+tokio-rusqlitefor the native/test target- A
QuoteRepositoryasync trait as the shared interface cfg(target_arch = "wasm32")for compile-time target selection
See ticket 00aff0 for the full implementation plan.
This ticket remains open as tracking context but its implementation is covered by 00aff0.
~~Implement `src/bin/api/db.rs` (or equivalent module) providing:~~ ~~1. A database connection pool constructor (Turso/SQLite locally, D1 in production)~~ ~~2. SQLx migrations that create the `quotes` and `quote_tags` tables if they don't exist~~ ~~3. Re-export the pool type for use by handlers~~Updated goal (see ticket 00aff0): Implement src/bin/api/db/ module with:
QuoteRepositorytrait indb/mod.rsD1Repositoryindb/d1.rs(#[cfg(target_arch = "wasm32")])NativeRepositoryindb/native.rs(#[cfg(not(target_arch = "wasm32"))])- SQL migration strings in
db/migrations.rs
cargo fmt
cargo check
cargo clippy
cargo test
`feat(quotesdb): implement database connection module and SQLx migrations`