fiddy/docs/bucket-usage-audit.md
2026-02-11 23:45:15 -08:00

29 lines
2.0 KiB
Markdown

# Bucket Usage Audit (2026-02-11)
## What exists
- Buckets table: `buckets` in [packages/db/migrations/005_buckets.sql](packages/db/migrations/005_buckets.sql)
- Entries table: `entries` (pivoted from spendings) in [packages/db/migrations/004_entries_pivot.sql](packages/db/migrations/004_entries_pivot.sql) and base definition in [packages/db/migrations/001_init.sql](packages/db/migrations/001_init.sql)
- Tags storage: `tags`, `entry_tags`, `bucket_tags` in [packages/db/migrations/002_tags.sql](packages/db/migrations/002_tags.sql) and [packages/db/migrations/005_buckets.sql](packages/db/migrations/005_buckets.sql)
- Recurrence fields: `entries.is_recurring` plus recurrence columns in [packages/db/migrations/004_entries_pivot.sql](packages/db/migrations/004_entries_pivot.sql)
- Necessity enum (entries): `spending_necessity` in [packages/db/migrations/001_init.sql](packages/db/migrations/001_init.sql)
- Existing usage calc: `totalSpent` based on tag overlap in [apps/web/lib/server/buckets.ts](apps/web/lib/server/buckets.ts)
- Bucket API routes: [apps/web/app/api/buckets/route.ts](apps/web/app/api/buckets/route.ts) and [apps/web/app/api/buckets/[id]/route.ts](apps/web/app/api/buckets/[id]/route.ts)
## Missing before this change
- Bucket `necessity` (no column or API fields)
- Bucket `windowDays` (no column or API fields)
- Bucket usage rules for recurrence/necessity/date window
- Entry necessity value `BOTH` (enum was aligned to `BOTH`)
## Endpoints impacted
- Buckets list/create/update in [apps/web/app/api/buckets/route.ts](apps/web/app/api/buckets/route.ts)
- Buckets update/delete in [apps/web/app/api/buckets/[id]/route.ts](apps/web/app/api/buckets/[id]/route.ts)
- Entries and recurring entries endpoints for necessity validation
## Notes
- Tag matching uses `bucket_tags` and `entry_tags` join tables.
- Recurrence flag is `entries.is_recurring`.
- `occurred_at` is `date` in the DB (not timestamp).
- `windowDays` default set to 30 (min 1, max 365).
- Necessity uses `spending_necessity` enum with `BOTH`.