fix(docs): remove outdated DB_README and atomic collection creation SQL file
This commit is contained in:
parent
77dc22ce05
commit
c4be70a294
3 changed files with 0 additions and 165 deletions
116
DB_README.md
116
DB_README.md
|
|
@ -1,116 +0,0 @@
|
||||||
# Database & Backend Notes
|
|
||||||
|
|
||||||
This document is the operational source of truth for database setup and backend contracts used by the app.
|
|
||||||
|
|
||||||
## Stack
|
|
||||||
|
|
||||||
- Supabase Postgres
|
|
||||||
- Supabase Auth
|
|
||||||
- Supabase Storage
|
|
||||||
- Supabase RPC functions
|
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
This file intentionally stays concise. Do not paste full raw data-dictionary exports here.
|
|
||||||
|
|
||||||
If you need snapshots, store them separately (for example in a local `db_exports/` folder) and summarize only key outcomes in this file.
|
|
||||||
|
|
||||||
## Environments
|
|
||||||
|
|
||||||
Document environment endpoints and ownership:
|
|
||||||
|
|
||||||
- Development: TBD
|
|
||||||
- Staging: TBD
|
|
||||||
- Production: TBD
|
|
||||||
|
|
||||||
## Core App Tables
|
|
||||||
|
|
||||||
Keep this section focused on app-owned tables (not full Supabase system schemas).
|
|
||||||
|
|
||||||
- `collections`
|
|
||||||
- `collection_members`
|
|
||||||
- `hotwheels`
|
|
||||||
- `global_cars`
|
|
||||||
- `car_votes`
|
|
||||||
- `car_reports`
|
|
||||||
|
|
||||||
## Key RPC Functions
|
|
||||||
|
|
||||||
- `get_collection_counts`
|
|
||||||
- `get_collection_members`
|
|
||||||
- `get_user_id_by_email`
|
|
||||||
- `remove_collection_member`
|
|
||||||
- `create_collection_with_owner` (atomic create path)
|
|
||||||
|
|
||||||
## Atomic Collection Creation
|
|
||||||
|
|
||||||
App code now prefers a transactional RPC for collection creation:
|
|
||||||
|
|
||||||
- App integration: `CollectionService.create()`
|
|
||||||
- Migration script: `db/atomic_create_collection_with_owner.sql`
|
|
||||||
|
|
||||||
### Apply
|
|
||||||
|
|
||||||
Run the script in Supabase SQL Editor:
|
|
||||||
|
|
||||||
- `db/atomic_create_collection_with_owner.sql`
|
|
||||||
|
|
||||||
## RLS Expectations
|
|
||||||
|
|
||||||
For each core table, document:
|
|
||||||
|
|
||||||
- who can `select`
|
|
||||||
- who can `insert`
|
|
||||||
- who can `update`
|
|
||||||
- who can `delete`
|
|
||||||
- special policy conditions
|
|
||||||
|
|
||||||
Status: TBD
|
|
||||||
|
|
||||||
## Storage
|
|
||||||
|
|
||||||
- Bucket: `car-images` (private)
|
|
||||||
- Access model: signed URLs from app/backend
|
|
||||||
- Ownership path pattern: `{auth.uid()}/{entry.id}.jpg`
|
|
||||||
|
|
||||||
## Migration Workflow
|
|
||||||
|
|
||||||
1. Write SQL migration in repository (`db/` or migration folder).
|
|
||||||
2. Validate in development.
|
|
||||||
3. Verify RLS impact.
|
|
||||||
4. Promote to staging.
|
|
||||||
5. Promote to production.
|
|
||||||
6. Record change summary in this document.
|
|
||||||
|
|
||||||
## Reproducible Schema Snapshot
|
|
||||||
|
|
||||||
- Query pack: `db/export_schema.sql`
|
|
||||||
- Goal: produce repeatable app-focused schema snapshots without bloating docs
|
|
||||||
|
|
||||||
Suggested usage:
|
|
||||||
|
|
||||||
1. Run `db/export_schema.sql` in Supabase SQL Editor.
|
|
||||||
2. Export result sets (CSV/JSON) and store externally (for example `db_exports/` in local/private ops repo).
|
|
||||||
3. Summarize only key changes in this `DB_README.md`.
|
|
||||||
|
|
||||||
## Operational Checklist
|
|
||||||
|
|
||||||
Before deploy:
|
|
||||||
|
|
||||||
- [ ] Migration SQL reviewed
|
|
||||||
- [ ] RLS policy impact checked
|
|
||||||
- [ ] RPC grant/permissions verified
|
|
||||||
- [ ] Rollback strategy identified
|
|
||||||
- [ ] App compatibility validated (`flutter analyze`, tests, smoke flows)
|
|
||||||
|
|
||||||
## Known Risks / Notes
|
|
||||||
|
|
||||||
- Keep app and DB changes synchronized when changing RPC signatures.
|
|
||||||
- Favor DB-side transactional functions for multi-step write operations.
|
|
||||||
- Avoid exposing backend internals in user-facing error messages.
|
|
||||||
|
|
||||||
## References
|
|
||||||
|
|
||||||
- App service integration: `lib/services/collection_service.dart`
|
|
||||||
- Atomic RPC migration: `db/atomic_create_collection_with_owner.sql`
|
|
||||||
- Security process: `SECURITY.md`
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
-- Atomic collection creation + owner membership insert
|
|
||||||
-- Run this in Supabase SQL Editor.
|
|
||||||
|
|
||||||
create or replace function public.create_collection_with_owner(
|
|
||||||
p_name text,
|
|
||||||
p_description text default null
|
|
||||||
)
|
|
||||||
returns public.collections
|
|
||||||
language plpgsql
|
|
||||||
security definer
|
|
||||||
set search_path = public
|
|
||||||
as $$
|
|
||||||
declare
|
|
||||||
v_user_id uuid := auth.uid();
|
|
||||||
v_collection public.collections;
|
|
||||||
begin
|
|
||||||
if v_user_id is null then
|
|
||||||
raise exception 'Not authenticated';
|
|
||||||
end if;
|
|
||||||
|
|
||||||
insert into public.collections (
|
|
||||||
name,
|
|
||||||
owner_id,
|
|
||||||
description
|
|
||||||
)
|
|
||||||
values (
|
|
||||||
p_name,
|
|
||||||
v_user_id,
|
|
||||||
nullif(trim(p_description), '')
|
|
||||||
)
|
|
||||||
returning * into v_collection;
|
|
||||||
|
|
||||||
insert into public.collection_members (
|
|
||||||
collection_id,
|
|
||||||
user_id,
|
|
||||||
role
|
|
||||||
)
|
|
||||||
values (
|
|
||||||
v_collection.id,
|
|
||||||
v_user_id,
|
|
||||||
'owner'
|
|
||||||
);
|
|
||||||
|
|
||||||
return v_collection;
|
|
||||||
end;
|
|
||||||
$$;
|
|
||||||
|
|
||||||
grant execute on function public.create_collection_with_owner(text, text) to authenticated;
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
-- Reproducible schema export query pack (app-focused)
|
|
||||||
-- Run in Supabase SQL Editor or psql and export results as CSV/JSON.
|
-- Run in Supabase SQL Editor or psql and export results as CSV/JSON.
|
||||||
|
|
||||||
-- 1) App tables and columns (public only)
|
-- 1) App tables and columns (public only)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue