Files
linkder/packages/db/drizzle/meta/0000_snapshot.json
T
serfowiandClaude Opus 5 19623bcccb M0: foundation — monorepo, PostGIS schema, deck query, app shell
Greenfield scaffold for Linkder, a swipe-to-hire marketplace for local
professional services.

- pnpm/turbo monorepo: apps/web, packages/{shared,db}
- Postgres 16 + PostGIS via docker compose (ports 5442/6389 to avoid
  clashing with other local stacks)
- Drizzle schema, 23 tables, geography(Point,4326) with GiST indexes
- Domain core in packages/shared: integer-cent money, status transition
  graphs, deck ranking weights, cancellation policy — 46 unit tests
- Deck query: filtering in Postgres on the GiST index, ranking in JS so
  the weights stay tunable — 18 integration tests against a seeded DB
- Deterministic seed placing pros at known distances, including three
  that must NOT appear on a deck (out of radius, unverified, away)
- Next.js 15 app shell with a working swipe deck
- CI: typecheck, lint, test, build against live postgres+redis

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 13:32:35 -04:00

2824 lines
71 KiB
JSON

{
"id": "9da9b63e-a29c-425d-806f-357f6f04e2e5",
"prevId": "00000000-0000-0000-0000-000000000000",
"version": "7",
"dialect": "postgresql",
"tables": {
"public.accounts": {
"name": "accounts",
"schema": "",
"columns": {
"user_id": {
"name": "user_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"type": {
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"provider": {
"name": "provider",
"type": "text",
"primaryKey": false,
"notNull": true
},
"provider_account_id": {
"name": "provider_account_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"refresh_token": {
"name": "refresh_token",
"type": "text",
"primaryKey": false,
"notNull": false
},
"access_token": {
"name": "access_token",
"type": "text",
"primaryKey": false,
"notNull": false
},
"expires_at": {
"name": "expires_at",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"token_type": {
"name": "token_type",
"type": "text",
"primaryKey": false,
"notNull": false
},
"scope": {
"name": "scope",
"type": "text",
"primaryKey": false,
"notNull": false
},
"id_token": {
"name": "id_token",
"type": "text",
"primaryKey": false,
"notNull": false
},
"session_state": {
"name": "session_state",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"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": {
"accounts_provider_provider_account_id_pk": {
"name": "accounts_provider_provider_account_id_pk",
"columns": [
"provider",
"provider_account_id"
]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.phone_otps": {
"name": "phone_otps",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"phone": {
"name": "phone",
"type": "text",
"primaryKey": false,
"notNull": true
},
"code_hash": {
"name": "code_hash",
"type": "text",
"primaryKey": false,
"notNull": true
},
"attempts": {
"name": "attempts",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"consumed": {
"name": "consumed",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"expires_at": {
"name": "expires_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"phone_otps_phone_idx": {
"name": "phone_otps_phone_idx",
"columns": [
{
"expression": "phone",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "expires_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.sessions": {
"name": "sessions",
"schema": "",
"columns": {
"session_token": {
"name": "session_token",
"type": "text",
"primaryKey": true,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"expires": {
"name": "expires",
"type": "timestamp with time zone",
"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": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.users": {
"name": "users",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": false
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": false
},
"email_verified": {
"name": "email_verified",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"phone": {
"name": "phone",
"type": "text",
"primaryKey": false,
"notNull": false
},
"phone_verified": {
"name": "phone_verified",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"image": {
"name": "image",
"type": "text",
"primaryKey": false,
"notNull": false
},
"role": {
"name": "role",
"type": "user_role",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'client'"
},
"banned_at": {
"name": "banned_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"last_active_at": {
"name": "last_active_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false,
"default": "now()"
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"users_role_idx": {
"name": "users_role_idx",
"columns": [
{
"expression": "role",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"users_phone_idx": {
"name": "users_phone_idx",
"columns": [
{
"expression": "phone",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"users_email_unique": {
"name": "users_email_unique",
"nullsNotDistinct": false,
"columns": [
"email"
]
},
"users_phone_unique": {
"name": "users_phone_unique",
"nullsNotDistinct": false,
"columns": [
"phone"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.verification_tokens": {
"name": "verification_tokens",
"schema": "",
"columns": {
"identifier": {
"name": "identifier",
"type": "text",
"primaryKey": false,
"notNull": true
},
"token": {
"name": "token",
"type": "text",
"primaryKey": false,
"notNull": true
},
"expires": {
"name": "expires",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"verification_tokens_identifier_token_pk": {
"name": "verification_tokens_identifier_token_pk",
"columns": [
"identifier",
"token"
]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.categories": {
"name": "categories",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"slug": {
"name": "slug",
"type": "text",
"primaryKey": false,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"icon": {
"name": "icon",
"type": "text",
"primaryKey": false,
"notNull": false
},
"position": {
"name": "position",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"is_active": {
"name": "is_active",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"categories_slug_unique": {
"name": "categories_slug_unique",
"nullsNotDistinct": false,
"columns": [
"slug"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.credentials": {
"name": "credentials",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"pro_id": {
"name": "pro_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"kind": {
"name": "kind",
"type": "credential_kind",
"typeSchema": "public",
"primaryKey": false,
"notNull": true
},
"file_url": {
"name": "file_url",
"type": "text",
"primaryKey": false,
"notNull": true
},
"issuer": {
"name": "issuer",
"type": "text",
"primaryKey": false,
"notNull": false
},
"expires_at": {
"name": "expires_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"review_status": {
"name": "review_status",
"type": "review_status",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'pending'"
},
"reviewed_by": {
"name": "reviewed_by",
"type": "uuid",
"primaryKey": false,
"notNull": false
},
"reviewed_at": {
"name": "reviewed_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"review_notes": {
"name": "review_notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"credentials_pro_idx": {
"name": "credentials_pro_idx",
"columns": [
{
"expression": "pro_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"credentials_review_idx": {
"name": "credentials_review_idx",
"columns": [
{
"expression": "review_status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"credentials_expiry_idx": {
"name": "credentials_expiry_idx",
"columns": [
{
"expression": "expires_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"credentials_pro_id_pro_profiles_user_id_fk": {
"name": "credentials_pro_id_pro_profiles_user_id_fk",
"tableFrom": "credentials",
"tableTo": "pro_profiles",
"columnsFrom": [
"pro_id"
],
"columnsTo": [
"user_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"credentials_reviewed_by_users_id_fk": {
"name": "credentials_reviewed_by_users_id_fk",
"tableFrom": "credentials",
"tableTo": "users",
"columnsFrom": [
"reviewed_by"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.pro_availability": {
"name": "pro_availability",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"pro_id": {
"name": "pro_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"weekday": {
"name": "weekday",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"start_minute": {
"name": "start_minute",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"end_minute": {
"name": "end_minute",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"pro_availability_pro_idx": {
"name": "pro_availability_pro_idx",
"columns": [
{
"expression": "pro_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "weekday",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"pro_availability_pro_id_pro_profiles_user_id_fk": {
"name": "pro_availability_pro_id_pro_profiles_user_id_fk",
"tableFrom": "pro_availability",
"tableTo": "pro_profiles",
"columnsFrom": [
"pro_id"
],
"columnsTo": [
"user_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.pro_categories": {
"name": "pro_categories",
"schema": "",
"columns": {
"pro_id": {
"name": "pro_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"category_id": {
"name": "category_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"pro_categories_category_idx": {
"name": "pro_categories_category_idx",
"columns": [
{
"expression": "category_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"pro_categories_pro_id_pro_profiles_user_id_fk": {
"name": "pro_categories_pro_id_pro_profiles_user_id_fk",
"tableFrom": "pro_categories",
"tableTo": "pro_profiles",
"columnsFrom": [
"pro_id"
],
"columnsTo": [
"user_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"pro_categories_category_id_categories_id_fk": {
"name": "pro_categories_category_id_categories_id_fk",
"tableFrom": "pro_categories",
"tableTo": "categories",
"columnsFrom": [
"category_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"pro_categories_pro_id_category_id_pk": {
"name": "pro_categories_pro_id_category_id_pk",
"columns": [
"pro_id",
"category_id"
]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.pro_media": {
"name": "pro_media",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"pro_id": {
"name": "pro_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"url": {
"name": "url",
"type": "text",
"primaryKey": false,
"notNull": true
},
"kind": {
"name": "kind",
"type": "media_kind",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'photo'"
},
"position": {
"name": "position",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"pro_media_pro_idx": {
"name": "pro_media_pro_idx",
"columns": [
{
"expression": "pro_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "position",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"pro_media_pro_id_pro_profiles_user_id_fk": {
"name": "pro_media_pro_id_pro_profiles_user_id_fk",
"tableFrom": "pro_media",
"tableTo": "pro_profiles",
"columnsFrom": [
"pro_id"
],
"columnsTo": [
"user_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.pro_profiles": {
"name": "pro_profiles",
"schema": "",
"columns": {
"user_id": {
"name": "user_id",
"type": "uuid",
"primaryKey": true,
"notNull": true
},
"headline": {
"name": "headline",
"type": "text",
"primaryKey": false,
"notNull": true
},
"bio": {
"name": "bio",
"type": "text",
"primaryKey": false,
"notNull": true
},
"hourly_rate_cents": {
"name": "hourly_rate_cents",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"years_experience": {
"name": "years_experience",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"base_location": {
"name": "base_location",
"type": "geography(Point,4326)",
"primaryKey": false,
"notNull": true
},
"service_radius_m": {
"name": "service_radius_m",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 15000
},
"verification_status": {
"name": "verification_status",
"type": "verification_status",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'draft'"
},
"verified_at": {
"name": "verified_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"suspended_reason": {
"name": "suspended_reason",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_accepting_jobs": {
"name": "is_accepting_jobs",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"rating_avg": {
"name": "rating_avg",
"type": "numeric(3, 2)",
"primaryKey": false,
"notNull": false
},
"rating_count": {
"name": "rating_count",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"completed_jobs": {
"name": "completed_jobs",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"response_rate": {
"name": "response_rate",
"type": "numeric(4, 3)",
"primaryKey": false,
"notNull": false
},
"avg_response_minutes": {
"name": "avg_response_minutes",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"stripe_account_id": {
"name": "stripe_account_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"stripe_payouts_enabled": {
"name": "stripe_payouts_enabled",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"pro_profiles_location_gist": {
"name": "pro_profiles_location_gist",
"columns": [
{
"expression": "base_location",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "gist",
"with": {}
},
"pro_profiles_deck_idx": {
"name": "pro_profiles_deck_idx",
"columns": [
{
"expression": "verification_status",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "is_accepting_jobs",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"pro_profiles\".\"verification_status\" = 'verified' AND \"pro_profiles\".\"is_accepting_jobs\" = true",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"pro_profiles_user_id_users_id_fk": {
"name": "pro_profiles_user_id_users_id_fk",
"tableFrom": "pro_profiles",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"pro_profiles_stripe_account_id_unique": {
"name": "pro_profiles_stripe_account_id_unique",
"nullsNotDistinct": false,
"columns": [
"stripe_account_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.verification_sessions": {
"name": "verification_sessions",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"pro_id": {
"name": "pro_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"provider": {
"name": "provider",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'didit'"
},
"external_id": {
"name": "external_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'pending'"
},
"decision": {
"name": "decision",
"type": "text",
"primaryKey": false,
"notNull": false
},
"raw_payload": {
"name": "raw_payload",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"completed_at": {
"name": "completed_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"verification_sessions_pro_idx": {
"name": "verification_sessions_pro_idx",
"columns": [
{
"expression": "pro_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"verification_sessions_pro_id_pro_profiles_user_id_fk": {
"name": "verification_sessions_pro_id_pro_profiles_user_id_fk",
"tableFrom": "verification_sessions",
"tableTo": "pro_profiles",
"columnsFrom": [
"pro_id"
],
"columnsTo": [
"user_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"verification_sessions_external_id_unique": {
"name": "verification_sessions_external_id_unique",
"nullsNotDistinct": false,
"columns": [
"external_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.jobs": {
"name": "jobs",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"client_id": {
"name": "client_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"category_id": {
"name": "category_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"title": {
"name": "title",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"photos": {
"name": "photos",
"type": "text[]",
"primaryKey": false,
"notNull": true,
"default": "'{}'::text[]"
},
"urgency": {
"name": "urgency",
"type": "urgency",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'flexible'"
},
"budget_min_cents": {
"name": "budget_min_cents",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"budget_max_cents": {
"name": "budget_max_cents",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"location": {
"name": "location",
"type": "geography(Point,4326)",
"primaryKey": false,
"notNull": true
},
"address_text": {
"name": "address_text",
"type": "text",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "job_status",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'open'"
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"jobs_location_gist": {
"name": "jobs_location_gist",
"columns": [
{
"expression": "location",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "gist",
"with": {}
},
"jobs_client_idx": {
"name": "jobs_client_idx",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"jobs_open_idx": {
"name": "jobs_open_idx",
"columns": [
{
"expression": "category_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"jobs\".\"status\" = 'open'",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"jobs_client_id_users_id_fk": {
"name": "jobs_client_id_users_id_fk",
"tableFrom": "jobs",
"tableTo": "users",
"columnsFrom": [
"client_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"jobs_category_id_categories_id_fk": {
"name": "jobs_category_id_categories_id_fk",
"tableFrom": "jobs",
"tableTo": "categories",
"columnsFrom": [
"category_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.matches": {
"name": "matches",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"request_id": {
"name": "request_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"job_id": {
"name": "job_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"pro_id": {
"name": "pro_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"last_message_at": {
"name": "last_message_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"matches_pro_idx": {
"name": "matches_pro_idx",
"columns": [
{
"expression": "pro_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "last_message_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"matches_client_idx": {
"name": "matches_client_idx",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "last_message_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"matches_job_idx": {
"name": "matches_job_idx",
"columns": [
{
"expression": "job_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"matches_request_id_requests_id_fk": {
"name": "matches_request_id_requests_id_fk",
"tableFrom": "matches",
"tableTo": "requests",
"columnsFrom": [
"request_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"matches_job_id_jobs_id_fk": {
"name": "matches_job_id_jobs_id_fk",
"tableFrom": "matches",
"tableTo": "jobs",
"columnsFrom": [
"job_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"matches_pro_id_pro_profiles_user_id_fk": {
"name": "matches_pro_id_pro_profiles_user_id_fk",
"tableFrom": "matches",
"tableTo": "pro_profiles",
"columnsFrom": [
"pro_id"
],
"columnsTo": [
"user_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"matches_client_id_users_id_fk": {
"name": "matches_client_id_users_id_fk",
"tableFrom": "matches",
"tableTo": "users",
"columnsFrom": [
"client_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"matches_request_id_unique": {
"name": "matches_request_id_unique",
"nullsNotDistinct": false,
"columns": [
"request_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.requests": {
"name": "requests",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"job_id": {
"name": "job_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"pro_id": {
"name": "pro_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "request_status",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'pending'"
},
"expires_at": {
"name": "expires_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"responded_at": {
"name": "responded_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"requests_pending_idx": {
"name": "requests_pending_idx",
"columns": [
{
"expression": "pro_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "expires_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"requests\".\"status\" = 'pending'",
"concurrently": false,
"method": "btree",
"with": {}
},
"requests_job_idx": {
"name": "requests_job_idx",
"columns": [
{
"expression": "job_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"requests_job_id_jobs_id_fk": {
"name": "requests_job_id_jobs_id_fk",
"tableFrom": "requests",
"tableTo": "jobs",
"columnsFrom": [
"job_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"requests_pro_id_pro_profiles_user_id_fk": {
"name": "requests_pro_id_pro_profiles_user_id_fk",
"tableFrom": "requests",
"tableTo": "pro_profiles",
"columnsFrom": [
"pro_id"
],
"columnsTo": [
"user_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"requests_job_pro_unique": {
"name": "requests_job_pro_unique",
"nullsNotDistinct": false,
"columns": [
"job_id",
"pro_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.swipes": {
"name": "swipes",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"job_id": {
"name": "job_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"pro_id": {
"name": "pro_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"direction": {
"name": "direction",
"type": "swipe_direction",
"typeSchema": "public",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"swipes_job_idx": {
"name": "swipes_job_idx",
"columns": [
{
"expression": "job_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"swipes_job_id_jobs_id_fk": {
"name": "swipes_job_id_jobs_id_fk",
"tableFrom": "swipes",
"tableTo": "jobs",
"columnsFrom": [
"job_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"swipes_pro_id_pro_profiles_user_id_fk": {
"name": "swipes_pro_id_pro_profiles_user_id_fk",
"tableFrom": "swipes",
"tableTo": "pro_profiles",
"columnsFrom": [
"pro_id"
],
"columnsTo": [
"user_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"swipes_job_pro_unique": {
"name": "swipes_job_pro_unique",
"nullsNotDistinct": false,
"columns": [
"job_id",
"pro_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.messages": {
"name": "messages",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"match_id": {
"name": "match_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"sender_id": {
"name": "sender_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"body": {
"name": "body",
"type": "text",
"primaryKey": false,
"notNull": true
},
"attachments": {
"name": "attachments",
"type": "text[]",
"primaryKey": false,
"notNull": true,
"default": "'{}'::text[]"
},
"read_at": {
"name": "read_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"messages_match_idx": {
"name": "messages_match_idx",
"columns": [
{
"expression": "match_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"messages_unread_idx": {
"name": "messages_unread_idx",
"columns": [
{
"expression": "match_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "sender_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"messages\".\"read_at\" IS NULL",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"messages_match_id_matches_id_fk": {
"name": "messages_match_id_matches_id_fk",
"tableFrom": "messages",
"tableTo": "matches",
"columnsFrom": [
"match_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.bookings": {
"name": "bookings",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"match_id": {
"name": "match_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"quote_id": {
"name": "quote_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"scheduled_start": {
"name": "scheduled_start",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"scheduled_end": {
"name": "scheduled_end",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "booking_status",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'scheduled'"
},
"pro_completed_at": {
"name": "pro_completed_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"client_confirmed_at": {
"name": "client_confirmed_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"cancelled_at": {
"name": "cancelled_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"cancelled_by": {
"name": "cancelled_by",
"type": "uuid",
"primaryKey": false,
"notNull": false
},
"cancellation_reason": {
"name": "cancellation_reason",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"bookings_match_idx": {
"name": "bookings_match_idx",
"columns": [
{
"expression": "match_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"bookings_status_idx": {
"name": "bookings_status_idx",
"columns": [
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "pro_completed_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"bookings_schedule_idx": {
"name": "bookings_schedule_idx",
"columns": [
{
"expression": "scheduled_start",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"bookings_match_id_matches_id_fk": {
"name": "bookings_match_id_matches_id_fk",
"tableFrom": "bookings",
"tableTo": "matches",
"columnsFrom": [
"match_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"bookings_quote_id_quotes_id_fk": {
"name": "bookings_quote_id_quotes_id_fk",
"tableFrom": "bookings",
"tableTo": "quotes",
"columnsFrom": [
"quote_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"bookings_cancelled_by_users_id_fk": {
"name": "bookings_cancelled_by_users_id_fk",
"tableFrom": "bookings",
"tableTo": "users",
"columnsFrom": [
"cancelled_by"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.payments": {
"name": "payments",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"booking_id": {
"name": "booking_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"stripe_payment_intent_id": {
"name": "stripe_payment_intent_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"stripe_transfer_id": {
"name": "stripe_transfer_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"stripe_refund_id": {
"name": "stripe_refund_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"amount_cents": {
"name": "amount_cents",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"platform_fee_cents": {
"name": "platform_fee_cents",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"platform_fee_bps": {
"name": "platform_fee_bps",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"refunded_cents": {
"name": "refunded_cents",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"currency": {
"name": "currency",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'eur'"
},
"status": {
"name": "status",
"type": "payment_status",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'pending'"
},
"captured_at": {
"name": "captured_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"released_at": {
"name": "released_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"failure_reason": {
"name": "failure_reason",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"payments_status_idx": {
"name": "payments_status_idx",
"columns": [
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"payments_intent_idx": {
"name": "payments_intent_idx",
"columns": [
{
"expression": "stripe_payment_intent_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"payments_booking_id_bookings_id_fk": {
"name": "payments_booking_id_bookings_id_fk",
"tableFrom": "payments",
"tableTo": "bookings",
"columnsFrom": [
"booking_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"payments_booking_id_unique": {
"name": "payments_booking_id_unique",
"nullsNotDistinct": false,
"columns": [
"booking_id"
]
},
"payments_stripe_payment_intent_id_unique": {
"name": "payments_stripe_payment_intent_id_unique",
"nullsNotDistinct": false,
"columns": [
"stripe_payment_intent_id"
]
},
"payments_stripe_transfer_id_unique": {
"name": "payments_stripe_transfer_id_unique",
"nullsNotDistinct": false,
"columns": [
"stripe_transfer_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.processed_stripe_events": {
"name": "processed_stripe_events",
"schema": "",
"columns": {
"event_id": {
"name": "event_id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"type": {
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"processed_at": {
"name": "processed_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.quotes": {
"name": "quotes",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"match_id": {
"name": "match_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"kind": {
"name": "kind",
"type": "quote_kind",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'fixed'"
},
"amount_cents": {
"name": "amount_cents",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"hours_estimate": {
"name": "hours_estimate",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"scope": {
"name": "scope",
"type": "text",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "quote_status",
"typeSchema": "public",
"primaryKey": false,
"notNull": true,
"default": "'sent'"
},
"valid_until": {
"name": "valid_until",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"responded_at": {
"name": "responded_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"quotes_match_idx": {
"name": "quotes_match_idx",
"columns": [
{
"expression": "match_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"quotes_match_id_matches_id_fk": {
"name": "quotes_match_id_matches_id_fk",
"tableFrom": "quotes",
"tableTo": "matches",
"columnsFrom": [
"match_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.reviews": {
"name": "reviews",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"booking_id": {
"name": "booking_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"author_id": {
"name": "author_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"subject_id": {
"name": "subject_id",
"type": "uuid",
"primaryKey": false,
"notNull": true
},
"rating": {
"name": "rating",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"body": {
"name": "body",
"type": "text",
"primaryKey": false,
"notNull": true
},
"published_at": {
"name": "published_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"reviews_subject_idx": {
"name": "reviews_subject_idx",
"columns": [
{
"expression": "subject_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "published_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"reviews_booking_id_bookings_id_fk": {
"name": "reviews_booking_id_bookings_id_fk",
"tableFrom": "reviews",
"tableTo": "bookings",
"columnsFrom": [
"booking_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"reviews_author_id_users_id_fk": {
"name": "reviews_author_id_users_id_fk",
"tableFrom": "reviews",
"tableTo": "users",
"columnsFrom": [
"author_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"reviews_subject_id_users_id_fk": {
"name": "reviews_subject_id_users_id_fk",
"tableFrom": "reviews",
"tableTo": "users",
"columnsFrom": [
"subject_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"reviews_booking_author_unique": {
"name": "reviews_booking_author_unique",
"nullsNotDistinct": false,
"columns": [
"booking_id",
"author_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.audit_log": {
"name": "audit_log",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "uuid",
"primaryKey": true,
"notNull": true,
"default": "gen_random_uuid()"
},
"actor_id": {
"name": "actor_id",
"type": "uuid",
"primaryKey": false,
"notNull": false
},
"action": {
"name": "action",
"type": "text",
"primaryKey": false,
"notNull": true
},
"entity": {
"name": "entity",
"type": "text",
"primaryKey": false,
"notNull": true
},
"entity_id": {
"name": "entity_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"metadata": {
"name": "metadata",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"ip": {
"name": "ip",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"audit_log_entity_idx": {
"name": "audit_log_entity_idx",
"columns": [
{
"expression": "entity",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "entity_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"audit_log_actor_idx": {
"name": "audit_log_actor_idx",
"columns": [
{
"expression": "actor_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"audit_log_actor_id_users_id_fk": {
"name": "audit_log_actor_id_users_id_fk",
"tableFrom": "audit_log",
"tableTo": "users",
"columnsFrom": [
"actor_id"
],
"columnsTo": [
"id"
],
"onDelete": "set null",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
}
},
"enums": {
"public.booking_status": {
"name": "booking_status",
"schema": "public",
"values": [
"scheduled",
"in_progress",
"awaiting_confirmation",
"completed",
"cancelled",
"disputed"
]
},
"public.credential_kind": {
"name": "credential_kind",
"schema": "public",
"values": [
"id",
"licence",
"insurance"
]
},
"public.job_status": {
"name": "job_status",
"schema": "public",
"values": [
"open",
"matched",
"booked",
"completed",
"cancelled"
]
},
"public.media_kind": {
"name": "media_kind",
"schema": "public",
"values": [
"photo",
"work_sample"
]
},
"public.payment_status": {
"name": "payment_status",
"schema": "public",
"values": [
"pending",
"held",
"released",
"refunded",
"partially_refunded",
"failed"
]
},
"public.quote_kind": {
"name": "quote_kind",
"schema": "public",
"values": [
"fixed",
"hourly"
]
},
"public.quote_status": {
"name": "quote_status",
"schema": "public",
"values": [
"sent",
"accepted",
"declined",
"withdrawn",
"expired"
]
},
"public.request_status": {
"name": "request_status",
"schema": "public",
"values": [
"pending",
"accepted",
"declined",
"expired"
]
},
"public.review_status": {
"name": "review_status",
"schema": "public",
"values": [
"pending",
"approved",
"rejected"
]
},
"public.swipe_direction": {
"name": "swipe_direction",
"schema": "public",
"values": [
"left",
"right"
]
},
"public.urgency": {
"name": "urgency",
"schema": "public",
"values": [
"now",
"this_week",
"flexible"
]
},
"public.user_role": {
"name": "user_role",
"schema": "public",
"values": [
"client",
"pro",
"admin"
]
},
"public.verification_status": {
"name": "verification_status",
"schema": "public",
"values": [
"draft",
"pending",
"verified",
"rejected",
"suspended"
]
}
},
"schemas": {},
"sequences": {},
"roles": {},
"policies": {},
"views": {},
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
}
}