70af9da338
Adds five new nullable columns to the pets table: - coat_type (text) - temperament_score (integer, range 1–5) - temperament_flags (jsonb, string[]) - medical_alerts (jsonb, typed MedicalAlert[]) - preferred_cuts (jsonb, string[]) Also: - Exports MedicalAlert interface and MedicalAlertSeverity type from schema - Updates shared Pet type in packages/types - Adds Zod validators for all fields (ranges, max lengths, enum) - Adds 14 tests covering happy path and validation edge cases - Fixes drizzle.config.ts schema path (was ./src/schema.ts, correct is ./src/db/schema.ts) Refs: GRO-1176 Co-Authored-By: Paperclip <noreply@paperclip.ing>
48 lines
3.0 KiB
JSON
48 lines
3.0 KiB
JSON
{
|
|
"id": "0030_extended_pet_profile",
|
|
"prevId": "0028_sms_reminders",
|
|
"version": "7",
|
|
"dialect": "postgresql",
|
|
"tables": {
|
|
"public.pets": {
|
|
"name": "pets",
|
|
"schema": "",
|
|
"columns": {
|
|
"id": { "name": "id", "type": "uuid", "primaryKey": true, "default": "gen_random_uuid()", "isNullable": false },
|
|
"client_id": { "name": "client_id", "type": "uuid", "isNullable": false },
|
|
"name": { "name": "name", "type": "text", "isNullable": false },
|
|
"species": { "name": "species", "type": "text", "isNullable": false },
|
|
"breed": { "name": "breed", "type": "text", "isNullable": true },
|
|
"weight_kg": { "name": "weight_kg", "type": "numeric(5, 2)", "isNullable": true },
|
|
"date_of_birth": { "name": "date_of_birth", "type": "timestamp", "isNullable": true },
|
|
"health_alerts": { "name": "health_alerts", "type": "text", "isNullable": true },
|
|
"grooming_notes": { "name": "grooming_notes", "type": "text", "isNullable": true },
|
|
"cut_style": { "name": "cut_style", "type": "text", "isNullable": true },
|
|
"shampoo_preference": { "name": "shampoo_preference", "type": "text", "isNullable": true },
|
|
"special_care_notes": { "name": "special_care_notes", "type": "text", "isNullable": true },
|
|
"custom_fields": { "name": "custom_fields", "type": "jsonb", "isNullable": false, "default": "'{}'::jsonb" },
|
|
"photo_key": { "name": "photo_key", "type": "text", "isNullable": true },
|
|
"photo_uploaded_at": { "name": "photo_uploaded_at", "type": "timestamp", "isNullable": true },
|
|
"image": { "name": "image", "type": "text", "isNullable": true },
|
|
"coat_type": { "name": "coat_type", "type": "text", "isNullable": true },
|
|
"temperament_score": { "name": "temperament_score", "type": "integer", "isNullable": true },
|
|
"temperament_flags": { "name": "temperament_flags", "type": "jsonb", "isNullable": true, "default": "'[]'::jsonb" },
|
|
"medical_alerts": { "name": "medical_alerts", "type": "jsonb", "isNullable": true, "default": "'[]'::jsonb" },
|
|
"preferred_cuts": { "name": "preferred_cuts", "type": "jsonb", "isNullable": true, "default": "'[]'::jsonb" },
|
|
"created_at": { "name": "created_at", "type": "timestamp", "isNullable": false, "default": "now()" },
|
|
"updated_at": { "name": "updated_at", "type": "timestamp", "isNullable": false, "default": "now()" }
|
|
},
|
|
"indexes": { "idx_pets_client_id": { "name": "idx_pets_client_id", "columns": [{ "expression": "client_id", "isExpression": false, "asc": true, "nulls": "last" }], "isUnique": false } },
|
|
"foreignKeys": { "pets_client_id_clients_id_fk": { "name": "pets_client_id_clients_id_fk", "tableFrom": "pets", "tableTo": "clients", "columnsFrom": ["client_id"], "columnsTo": ["id"], "onDelete": "cascade" } },
|
|
"compositePrimaryKeys": {},
|
|
"uniqueConstraints": {}
|
|
}
|
|
},
|
|
"enums": {},
|
|
"schemas": {},
|
|
"sequences": {},
|
|
"roles": {},
|
|
"policies": {},
|
|
"views": {},
|
|
"_meta": { "columns": {}, "schemas": {}, "tables": {} }
|
|
} |