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.
Add three new QuoteRepository trait methods and a seed helper: - update_admin_auth_code(current, new_code): replaces the admin code if `current` matches; generates a fresh passphrase when new_code is None; returns DbError::Forbidden on mismatch. - get_submissions_locked(): reads the submissions_locked key from admin_config; returns false when the key is absent. - set_submissions_locked(locked): upserts "1"/"0" into admin_config. - seed_submissions_locked(): INSERT OR IGNORE "0" — safe to call on every startup without clobbering an active lock. Implemented in both NativeRepository (rusqlite) and D1Repository (wasm32). Updated startup seeding in main.rs (native and wasm32 paths) to call seed_submissions_locked after the existing admin auth code seeding. Added 7 unit tests in db/native.rs covering all four specified scenarios: default false, set-then-get, seed does not overwrite, correct code succeeds, None new_code generates passphrase, wrong code returns Forbidden, stored code unchanged after Forbidden. MockRepo in handlers/mod.rs updated with stub implementations of all four new trait methods to satisfy the trait bound. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
3 months ago | |
|---|---|---|
| .. | ||
| .claude | 3 months ago | |
| .nbd | 3 months ago | |
| api | 3 months ago | |
| docs | 3 months ago | |
| infra | 3 months ago | |
| src | 3 months ago | |
| tests | 3 months ago | |
| .env.example | 3 months ago | |
| .gitignore | 3 months ago | |
| CLAUDE.md | 3 months ago | |
| Cargo.lock | 3 months ago | |
| Cargo.toml | 3 months ago | |
| README.md | 3 months ago | |
| Trunk.toml | 3 months ago | |
| _redirects | 3 months ago | |
| build.rs | 3 months ago | |
| index.html | 3 months ago | |
README.md
quotesdb
A quotes web application — browse, submit, and manage memorable quotes.
What
quotesdb is a full-stack web application with:
- A JSON REST API (
apibinary) backed by Cloudflare Workers + D1 (SQLite) - A Yew/Wasm frontend (
uibinary) hosted on Cloudflare Pages - NanoID-identified quotes protected by a 4-word passphrase auth code
How
Single Cargo crate with two binaries sharing common types via src/lib.rs:
api: Axum on Tokio, targeting Cloudflare Workers via workers-rs, SQLx + D1ui: Yew compiled towasm32-unknown-unknownvia Trunk
Run
# Start API server (local dev)
cargo run
# Start UI dev server (requires wasm32 toolchain + trunk)
trunk serve
Test
cargo fmt && cargo check && cargo clippy && cargo test
License
Licensed under either of Apache License, Version 2.0 or MIT License at your option.
Disclaimer
This software was written with Claude Code (claude-sonnet-4-6).