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.
Elijah Voigt fb93483f5c feat(quotesdb): date range filter for quotes list
Add 6 optional query parameters to GET /api/quotes:
  date_after_year/month/day and date_before_year/month/day

Changes:
- QuoteRepository::list_quotes gains date_after and date_before params
- NativeRepository and D1Repository build ISO date prefix WHERE clauses;
  quotes with NULL date are excluded when any bound is set
- list_handler validates component ordering (month requires year, etc.)
  and returns 400 on invalid combinations
- build_date_bound helper converts y/m/d components to ISO prefix strings
- UI api::list_quotes and browse page gain From/To year filter inputs
- author page call updated to pass None for the new date params
- openapi.yaml extended with 6 new query parameter entries
- 6 new integration tests covering after, before, range, and 400 cases
- 1 new native DB unit test covering all filter combinations

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 months ago
..
.claude quotesdb scaffolding 3 months ago
.nbd chore(quotesdb): close all tickets — implementation complete 3 months ago
api feat(quotesdb): date range filter for quotes list 3 months ago
docs feat(quotesdb): implement API DB layer and all HTTP handlers 3 months ago
infra feat(quotesdb): admin super auth code for quote moderation 3 months ago
src feat(quotesdb): date range filter for quotes list 3 months ago
tests feat(quotesdb): implement API DB layer and all HTTP handlers 3 months ago
.env.example feat(quotesdb): implement API DB layer and all HTTP handlers 3 months ago
.gitignore fix frontend proxy issue 3 months ago
CLAUDE.md chore(quotesdb): resolve all triage tickets and create implementation tickets 3 months ago
Cargo.lock test(quotesdb): add integration test suite for all API endpoints 3 months ago
Cargo.toml feat(quotesdb): add workers-rs WASM entry point to api binary 3 months ago
README.md refactor(quotesdb): collapse to single crate with api and ui binaries 3 months ago
TODO.md flake and quotesdb misc change 3 months ago
Trunk.toml fix frontend proxy issue 3 months ago
_redirects chore(quotesdb): add _redirects SPA fallback for Cloudflare Pages routing 3 months ago
build.rs feat(quotesdb): add build.rs to convert api/openapi.yaml to JSON at compile time 3 months ago
index.html feat(quotesdb): set up Trunk.toml and index.html for UI build 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 (api binary) backed by Cloudflare Workers + D1 (SQLite)
  • A Yew/Wasm frontend (ui binary) 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 + D1
  • ui: Yew compiled to wasm32-unknown-unknown via 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).