{ "id": "23173ebe-e8bb-4140-8c03-dc9e201f673b", "prevId": "ba931c2d-2ac8-415e-af13-e54aa39fbe02", "version": "7", "dialect": "postgresql", "tables": { "public.accounts": { "name": "accounts", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "account_id": { "name": "account_id", "type": "text", "primaryKey": false, "notNull": true }, "provider_id": { "name": "provider_id", "type": "text", "primaryKey": false, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "access_token": { "name": "access_token", "type": "text", "primaryKey": false, "notNull": false }, "refresh_token": { "name": "refresh_token", "type": "text", "primaryKey": false, "notNull": false }, "id_token": { "name": "id_token", "type": "text", "primaryKey": false, "notNull": false }, "access_token_expires_at": { "name": "access_token_expires_at", "type": "timestamp", "primaryKey": false, "notNull": false }, "refresh_token_expires_at": { "name": "refresh_token_expires_at", "type": "timestamp", "primaryKey": false, "notNull": false }, "scope": { "name": "scope", "type": "text", "primaryKey": false, "notNull": false }, "password": { "name": "password", "type": "text", "primaryKey": false, "notNull": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "accounts_user_id_users_id_fk": { "name": "accounts_user_id_users_id_fk", "tableFrom": "accounts", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.api_keys": { "name": "api_keys", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "name": { "name": "name", "type": "text", "primaryKey": false, "notNull": true }, "key_hash": { "name": "key_hash", "type": "text", "primaryKey": false, "notNull": true }, "last_used_at": { "name": "last_used_at", "type": "timestamp", "primaryKey": false, "notNull": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "api_keys_user_id_users_id_fk": { "name": "api_keys_user_id_users_id_fk", "tableFrom": "api_keys", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "api_keys_key_hash_unique": { "name": "api_keys_key_hash_unique", "nullsNotDistinct": false, "columns": [ "key_hash" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.push_subscriptions": { "name": "push_subscriptions", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "endpoint": { "name": "endpoint", "type": "text", "primaryKey": false, "notNull": true }, "p256dh": { "name": "p256dh", "type": "text", "primaryKey": false, "notNull": true }, "auth": { "name": "auth", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "push_subscriptions_user_id_users_id_fk": { "name": "push_subscriptions_user_id_users_id_fk", "tableFrom": "push_subscriptions", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "push_subscriptions_endpoint_unique": { "name": "push_subscriptions_endpoint_unique", "nullsNotDistinct": false, "columns": [ "endpoint" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.sessions": { "name": "sessions", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "expires_at": { "name": "expires_at", "type": "timestamp", "primaryKey": false, "notNull": true }, "token": { "name": "token", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "ip_address": { "name": "ip_address", "type": "text", "primaryKey": false, "notNull": false }, "user_agent": { "name": "user_agent", "type": "text", "primaryKey": false, "notNull": false }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true } }, "indexes": {}, "foreignKeys": { "sessions_user_id_users_id_fk": { "name": "sessions_user_id_users_id_fk", "tableFrom": "sessions", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "sessions_token_unique": { "name": "sessions_token_unique", "nullsNotDistinct": false, "columns": [ "token" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.user_ai_keys": { "name": "user_ai_keys", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "provider": { "name": "provider", "type": "text", "primaryKey": false, "notNull": true }, "encrypted_key": { "name": "encrypted_key", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "user_ai_keys_user_id_users_id_fk": { "name": "user_ai_keys_user_id_users_id_fk", "tableFrom": "user_ai_keys", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.user_blocks": { "name": "user_blocks", "schema": "", "columns": { "blocker_id": { "name": "blocker_id", "type": "text", "primaryKey": false, "notNull": true }, "blocked_id": { "name": "blocked_id", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "user_blocks_blocker_id_users_id_fk": { "name": "user_blocks_blocker_id_users_id_fk", "tableFrom": "user_blocks", "tableTo": "users", "columnsFrom": [ "blocker_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "user_blocks_blocked_id_users_id_fk": { "name": "user_blocks_blocked_id_users_id_fk", "tableFrom": "user_blocks", "tableTo": "users", "columnsFrom": [ "blocked_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": { "user_blocks_blocker_id_blocked_id_pk": { "name": "user_blocks_blocker_id_blocked_id_pk", "columns": [ "blocker_id", "blocked_id" ] } }, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.user_follows": { "name": "user_follows", "schema": "", "columns": { "follower_id": { "name": "follower_id", "type": "text", "primaryKey": false, "notNull": true }, "following_id": { "name": "following_id", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "user_follows_follower_id_users_id_fk": { "name": "user_follows_follower_id_users_id_fk", "tableFrom": "user_follows", "tableTo": "users", "columnsFrom": [ "follower_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "user_follows_following_id_users_id_fk": { "name": "user_follows_following_id_users_id_fk", "tableFrom": "user_follows", "tableTo": "users", "columnsFrom": [ "following_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": { "user_follows_follower_id_following_id_pk": { "name": "user_follows_follower_id_following_id_pk", "columns": [ "follower_id", "following_id" ] } }, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.user_model_prefs": { "name": "user_model_prefs", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "text_provider": { "name": "text_provider", "type": "text", "primaryKey": false, "notNull": false }, "text_model": { "name": "text_model", "type": "text", "primaryKey": false, "notNull": false }, "vision_provider": { "name": "vision_provider", "type": "text", "primaryKey": false, "notNull": false }, "vision_model": { "name": "vision_model", "type": "text", "primaryKey": false, "notNull": false }, "meal_plan_provider": { "name": "meal_plan_provider", "type": "text", "primaryKey": false, "notNull": false }, "meal_plan_model": { "name": "meal_plan_model", "type": "text", "primaryKey": false, "notNull": false }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "user_model_prefs_user_id_users_id_fk": { "name": "user_model_prefs_user_id_users_id_fk", "tableFrom": "user_model_prefs", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "user_model_prefs_user_id_unique": { "name": "user_model_prefs_user_id_unique", "nullsNotDistinct": false, "columns": [ "user_id" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.user_nutrition_goals": { "name": "user_nutrition_goals", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "calories_kcal": { "name": "calories_kcal", "type": "integer", "primaryKey": false, "notNull": false }, "protein_g": { "name": "protein_g", "type": "integer", "primaryKey": false, "notNull": false }, "carbs_g": { "name": "carbs_g", "type": "integer", "primaryKey": false, "notNull": false }, "fat_g": { "name": "fat_g", "type": "integer", "primaryKey": false, "notNull": false }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "user_nutrition_goals_user_id_users_id_fk": { "name": "user_nutrition_goals_user_id_users_id_fk", "tableFrom": "user_nutrition_goals", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "user_nutrition_goals_user_id_unique": { "name": "user_nutrition_goals_user_id_unique", "nullsNotDistinct": false, "columns": [ "user_id" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.users": { "name": "users", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "email": { "name": "email", "type": "text", "primaryKey": false, "notNull": true }, "email_verified": { "name": "email_verified", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "name": { "name": "name", "type": "text", "primaryKey": false, "notNull": true }, "avatar_url": { "name": "avatar_url", "type": "text", "primaryKey": false, "notNull": false }, "has_custom_avatar": { "name": "has_custom_avatar", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "bio": { "name": "bio", "type": "text", "primaryKey": false, "notNull": false }, "private_bio": { "name": "private_bio", "type": "text", "primaryKey": false, "notNull": false }, "is_private": { "name": "is_private", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "username": { "name": "username", "type": "text", "primaryKey": false, "notNull": false }, "role": { "name": "role", "type": "user_role", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'user'" }, "tier": { "name": "tier", "type": "tier", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'free'" }, "stripe_customer_id": { "name": "stripe_customer_id", "type": "text", "primaryKey": false, "notNull": false }, "unit_pref": { "name": "unit_pref", "type": "unit_pref", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'metric'" }, "locale": { "name": "locale", "type": "text", "primaryKey": false, "notNull": true, "default": "'en'" }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, "uniqueConstraints": { "users_email_unique": { "name": "users_email_unique", "nullsNotDistinct": false, "columns": [ "email" ] }, "users_username_unique": { "name": "users_username_unique", "nullsNotDistinct": false, "columns": [ "username" ] }, "users_stripe_customer_id_unique": { "name": "users_stripe_customer_id_unique", "nullsNotDistinct": false, "columns": [ "stripe_customer_id" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.verifications": { "name": "verifications", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "identifier": { "name": "identifier", "type": "text", "primaryKey": false, "notNull": true }, "value": { "name": "value", "type": "text", "primaryKey": false, "notNull": true }, "expires_at": { "name": "expires_at", "type": "timestamp", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.ingredients": { "name": "ingredients", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "name": { "name": "name", "type": "text", "primaryKey": false, "notNull": true }, "aliases": { "name": "aliases", "type": "text[]", "primaryKey": false, "notNull": true, "default": "'{}'" }, "category": { "name": "category", "type": "text", "primaryKey": false, "notNull": false }, "known_allergens": { "name": "known_allergens", "type": "text[]", "primaryKey": false, "notNull": true, "default": "'{}'" }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, "uniqueConstraints": { "ingredients_name_unique": { "name": "ingredients_name_unique", "nullsNotDistinct": false, "columns": [ "name" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.recipe_batch_dishes": { "name": "recipe_batch_dishes", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "name": { "name": "name", "type": "text", "primaryKey": false, "notNull": true }, "description": { "name": "description", "type": "text", "primaryKey": false, "notNull": false }, "order": { "name": "order", "type": "integer", "primaryKey": false, "notNull": true, "default": 0 }, "fridge_days": { "name": "fridge_days", "type": "integer", "primaryKey": false, "notNull": true }, "freezer_friendly": { "name": "freezer_friendly", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "freezer_note": { "name": "freezer_note", "type": "text", "primaryKey": false, "notNull": false }, "day_of_instructions": { "name": "day_of_instructions", "type": "text", "primaryKey": false, "notNull": true } }, "indexes": { "recipe_batch_dishes_recipe_idx": { "name": "recipe_batch_dishes_recipe_idx", "columns": [ { "expression": "recipe_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "recipe_batch_dishes_recipe_id_recipes_id_fk": { "name": "recipe_batch_dishes_recipe_id_recipes_id_fk", "tableFrom": "recipe_batch_dishes", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.recipe_ingredients": { "name": "recipe_ingredients", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "ingredient_id": { "name": "ingredient_id", "type": "text", "primaryKey": false, "notNull": false }, "raw_name": { "name": "raw_name", "type": "text", "primaryKey": false, "notNull": true }, "quantity": { "name": "quantity", "type": "numeric(10, 4)", "primaryKey": false, "notNull": false }, "unit": { "name": "unit", "type": "text", "primaryKey": false, "notNull": false }, "note": { "name": "note", "type": "text", "primaryKey": false, "notNull": false }, "order": { "name": "order", "type": "integer", "primaryKey": false, "notNull": true, "default": 0 } }, "indexes": { "recipe_ingredients_recipe_idx": { "name": "recipe_ingredients_recipe_idx", "columns": [ { "expression": "recipe_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "recipe_ingredients_recipe_id_recipes_id_fk": { "name": "recipe_ingredients_recipe_id_recipes_id_fk", "tableFrom": "recipe_ingredients", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "recipe_ingredients_ingredient_id_ingredients_id_fk": { "name": "recipe_ingredients_ingredient_id_ingredients_id_fk", "tableFrom": "recipe_ingredients", "tableTo": "ingredients", "columnsFrom": [ "ingredient_id" ], "columnsTo": [ "id" ], "onDelete": "set null", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.recipe_notes": { "name": "recipe_notes", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "content": { "name": "content", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "recipe_notes_recipe_user_idx": { "name": "recipe_notes_recipe_user_idx", "columns": [ { "expression": "recipe_id", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": true, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "recipe_notes_recipe_id_recipes_id_fk": { "name": "recipe_notes_recipe_id_recipes_id_fk", "tableFrom": "recipe_notes", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "recipe_notes_user_id_users_id_fk": { "name": "recipe_notes_user_id_users_id_fk", "tableFrom": "recipe_notes", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.recipe_photos": { "name": "recipe_photos", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "storage_key": { "name": "storage_key", "type": "text", "primaryKey": false, "notNull": true }, "order": { "name": "order", "type": "integer", "primaryKey": false, "notNull": true, "default": 0 }, "is_cover": { "name": "is_cover", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "recipe_photos_recipe_id_recipes_id_fk": { "name": "recipe_photos_recipe_id_recipes_id_fk", "tableFrom": "recipe_photos", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.recipe_snapshots": { "name": "recipe_snapshots", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "author_id": { "name": "author_id", "type": "text", "primaryKey": false, "notNull": true }, "version": { "name": "version", "type": "integer", "primaryKey": false, "notNull": true }, "title": { "name": "title", "type": "text", "primaryKey": false, "notNull": true }, "snapshot_data": { "name": "snapshot_data", "type": "jsonb", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "recipe_snapshots_recipe_idx": { "name": "recipe_snapshots_recipe_idx", "columns": [ { "expression": "recipe_id", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "version", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "recipe_snapshots_recipe_id_recipes_id_fk": { "name": "recipe_snapshots_recipe_id_recipes_id_fk", "tableFrom": "recipe_snapshots", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "recipe_snapshots_author_id_users_id_fk": { "name": "recipe_snapshots_author_id_users_id_fk", "tableFrom": "recipe_snapshots", "tableTo": "users", "columnsFrom": [ "author_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.recipe_steps": { "name": "recipe_steps", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "order": { "name": "order", "type": "integer", "primaryKey": false, "notNull": true }, "instruction": { "name": "instruction", "type": "text", "primaryKey": false, "notNull": true }, "timer_seconds": { "name": "timer_seconds", "type": "integer", "primaryKey": false, "notNull": false }, "photo_url": { "name": "photo_url", "type": "text", "primaryKey": false, "notNull": false }, "applies_to": { "name": "applies_to", "type": "text[]", "primaryKey": false, "notNull": true, "default": "'{}'" } }, "indexes": { "recipe_steps_recipe_idx": { "name": "recipe_steps_recipe_idx", "columns": [ { "expression": "recipe_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "recipe_steps_recipe_id_recipes_id_fk": { "name": "recipe_steps_recipe_id_recipes_id_fk", "tableFrom": "recipe_steps", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.recipe_variations": { "name": "recipe_variations", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "parent_recipe_id": { "name": "parent_recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "child_recipe_id": { "name": "child_recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "description": { "name": "description", "type": "text", "primaryKey": false, "notNull": false }, "ai_generated": { "name": "ai_generated", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "recipe_variations_parent_recipe_id_recipes_id_fk": { "name": "recipe_variations_parent_recipe_id_recipes_id_fk", "tableFrom": "recipe_variations", "tableTo": "recipes", "columnsFrom": [ "parent_recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "recipe_variations_child_recipe_id_recipes_id_fk": { "name": "recipe_variations_child_recipe_id_recipes_id_fk", "tableFrom": "recipe_variations", "tableTo": "recipes", "columnsFrom": [ "child_recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.recipes": { "name": "recipes", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "author_id": { "name": "author_id", "type": "text", "primaryKey": false, "notNull": true }, "title": { "name": "title", "type": "text", "primaryKey": false, "notNull": true }, "description": { "name": "description", "type": "text", "primaryKey": false, "notNull": false }, "base_servings": { "name": "base_servings", "type": "integer", "primaryKey": false, "notNull": true, "default": 4 }, "visibility": { "name": "visibility", "type": "visibility", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'private'" }, "source_url": { "name": "source_url", "type": "text", "primaryKey": false, "notNull": false }, "ai_generated": { "name": "ai_generated", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "ai_model": { "name": "ai_model", "type": "text", "primaryKey": false, "notNull": false }, "ai_prompt": { "name": "ai_prompt", "type": "text", "primaryKey": false, "notNull": false }, "language": { "name": "language", "type": "text", "primaryKey": false, "notNull": false }, "dietary_tags": { "name": "dietary_tags", "type": "jsonb", "primaryKey": false, "notNull": false, "default": "'{}'::jsonb" }, "dietary_verified": { "name": "dietary_verified", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "nutrition_data": { "name": "nutrition_data", "type": "jsonb", "primaryKey": false, "notNull": false }, "difficulty": { "name": "difficulty", "type": "difficulty", "typeSchema": "public", "primaryKey": false, "notNull": false }, "prep_mins": { "name": "prep_mins", "type": "integer", "primaryKey": false, "notNull": false }, "cook_mins": { "name": "cook_mins", "type": "integer", "primaryKey": false, "notNull": false }, "tags": { "name": "tags", "type": "text[]", "primaryKey": false, "notNull": true, "default": "'{}'" }, "is_batch_cook": { "name": "is_batch_cook", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "recipes_author_idx": { "name": "recipes_author_idx", "columns": [ { "expression": "author_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "recipes_visibility_idx": { "name": "recipes_visibility_idx", "columns": [ { "expression": "visibility", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "recipes_dietary_tags_gin": { "name": "recipes_dietary_tags_gin", "columns": [ { "expression": "dietary_tags", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "gin", "with": {} }, "recipes_batch_cook_idx": { "name": "recipes_batch_cook_idx", "columns": [ { "expression": "is_batch_cook", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "recipes_author_id_users_id_fk": { "name": "recipes_author_id_users_id_fk", "tableFrom": "recipes", "tableTo": "users", "columnsFrom": [ "author_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.user_allergens": { "name": "user_allergens", "schema": "", "columns": { "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "allergen_tag": { "name": "allergen_tag", "type": "text", "primaryKey": false, "notNull": true } }, "indexes": {}, "foreignKeys": { "user_allergens_user_id_users_id_fk": { "name": "user_allergens_user_id_users_id_fk", "tableFrom": "user_allergens", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.collection_favorites": { "name": "collection_favorites", "schema": "", "columns": { "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "collection_id": { "name": "collection_id", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "collection_favorites_collection_idx": { "name": "collection_favorites_collection_idx", "columns": [ { "expression": "collection_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "collection_favorites_user_collection_idx": { "name": "collection_favorites_user_collection_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "collection_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": true, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "collection_favorites_user_id_users_id_fk": { "name": "collection_favorites_user_id_users_id_fk", "tableFrom": "collection_favorites", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "collection_favorites_collection_id_collections_id_fk": { "name": "collection_favorites_collection_id_collections_id_fk", "tableFrom": "collection_favorites", "tableTo": "collections", "columnsFrom": [ "collection_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.collection_members": { "name": "collection_members", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "collection_id": { "name": "collection_id", "type": "text", "primaryKey": false, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "role": { "name": "role", "type": "collection_member_role", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'viewer'" }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "collection_members_user_idx": { "name": "collection_members_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "collection_members_collection_id_collections_id_fk": { "name": "collection_members_collection_id_collections_id_fk", "tableFrom": "collection_members", "tableTo": "collections", "columnsFrom": [ "collection_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "collection_members_user_id_users_id_fk": { "name": "collection_members_user_id_users_id_fk", "tableFrom": "collection_members", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.collection_recipes": { "name": "collection_recipes", "schema": "", "columns": { "collection_id": { "name": "collection_id", "type": "text", "primaryKey": false, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "added_at": { "name": "added_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "collection_recipes_collection_id_collections_id_fk": { "name": "collection_recipes_collection_id_collections_id_fk", "tableFrom": "collection_recipes", "tableTo": "collections", "columnsFrom": [ "collection_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "collection_recipes_recipe_id_recipes_id_fk": { "name": "collection_recipes_recipe_id_recipes_id_fk", "tableFrom": "collection_recipes", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.collections": { "name": "collections", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "name": { "name": "name", "type": "text", "primaryKey": false, "notNull": true }, "description": { "name": "description", "type": "text", "primaryKey": false, "notNull": false }, "is_public": { "name": "is_public", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "collections_user_idx": { "name": "collections_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "collections_user_id_users_id_fk": { "name": "collections_user_id_users_id_fk", "tableFrom": "collections", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.comment_reactions": { "name": "comment_reactions", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "comment_id": { "name": "comment_id", "type": "text", "primaryKey": false, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "type": { "name": "type", "type": "comment_reaction_type", "typeSchema": "public", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "comment_reactions_comment_idx": { "name": "comment_reactions_comment_idx", "columns": [ { "expression": "comment_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "comment_reactions_comment_id_comments_id_fk": { "name": "comment_reactions_comment_id_comments_id_fk", "tableFrom": "comment_reactions", "tableTo": "comments", "columnsFrom": [ "comment_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "comment_reactions_user_id_users_id_fk": { "name": "comment_reactions_user_id_users_id_fk", "tableFrom": "comment_reactions", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.comments": { "name": "comments", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "parent_id": { "name": "parent_id", "type": "text", "primaryKey": false, "notNull": false }, "content": { "name": "content", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "comments_recipe_idx": { "name": "comments_recipe_idx", "columns": [ { "expression": "recipe_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "comments_recipe_id_recipes_id_fk": { "name": "comments_recipe_id_recipes_id_fk", "tableFrom": "comments", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "comments_user_id_users_id_fk": { "name": "comments_user_id_users_id_fk", "tableFrom": "comments", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "comments_parent_id_comments_id_fk": { "name": "comments_parent_id_comments_id_fk", "tableFrom": "comments", "tableTo": "comments", "columnsFrom": [ "parent_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.cooking_history": { "name": "cooking_history", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "batch_dish_id": { "name": "batch_dish_id", "type": "text", "primaryKey": false, "notNull": false }, "cooked_at": { "name": "cooked_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "servings": { "name": "servings", "type": "integer", "primaryKey": false, "notNull": false }, "notes": { "name": "notes", "type": "text", "primaryKey": false, "notNull": false }, "expiry_reminder_sent_at": { "name": "expiry_reminder_sent_at", "type": "timestamp", "primaryKey": false, "notNull": false } }, "indexes": { "cooking_history_user_idx": { "name": "cooking_history_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "cooking_history_batch_dish_idx": { "name": "cooking_history_batch_dish_idx", "columns": [ { "expression": "batch_dish_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "cooking_history_user_id_users_id_fk": { "name": "cooking_history_user_id_users_id_fk", "tableFrom": "cooking_history", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "cooking_history_recipe_id_recipes_id_fk": { "name": "cooking_history_recipe_id_recipes_id_fk", "tableFrom": "cooking_history", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "cooking_history_batch_dish_id_recipe_batch_dishes_id_fk": { "name": "cooking_history_batch_dish_id_recipe_batch_dishes_id_fk", "tableFrom": "cooking_history", "tableTo": "recipe_batch_dishes", "columnsFrom": [ "batch_dish_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.favorites": { "name": "favorites", "schema": "", "columns": { "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "favorites_user_idx": { "name": "favorites_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "favorites_user_id_users_id_fk": { "name": "favorites_user_id_users_id_fk", "tableFrom": "favorites", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "favorites_recipe_id_recipes_id_fk": { "name": "favorites_recipe_id_recipes_id_fk", "tableFrom": "favorites", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.notifications": { "name": "notifications", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "type": { "name": "type", "type": "notification_type", "typeSchema": "public", "primaryKey": false, "notNull": true }, "actor_id": { "name": "actor_id", "type": "text", "primaryKey": false, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": false }, "comment_id": { "name": "comment_id", "type": "text", "primaryKey": false, "notNull": false }, "read": { "name": "read", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "notifications_user_idx": { "name": "notifications_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "created_at", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "notifications_user_unread_idx": { "name": "notifications_user_unread_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "read", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "notifications_user_id_users_id_fk": { "name": "notifications_user_id_users_id_fk", "tableFrom": "notifications", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "notifications_actor_id_users_id_fk": { "name": "notifications_actor_id_users_id_fk", "tableFrom": "notifications", "tableTo": "users", "columnsFrom": [ "actor_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "notifications_recipe_id_recipes_id_fk": { "name": "notifications_recipe_id_recipes_id_fk", "tableFrom": "notifications", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "notifications_comment_id_comments_id_fk": { "name": "notifications_comment_id_comments_id_fk", "tableFrom": "notifications", "tableTo": "comments", "columnsFrom": [ "comment_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.ratings": { "name": "ratings", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "score": { "name": "score", "type": "integer", "primaryKey": false, "notNull": true }, "review_text": { "name": "review_text", "type": "text", "primaryKey": false, "notNull": false }, "photo_key": { "name": "photo_key", "type": "text", "primaryKey": false, "notNull": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "ratings_user_idx": { "name": "ratings_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "ratings_recipe_idx": { "name": "ratings_recipe_idx", "columns": [ { "expression": "recipe_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "ratings_recipe_id_recipes_id_fk": { "name": "ratings_recipe_id_recipes_id_fk", "tableFrom": "ratings", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "ratings_user_id_users_id_fk": { "name": "ratings_user_id_users_id_fk", "tableFrom": "ratings", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.meal_plan_entries": { "name": "meal_plan_entries", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "meal_plan_id": { "name": "meal_plan_id", "type": "text", "primaryKey": false, "notNull": true }, "day": { "name": "day", "type": "weekday", "typeSchema": "public", "primaryKey": false, "notNull": true }, "meal_type": { "name": "meal_type", "type": "meal_type", "typeSchema": "public", "primaryKey": false, "notNull": true }, "recipe_id": { "name": "recipe_id", "type": "text", "primaryKey": false, "notNull": false }, "batch_dish_id": { "name": "batch_dish_id", "type": "text", "primaryKey": false, "notNull": false }, "servings": { "name": "servings", "type": "integer", "primaryKey": false, "notNull": true, "default": 2 }, "note": { "name": "note", "type": "text", "primaryKey": false, "notNull": false } }, "indexes": { "meal_plan_entries_plan_idx": { "name": "meal_plan_entries_plan_idx", "columns": [ { "expression": "meal_plan_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "meal_plan_entries_plan_day_meal_idx": { "name": "meal_plan_entries_plan_day_meal_idx", "columns": [ { "expression": "meal_plan_id", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "day", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "meal_type", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": true, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "meal_plan_entries_meal_plan_id_meal_plans_id_fk": { "name": "meal_plan_entries_meal_plan_id_meal_plans_id_fk", "tableFrom": "meal_plan_entries", "tableTo": "meal_plans", "columnsFrom": [ "meal_plan_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "meal_plan_entries_recipe_id_recipes_id_fk": { "name": "meal_plan_entries_recipe_id_recipes_id_fk", "tableFrom": "meal_plan_entries", "tableTo": "recipes", "columnsFrom": [ "recipe_id" ], "columnsTo": [ "id" ], "onDelete": "set null", "onUpdate": "no action" }, "meal_plan_entries_batch_dish_id_recipe_batch_dishes_id_fk": { "name": "meal_plan_entries_batch_dish_id_recipe_batch_dishes_id_fk", "tableFrom": "meal_plan_entries", "tableTo": "recipe_batch_dishes", "columnsFrom": [ "batch_dish_id" ], "columnsTo": [ "id" ], "onDelete": "set null", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.meal_plan_members": { "name": "meal_plan_members", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "meal_plan_id": { "name": "meal_plan_id", "type": "text", "primaryKey": false, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "role": { "name": "role", "type": "collection_member_role", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'viewer'" }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "meal_plan_members_plan_idx": { "name": "meal_plan_members_plan_idx", "columns": [ { "expression": "meal_plan_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "meal_plan_members_user_idx": { "name": "meal_plan_members_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "meal_plan_members_meal_plan_id_meal_plans_id_fk": { "name": "meal_plan_members_meal_plan_id_meal_plans_id_fk", "tableFrom": "meal_plan_members", "tableTo": "meal_plans", "columnsFrom": [ "meal_plan_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "meal_plan_members_user_id_users_id_fk": { "name": "meal_plan_members_user_id_users_id_fk", "tableFrom": "meal_plan_members", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.meal_plans": { "name": "meal_plans", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "week_start": { "name": "week_start", "type": "date", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "meal_plans_user_idx": { "name": "meal_plans_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "meal_plans_user_week_idx": { "name": "meal_plans_user_week_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "week_start", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": true, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "meal_plans_user_id_users_id_fk": { "name": "meal_plans_user_id_users_id_fk", "tableFrom": "meal_plans", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.pantry_items": { "name": "pantry_items", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "ingredient_id": { "name": "ingredient_id", "type": "text", "primaryKey": false, "notNull": false }, "raw_name": { "name": "raw_name", "type": "text", "primaryKey": false, "notNull": true }, "quantity": { "name": "quantity", "type": "numeric(10, 4)", "primaryKey": false, "notNull": false }, "unit": { "name": "unit", "type": "text", "primaryKey": false, "notNull": false }, "expires_at": { "name": "expires_at", "type": "timestamp", "primaryKey": false, "notNull": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "pantry_items_user_idx": { "name": "pantry_items_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "pantry_items_user_id_users_id_fk": { "name": "pantry_items_user_id_users_id_fk", "tableFrom": "pantry_items", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "pantry_items_ingredient_id_ingredients_id_fk": { "name": "pantry_items_ingredient_id_ingredients_id_fk", "tableFrom": "pantry_items", "tableTo": "ingredients", "columnsFrom": [ "ingredient_id" ], "columnsTo": [ "id" ], "onDelete": "set null", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.shopping_list_items": { "name": "shopping_list_items", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "list_id": { "name": "list_id", "type": "text", "primaryKey": false, "notNull": true }, "ingredient_id": { "name": "ingredient_id", "type": "text", "primaryKey": false, "notNull": false }, "raw_name": { "name": "raw_name", "type": "text", "primaryKey": false, "notNull": true }, "quantity": { "name": "quantity", "type": "numeric(10, 4)", "primaryKey": false, "notNull": false }, "unit": { "name": "unit", "type": "text", "primaryKey": false, "notNull": false }, "aisle": { "name": "aisle", "type": "text", "primaryKey": false, "notNull": false }, "checked": { "name": "checked", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "in_pantry": { "name": "in_pantry", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "sort_order": { "name": "sort_order", "type": "integer", "primaryKey": false, "notNull": true, "default": 0 } }, "indexes": {}, "foreignKeys": { "shopping_list_items_list_id_shopping_lists_id_fk": { "name": "shopping_list_items_list_id_shopping_lists_id_fk", "tableFrom": "shopping_list_items", "tableTo": "shopping_lists", "columnsFrom": [ "list_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "shopping_list_items_ingredient_id_ingredients_id_fk": { "name": "shopping_list_items_ingredient_id_ingredients_id_fk", "tableFrom": "shopping_list_items", "tableTo": "ingredients", "columnsFrom": [ "ingredient_id" ], "columnsTo": [ "id" ], "onDelete": "set null", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.shopping_list_members": { "name": "shopping_list_members", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "list_id": { "name": "list_id", "type": "text", "primaryKey": false, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "role": { "name": "role", "type": "collection_member_role", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'viewer'" }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "shopping_list_members_list_idx": { "name": "shopping_list_members_list_idx", "columns": [ { "expression": "list_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} }, "shopping_list_members_user_idx": { "name": "shopping_list_members_user_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "shopping_list_members_list_id_shopping_lists_id_fk": { "name": "shopping_list_members_list_id_shopping_lists_id_fk", "tableFrom": "shopping_list_members", "tableTo": "shopping_lists", "columnsFrom": [ "list_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "shopping_list_members_user_id_users_id_fk": { "name": "shopping_list_members_user_id_users_id_fk", "tableFrom": "shopping_list_members", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.shopping_lists": { "name": "shopping_lists", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": false }, "name": { "name": "name", "type": "text", "primaryKey": false, "notNull": true }, "is_public": { "name": "is_public", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "generated_at": { "name": "generated_at", "type": "timestamp", "primaryKey": false, "notNull": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "shopping_lists_user_id_users_id_fk": { "name": "shopping_lists_user_id_users_id_fk", "tableFrom": "shopping_lists", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.audit_logs": { "name": "audit_logs", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": false }, "action": { "name": "action", "type": "text", "primaryKey": false, "notNull": true }, "target_type": { "name": "target_type", "type": "text", "primaryKey": false, "notNull": false }, "target_id": { "name": "target_id", "type": "text", "primaryKey": false, "notNull": false }, "metadata": { "name": "metadata", "type": "text", "primaryKey": false, "notNull": false }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "audit_logs_created_idx": { "name": "audit_logs_created_idx", "columns": [ { "expression": "created_at", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "audit_logs_user_id_users_id_fk": { "name": "audit_logs_user_id_users_id_fk", "tableFrom": "audit_logs", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "set null", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.invites": { "name": "invites", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "token": { "name": "token", "type": "text", "primaryKey": false, "notNull": true }, "email": { "name": "email", "type": "text", "primaryKey": false, "notNull": false }, "role": { "name": "role", "type": "user_role", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'user'" }, "tier": { "name": "tier", "type": "tier", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'free'" }, "created_by_id": { "name": "created_by_id", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "expires_at": { "name": "expires_at", "type": "timestamp", "primaryKey": false, "notNull": false }, "used_at": { "name": "used_at", "type": "timestamp", "primaryKey": false, "notNull": false }, "used_by_id": { "name": "used_by_id", "type": "text", "primaryKey": false, "notNull": false } }, "indexes": {}, "foreignKeys": { "invites_created_by_id_users_id_fk": { "name": "invites_created_by_id_users_id_fk", "tableFrom": "invites", "tableTo": "users", "columnsFrom": [ "created_by_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "invites_used_by_id_users_id_fk": { "name": "invites_used_by_id_users_id_fk", "tableFrom": "invites", "tableTo": "users", "columnsFrom": [ "used_by_id" ], "columnsTo": [ "id" ], "onDelete": "set null", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "invites_token_uniq": { "name": "invites_token_uniq", "nullsNotDistinct": false, "columns": [ "token" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.reports": { "name": "reports", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "reporter_id": { "name": "reporter_id", "type": "text", "primaryKey": false, "notNull": true }, "target_type": { "name": "target_type", "type": "report_target_type", "typeSchema": "public", "primaryKey": false, "notNull": true }, "target_id": { "name": "target_id", "type": "text", "primaryKey": false, "notNull": true }, "reason": { "name": "reason", "type": "text", "primaryKey": false, "notNull": true }, "status": { "name": "status", "type": "report_status", "typeSchema": "public", "primaryKey": false, "notNull": true, "default": "'pending'" }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "reviewed_by_id": { "name": "reviewed_by_id", "type": "text", "primaryKey": false, "notNull": false }, "reviewed_at": { "name": "reviewed_at", "type": "timestamp", "primaryKey": false, "notNull": false } }, "indexes": { "reports_status_idx": { "name": "reports_status_idx", "columns": [ { "expression": "status", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "created_at", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "reports_reporter_id_users_id_fk": { "name": "reports_reporter_id_users_id_fk", "tableFrom": "reports", "tableTo": "users", "columnsFrom": [ "reporter_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "reports_reviewed_by_id_users_id_fk": { "name": "reports_reviewed_by_id_users_id_fk", "tableFrom": "reports", "tableTo": "users", "columnsFrom": [ "reviewed_by_id" ], "columnsTo": [ "id" ], "onDelete": "set null", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.site_settings": { "name": "site_settings", "schema": "", "columns": { "key": { "name": "key", "type": "text", "primaryKey": true, "notNull": true }, "value": { "name": "value", "type": "text", "primaryKey": false, "notNull": false }, "is_secret": { "name": "is_secret", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "updated_at": { "name": "updated_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "updated_by_id": { "name": "updated_by_id", "type": "text", "primaryKey": false, "notNull": false } }, "indexes": {}, "foreignKeys": { "site_settings_updated_by_id_users_id_fk": { "name": "site_settings_updated_by_id_users_id_fk", "tableFrom": "site_settings", "tableTo": "users", "columnsFrom": [ "updated_by_id" ], "columnsTo": [ "id" ], "onDelete": "set null", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.tier_definitions": { "name": "tier_definitions", "schema": "", "columns": { "tier": { "name": "tier", "type": "tier", "typeSchema": "public", "primaryKey": true, "notNull": true }, "max_recipes": { "name": "max_recipes", "type": "integer", "primaryKey": false, "notNull": true }, "ai_calls_per_month": { "name": "ai_calls_per_month", "type": "integer", "primaryKey": false, "notNull": true }, "storage_mb": { "name": "storage_mb", "type": "integer", "primaryKey": false, "notNull": true }, "max_public_recipes": { "name": "max_public_recipes", "type": "integer", "primaryKey": false, "notNull": true } }, "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.user_usage": { "name": "user_usage", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "month": { "name": "month", "type": "text", "primaryKey": false, "notNull": true }, "ai_calls_used": { "name": "ai_calls_used", "type": "integer", "primaryKey": false, "notNull": true, "default": 0 }, "recipe_count": { "name": "recipe_count", "type": "integer", "primaryKey": false, "notNull": true, "default": 0 }, "storage_used_mb": { "name": "storage_used_mb", "type": "integer", "primaryKey": false, "notNull": true, "default": 0 } }, "indexes": { "user_usage_user_month_idx": { "name": "user_usage_user_month_idx", "columns": [ { "expression": "user_id", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "month", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "user_usage_user_id_users_id_fk": { "name": "user_usage_user_id_users_id_fk", "tableFrom": "user_usage", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "user_usage_user_month_uniq": { "name": "user_usage_user_month_uniq", "nullsNotDistinct": false, "columns": [ "user_id", "month" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.webhook_deliveries": { "name": "webhook_deliveries", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "webhook_id": { "name": "webhook_id", "type": "text", "primaryKey": false, "notNull": true }, "event": { "name": "event", "type": "text", "primaryKey": false, "notNull": true }, "payload": { "name": "payload", "type": "jsonb", "primaryKey": false, "notNull": false }, "status_code": { "name": "status_code", "type": "integer", "primaryKey": false, "notNull": false }, "success": { "name": "success", "type": "boolean", "primaryKey": false, "notNull": true, "default": false }, "attempts": { "name": "attempts", "type": "integer", "primaryKey": false, "notNull": true, "default": 0 }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "webhook_deliveries_webhook_id_webhooks_id_fk": { "name": "webhook_deliveries_webhook_id_webhooks_id_fk", "tableFrom": "webhook_deliveries", "tableTo": "webhooks", "columnsFrom": [ "webhook_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.webhooks": { "name": "webhooks", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "url": { "name": "url", "type": "text", "primaryKey": false, "notNull": true }, "events": { "name": "events", "type": "text[]", "primaryKey": false, "notNull": true, "default": "'{}'" }, "secret": { "name": "secret", "type": "text", "primaryKey": false, "notNull": true }, "active": { "name": "active", "type": "boolean", "primaryKey": false, "notNull": true, "default": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "webhooks_user_id_users_id_fk": { "name": "webhooks_user_id_users_id_fk", "tableFrom": "webhooks", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.conversation_reads": { "name": "conversation_reads", "schema": "", "columns": { "conversation_id": { "name": "conversation_id", "type": "text", "primaryKey": false, "notNull": true }, "user_id": { "name": "user_id", "type": "text", "primaryKey": false, "notNull": true }, "last_read_at": { "name": "last_read_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": { "conversation_reads_conversation_id_conversations_id_fk": { "name": "conversation_reads_conversation_id_conversations_id_fk", "tableFrom": "conversation_reads", "tableTo": "conversations", "columnsFrom": [ "conversation_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "conversation_reads_user_id_users_id_fk": { "name": "conversation_reads_user_id_users_id_fk", "tableFrom": "conversation_reads", "tableTo": "users", "columnsFrom": [ "user_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": { "conversation_reads_conversation_id_user_id_pk": { "name": "conversation_reads_conversation_id_user_id_pk", "columns": [ "conversation_id", "user_id" ] } }, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.conversations": { "name": "conversations", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "user_a_id": { "name": "user_a_id", "type": "text", "primaryKey": false, "notNull": true }, "user_b_id": { "name": "user_b_id", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" }, "last_message_at": { "name": "last_message_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "conversations_last_message_idx": { "name": "conversations_last_message_idx", "columns": [ { "expression": "last_message_at", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "conversations_user_a_id_users_id_fk": { "name": "conversations_user_a_id_users_id_fk", "tableFrom": "conversations", "tableTo": "users", "columnsFrom": [ "user_a_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "conversations_user_b_id_users_id_fk": { "name": "conversations_user_b_id_users_id_fk", "tableFrom": "conversations", "tableTo": "users", "columnsFrom": [ "user_b_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "conversations_pair_uniq": { "name": "conversations_pair_uniq", "nullsNotDistinct": false, "columns": [ "user_a_id", "user_b_id" ] } }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.messages": { "name": "messages", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "conversation_id": { "name": "conversation_id", "type": "text", "primaryKey": false, "notNull": true }, "sender_id": { "name": "sender_id", "type": "text", "primaryKey": false, "notNull": true }, "content": { "name": "content", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": { "messages_conversation_idx": { "name": "messages_conversation_idx", "columns": [ { "expression": "conversation_id", "isExpression": false, "asc": true, "nulls": "last" }, { "expression": "created_at", "isExpression": false, "asc": true, "nulls": "last" } ], "isUnique": false, "concurrently": false, "method": "btree", "with": {} } }, "foreignKeys": { "messages_conversation_id_conversations_id_fk": { "name": "messages_conversation_id_conversations_id_fk", "tableFrom": "messages", "tableTo": "conversations", "columnsFrom": [ "conversation_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" }, "messages_sender_id_users_id_fk": { "name": "messages_sender_id_users_id_fk", "tableFrom": "messages", "tableTo": "users", "columnsFrom": [ "sender_id" ], "columnsTo": [ "id" ], "onDelete": "cascade", "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false }, "public.processed_stripe_events": { "name": "processed_stripe_events", "schema": "", "columns": { "id": { "name": "id", "type": "text", "primaryKey": true, "notNull": true }, "type": { "name": "type", "type": "text", "primaryKey": false, "notNull": true }, "created_at": { "name": "created_at", "type": "timestamp", "primaryKey": false, "notNull": true, "default": "now()" } }, "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, "uniqueConstraints": {}, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false } }, "enums": { "public.tier": { "name": "tier", "schema": "public", "values": [ "free", "pro" ] }, "public.unit_pref": { "name": "unit_pref", "schema": "public", "values": [ "metric", "imperial" ] }, "public.user_role": { "name": "user_role", "schema": "public", "values": [ "user", "moderator", "admin" ] }, "public.difficulty": { "name": "difficulty", "schema": "public", "values": [ "easy", "medium", "hard" ] }, "public.visibility": { "name": "visibility", "schema": "public", "values": [ "private", "unlisted", "public" ] }, "public.collection_member_role": { "name": "collection_member_role", "schema": "public", "values": [ "viewer", "editor" ] }, "public.comment_reaction_type": { "name": "comment_reaction_type", "schema": "public", "values": [ "like", "love", "laugh", "wow", "sad", "fire" ] }, "public.notification_type": { "name": "notification_type", "schema": "public", "values": [ "follow", "comment", "reply", "reaction", "rating", "mention" ] }, "public.meal_type": { "name": "meal_type", "schema": "public", "values": [ "breakfast", "lunch", "dinner", "snack" ] }, "public.weekday": { "name": "weekday", "schema": "public", "values": [ "mon", "tue", "wed", "thu", "fri", "sat", "sun" ] }, "public.report_status": { "name": "report_status", "schema": "public", "values": [ "pending", "reviewed", "dismissed" ] }, "public.report_target_type": { "name": "report_target_type", "schema": "public", "values": [ "recipe", "comment", "user" ] } }, "schemas": {}, "sequences": {}, "roles": {}, "policies": {}, "views": {}, "_meta": { "columns": {}, "schemas": {}, "tables": {} } }