25 lines
1.2 KiB
Markdown
25 lines
1.2 KiB
Markdown
# POST3-002: Database schema, models, and error types
|
|
|
|
**Status:** Done
|
|
**Priority:** P0
|
|
**Blocked by:** POST3-001
|
|
|
|
## Description
|
|
|
|
Define the PostgreSQL schema (buckets, objects, object_metadata, blocks), create Rust model types with sqlx::FromRow, and define the Post3Error enum.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- [ ] `crates/post3/migrations/20260226000001_initial.sql` with all 4 tables + indexes
|
|
- [ ] `crates/post3/src/models.rs` — BucketRow, ObjectRow, BlockRow, MetadataEntry, ObjectInfo, ListObjectsResult
|
|
- [ ] `crates/post3/src/error.rs` — Post3Error enum (BucketNotFound, BucketAlreadyExists, ObjectNotFound, BucketNotEmpty, Database, Other)
|
|
- [ ] Migration runs successfully against PostgreSQL
|
|
- [ ] `cargo check -p post3` passes
|
|
|
|
## Schema Details
|
|
|
|
- `buckets` — id (UUID PK), name (TEXT UNIQUE), created_at
|
|
- `objects` — id (UUID PK), bucket_id (FK CASCADE), key, size, etag, content_type, created_at; unique on (bucket_id, key)
|
|
- `object_metadata` — id (UUID PK), object_id (FK CASCADE), meta_key, meta_value; unique on (object_id, meta_key)
|
|
- `blocks` — id (UUID PK), object_id (FK CASCADE), block_index, data (BYTEA), block_size; unique on (object_id, block_index)
|