Files
pn-new-crm/src/lib/db/migrations/meta/0009_snapshot.json
Matt Ciaccio 475b051e29
All checks were successful
Build & Push Docker Images / lint (pull_request) Successful in 1m0s
Build & Push Docker Images / build-and-push (pull_request) Has been skipped
feat(portal): replace magic-link with email/password + admin-initiated activation
The client portal no longer uses passwordless / magic-link sign-in. Each
client now has a `portal_users` row with a scrypt-hashed password,
created by an admin from the client detail page; the admin's invite
mails an activation link that the client uses to set their own password.
Forgot-password is wired through the same token mechanism.

Schema (migration `0009_outgoing_rumiko_fujikawa.sql`):

- `portal_users` — one per client account, separate from the CRM
  `users` table (better-auth) so the auth realms stay isolated. Email
  is globally unique, password is null until activation.
- `portal_auth_tokens` — single-use activation / reset tokens. Stores
  only the SHA-256 hash so a DB compromise never leaks live tokens.

Services:

- `src/lib/portal/passwords.ts` — scrypt hash/verify (no new deps;
  uses node:crypto), token mint+hash helpers.
- `src/lib/services/portal-auth.service.ts` — createPortalUser,
  resendActivation, activateAccount, signIn (timing-safe),
  requestPasswordReset, resetPassword. Auth failures throw the new
  UnauthorizedError (401); enumeration-safe behaviour everywhere.

Routes:

- POST /api/portal/auth/sign-in — sets the existing portal JWT cookie.
- POST /api/portal/auth/forgot-password — always 200.
- POST /api/portal/auth/reset-password — token + new password.
- POST /api/portal/auth/activate — token + initial password.
- POST /api/v1/clients/:id/portal-user — admin invite (and `?action=resend`).
- Removed: /api/portal/auth/request, /api/portal/auth/verify (magic link).

UI:

- /portal/login — replaced email-only magic-link form with email +
  password + "forgot password" link.
- /portal/forgot-password, /portal/reset-password, /portal/activate — new.
- New shared `PasswordSetForm` component used by activate + reset.
- New `PortalInviteButton` rendered on the client detail header.

Email send:

- `createTransporter` now wires SMTP auth when SMTP_USER+SMTP_PASS are
  set (gmail app-password or marina-server creds, configured via env).
- `SMTP_FROM` env var lets the sender address be overridden without
  pinning it to `noreply@${SMTP_HOST}`.

Tests:

- Smoke spec 17 (client-portal) updated to the new flow: 7/7 green.
- Smoke specs 02-crud-spine, 05-invoices, 20-critical-path updated to
  match the post-refactor client + invoice forms (drop companyName,
  use OwnerPicker + billingEmail).
- Vitest 652/652 still green; type-check clean.

Drops the dead `requestMagicLink` from portal.service.ts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 15:34:02 +02:00

8775 lines
228 KiB
JSON

{
"id": "403f8dbd-6113-47e6-a441-72b1f252a7c7",
"prevId": "d785bd7f-01b0-4852-9a62-31606d0f5f57",
"version": "7",
"dialect": "postgresql",
"tables": {
"public.berth_maintenance_log": {
"name": "berth_maintenance_log",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"berth_id": {
"name": "berth_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"category": {
"name": "category",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"cost": {
"name": "cost",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"cost_currency": {
"name": "cost_currency",
"type": "text",
"primaryKey": false,
"notNull": false,
"default": "'USD'"
},
"responsible_party": {
"name": "responsible_party",
"type": "text",
"primaryKey": false,
"notNull": false
},
"performed_date": {
"name": "performed_date",
"type": "date",
"primaryKey": false,
"notNull": true
},
"photo_file_ids": {
"name": "photo_file_ids",
"type": "text[]",
"primaryKey": false,
"notNull": false
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"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": {
"idx_bml_berth": {
"name": "idx_bml_berth",
"columns": [
{
"expression": "berth_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_bml_port": {
"name": "idx_bml_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"berth_maintenance_log_berth_id_berths_id_fk": {
"name": "berth_maintenance_log_berth_id_berths_id_fk",
"tableFrom": "berth_maintenance_log",
"tableTo": "berths",
"columnsFrom": ["berth_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"berth_maintenance_log_port_id_ports_id_fk": {
"name": "berth_maintenance_log_port_id_ports_id_fk",
"tableFrom": "berth_maintenance_log",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.berth_map_data": {
"name": "berth_map_data",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"berth_id": {
"name": "berth_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"svg_path": {
"name": "svg_path",
"type": "text",
"primaryKey": false,
"notNull": false
},
"x": {
"name": "x",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"y": {
"name": "y",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"transform": {
"name": "transform",
"type": "text",
"primaryKey": false,
"notNull": false
},
"font_size": {
"name": "font_size",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"extra_data": {
"name": "extra_data",
"type": "jsonb",
"primaryKey": false,
"notNull": false,
"default": "'{}'::jsonb"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"berth_map_data_berth_id_idx": {
"name": "berth_map_data_berth_id_idx",
"columns": [
{
"expression": "berth_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"berth_map_data_berth_id_berths_id_fk": {
"name": "berth_map_data_berth_id_berths_id_fk",
"tableFrom": "berth_map_data",
"tableTo": "berths",
"columnsFrom": ["berth_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"berth_map_data_berth_id_unique": {
"name": "berth_map_data_berth_id_unique",
"nullsNotDistinct": false,
"columns": ["berth_id"]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.berth_recommendations": {
"name": "berth_recommendations",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"interest_id": {
"name": "interest_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"berth_id": {
"name": "berth_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"match_score": {
"name": "match_score",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"match_reasons": {
"name": "match_reasons",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"source": {
"name": "source",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'ai'"
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"berth_rec_interest_berth_idx": {
"name": "berth_rec_interest_berth_idx",
"columns": [
{
"expression": "interest_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "berth_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_br_interest": {
"name": "idx_br_interest",
"columns": [
{
"expression": "interest_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"berth_recommendations_berth_id_berths_id_fk": {
"name": "berth_recommendations_berth_id_berths_id_fk",
"tableFrom": "berth_recommendations",
"tableTo": "berths",
"columnsFrom": ["berth_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.berth_tags": {
"name": "berth_tags",
"schema": "",
"columns": {
"berth_id": {
"name": "berth_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"tag_id": {
"name": "tag_id",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {
"berth_tags_berth_id_berths_id_fk": {
"name": "berth_tags_berth_id_berths_id_fk",
"tableFrom": "berth_tags",
"tableTo": "berths",
"columnsFrom": ["berth_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"berth_tags_berth_id_tag_id_pk": {
"name": "berth_tags_berth_id_tag_id_pk",
"columns": ["berth_id", "tag_id"]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.berth_waiting_list": {
"name": "berth_waiting_list",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"berth_id": {
"name": "berth_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"yacht_id": {
"name": "yacht_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"position": {
"name": "position",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"priority": {
"name": "priority",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'normal'"
},
"notify_pref": {
"name": "notify_pref",
"type": "text",
"primaryKey": false,
"notNull": false,
"default": "'email'"
},
"notes": {
"name": "notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"berth_waiting_list_berth_client_idx": {
"name": "berth_waiting_list_berth_client_idx",
"columns": [
{
"expression": "berth_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_bwl_berth": {
"name": "idx_bwl_berth",
"columns": [
{
"expression": "berth_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "position",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"berth_waiting_list_berth_id_berths_id_fk": {
"name": "berth_waiting_list_berth_id_berths_id_fk",
"tableFrom": "berth_waiting_list",
"tableTo": "berths",
"columnsFrom": ["berth_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"berth_waiting_list_client_id_clients_id_fk": {
"name": "berth_waiting_list_client_id_clients_id_fk",
"tableFrom": "berth_waiting_list",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.berths": {
"name": "berths",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"mooring_number": {
"name": "mooring_number",
"type": "text",
"primaryKey": false,
"notNull": true
},
"area": {
"name": "area",
"type": "text",
"primaryKey": false,
"notNull": false
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'available'"
},
"length_ft": {
"name": "length_ft",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"width_ft": {
"name": "width_ft",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"draft_ft": {
"name": "draft_ft",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"length_m": {
"name": "length_m",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"width_m": {
"name": "width_m",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"draft_m": {
"name": "draft_m",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"width_is_minimum": {
"name": "width_is_minimum",
"type": "boolean",
"primaryKey": false,
"notNull": false,
"default": false
},
"nominal_boat_size": {
"name": "nominal_boat_size",
"type": "text",
"primaryKey": false,
"notNull": false
},
"nominal_boat_size_m": {
"name": "nominal_boat_size_m",
"type": "text",
"primaryKey": false,
"notNull": false
},
"water_depth": {
"name": "water_depth",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"water_depth_m": {
"name": "water_depth_m",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"water_depth_is_minimum": {
"name": "water_depth_is_minimum",
"type": "boolean",
"primaryKey": false,
"notNull": false,
"default": false
},
"side_pontoon": {
"name": "side_pontoon",
"type": "text",
"primaryKey": false,
"notNull": false
},
"power_capacity": {
"name": "power_capacity",
"type": "text",
"primaryKey": false,
"notNull": false
},
"voltage": {
"name": "voltage",
"type": "text",
"primaryKey": false,
"notNull": false
},
"mooring_type": {
"name": "mooring_type",
"type": "text",
"primaryKey": false,
"notNull": false
},
"cleat_type": {
"name": "cleat_type",
"type": "text",
"primaryKey": false,
"notNull": false
},
"cleat_capacity": {
"name": "cleat_capacity",
"type": "text",
"primaryKey": false,
"notNull": false
},
"bollard_type": {
"name": "bollard_type",
"type": "text",
"primaryKey": false,
"notNull": false
},
"bollard_capacity": {
"name": "bollard_capacity",
"type": "text",
"primaryKey": false,
"notNull": false
},
"access": {
"name": "access",
"type": "text",
"primaryKey": false,
"notNull": false
},
"price": {
"name": "price",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"price_currency": {
"name": "price_currency",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'USD'"
},
"bow_facing": {
"name": "bow_facing",
"type": "text",
"primaryKey": false,
"notNull": false
},
"berth_approved": {
"name": "berth_approved",
"type": "boolean",
"primaryKey": false,
"notNull": false,
"default": false
},
"tenure_type": {
"name": "tenure_type",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'permanent'"
},
"tenure_years": {
"name": "tenure_years",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"tenure_start_date": {
"name": "tenure_start_date",
"type": "date",
"primaryKey": false,
"notNull": false
},
"tenure_end_date": {
"name": "tenure_end_date",
"type": "date",
"primaryKey": false,
"notNull": false
},
"status_last_changed_by": {
"name": "status_last_changed_by",
"type": "text",
"primaryKey": false,
"notNull": false
},
"status_last_changed_reason": {
"name": "status_last_changed_reason",
"type": "text",
"primaryKey": false,
"notNull": false
},
"status_last_modified": {
"name": "status_last_modified",
"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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_berths_port": {
"name": "idx_berths_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_berths_status": {
"name": "idx_berths_status",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_berths_area": {
"name": "idx_berths_area",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "area",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_berths_mooring": {
"name": "idx_berths_mooring",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "mooring_number",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"berths_port_id_ports_id_fk": {
"name": "berths_port_id_ports_id_fk",
"tableFrom": "berths",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.client_addresses": {
"name": "client_addresses",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"label": {
"name": "label",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'Primary'"
},
"street_address": {
"name": "street_address",
"type": "text",
"primaryKey": false,
"notNull": false
},
"city": {
"name": "city",
"type": "text",
"primaryKey": false,
"notNull": false
},
"state_province": {
"name": "state_province",
"type": "text",
"primaryKey": false,
"notNull": false
},
"postal_code": {
"name": "postal_code",
"type": "text",
"primaryKey": false,
"notNull": false
},
"country": {
"name": "country",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_primary": {
"name": "is_primary",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"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": {
"idx_ca_client": {
"name": "idx_ca_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_ca_port": {
"name": "idx_ca_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_ca_primary": {
"name": "idx_ca_primary",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"where": "\"client_addresses\".\"is_primary\" = true",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"client_addresses_client_id_clients_id_fk": {
"name": "client_addresses_client_id_clients_id_fk",
"tableFrom": "client_addresses",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"client_addresses_port_id_ports_id_fk": {
"name": "client_addresses_port_id_ports_id_fk",
"tableFrom": "client_addresses",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.client_contacts": {
"name": "client_contacts",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"channel": {
"name": "channel",
"type": "text",
"primaryKey": false,
"notNull": true
},
"value": {
"name": "value",
"type": "text",
"primaryKey": false,
"notNull": true
},
"label": {
"name": "label",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_primary": {
"name": "is_primary",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"notes": {
"name": "notes",
"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": {
"idx_cc_client": {
"name": "idx_cc_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_cc_email": {
"name": "idx_cc_email",
"columns": [
{
"expression": "channel",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "value",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"client_contacts\".\"channel\" = 'email'",
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_cc_phone": {
"name": "idx_cc_phone",
"columns": [
{
"expression": "channel",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "value",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"client_contacts\".\"channel\" = 'phone'",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"client_contacts_client_id_clients_id_fk": {
"name": "client_contacts_client_id_clients_id_fk",
"tableFrom": "client_contacts",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.client_merge_log": {
"name": "client_merge_log",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"surviving_client_id": {
"name": "surviving_client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"merged_client_id": {
"name": "merged_client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"merged_by": {
"name": "merged_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"merge_details": {
"name": "merge_details",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_cml_port": {
"name": "idx_cml_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"client_merge_log_port_id_ports_id_fk": {
"name": "client_merge_log_port_id_ports_id_fk",
"tableFrom": "client_merge_log",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"client_merge_log_surviving_client_id_clients_id_fk": {
"name": "client_merge_log_surviving_client_id_clients_id_fk",
"tableFrom": "client_merge_log",
"tableTo": "clients",
"columnsFrom": ["surviving_client_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.client_notes": {
"name": "client_notes",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"author_id": {
"name": "author_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true
},
"mentions": {
"name": "mentions",
"type": "text[]",
"primaryKey": false,
"notNull": false
},
"is_locked": {
"name": "is_locked",
"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": {
"idx_cn_client": {
"name": "idx_cn_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"client_notes_client_id_clients_id_fk": {
"name": "client_notes_client_id_clients_id_fk",
"tableFrom": "client_notes",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.client_relationships": {
"name": "client_relationships",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_a_id": {
"name": "client_a_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_b_id": {
"name": "client_b_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"relationship_type": {
"name": "relationship_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_cr_port": {
"name": "idx_cr_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"client_relationships_port_id_ports_id_fk": {
"name": "client_relationships_port_id_ports_id_fk",
"tableFrom": "client_relationships",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"client_relationships_client_a_id_clients_id_fk": {
"name": "client_relationships_client_a_id_clients_id_fk",
"tableFrom": "client_relationships",
"tableTo": "clients",
"columnsFrom": ["client_a_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"client_relationships_client_b_id_clients_id_fk": {
"name": "client_relationships_client_b_id_clients_id_fk",
"tableFrom": "client_relationships",
"tableTo": "clients",
"columnsFrom": ["client_b_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.client_tags": {
"name": "client_tags",
"schema": "",
"columns": {
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"tag_id": {
"name": "tag_id",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {
"client_tags_client_id_clients_id_fk": {
"name": "client_tags_client_id_clients_id_fk",
"tableFrom": "client_tags",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"client_tags_client_id_tag_id_pk": {
"name": "client_tags_client_id_tag_id_pk",
"columns": ["client_id", "tag_id"]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.clients": {
"name": "clients",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"full_name": {
"name": "full_name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"nationality": {
"name": "nationality",
"type": "text",
"primaryKey": false,
"notNull": false
},
"preferred_contact_method": {
"name": "preferred_contact_method",
"type": "text",
"primaryKey": false,
"notNull": false
},
"preferred_language": {
"name": "preferred_language",
"type": "text",
"primaryKey": false,
"notNull": false
},
"timezone": {
"name": "timezone",
"type": "text",
"primaryKey": false,
"notNull": false
},
"source": {
"name": "source",
"type": "text",
"primaryKey": false,
"notNull": false
},
"source_details": {
"name": "source_details",
"type": "text",
"primaryKey": false,
"notNull": false
},
"archived_at": {
"name": "archived_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_clients_port": {
"name": "idx_clients_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_clients_name": {
"name": "idx_clients_name",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "full_name",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_clients_archived": {
"name": "idx_clients_archived",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "archived_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"clients_port_id_ports_id_fk": {
"name": "clients_port_id_ports_id_fk",
"tableFrom": "clients",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.companies": {
"name": "companies",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"legal_name": {
"name": "legal_name",
"type": "text",
"primaryKey": false,
"notNull": false
},
"tax_id": {
"name": "tax_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"registration_number": {
"name": "registration_number",
"type": "text",
"primaryKey": false,
"notNull": false
},
"incorporation_country": {
"name": "incorporation_country",
"type": "text",
"primaryKey": false,
"notNull": false
},
"incorporation_date": {
"name": "incorporation_date",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'active'"
},
"billing_email": {
"name": "billing_email",
"type": "text",
"primaryKey": false,
"notNull": false
},
"notes": {
"name": "notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"archived_at": {
"name": "archived_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_companies_port": {
"name": "idx_companies_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_companies_name_unique": {
"name": "idx_companies_name_unique",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "lower(\"name\")",
"asc": true,
"isExpression": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_companies_taxid": {
"name": "idx_companies_taxid",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "tax_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"companies\".\"tax_id\" IS NOT NULL",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"companies_port_id_ports_id_fk": {
"name": "companies_port_id_ports_id_fk",
"tableFrom": "companies",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.company_addresses": {
"name": "company_addresses",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"company_id": {
"name": "company_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"label": {
"name": "label",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'Primary'"
},
"street_address": {
"name": "street_address",
"type": "text",
"primaryKey": false,
"notNull": false
},
"city": {
"name": "city",
"type": "text",
"primaryKey": false,
"notNull": false
},
"state_province": {
"name": "state_province",
"type": "text",
"primaryKey": false,
"notNull": false
},
"postal_code": {
"name": "postal_code",
"type": "text",
"primaryKey": false,
"notNull": false
},
"country": {
"name": "country",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_primary": {
"name": "is_primary",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"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": {
"idx_compa_company": {
"name": "idx_compa_company",
"columns": [
{
"expression": "company_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_compa_port": {
"name": "idx_compa_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_compa_primary": {
"name": "idx_compa_primary",
"columns": [
{
"expression": "company_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"where": "\"company_addresses\".\"is_primary\" = true",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"company_addresses_company_id_companies_id_fk": {
"name": "company_addresses_company_id_companies_id_fk",
"tableFrom": "company_addresses",
"tableTo": "companies",
"columnsFrom": ["company_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"company_addresses_port_id_ports_id_fk": {
"name": "company_addresses_port_id_ports_id_fk",
"tableFrom": "company_addresses",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.company_memberships": {
"name": "company_memberships",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"company_id": {
"name": "company_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"role": {
"name": "role",
"type": "text",
"primaryKey": false,
"notNull": true
},
"role_detail": {
"name": "role_detail",
"type": "text",
"primaryKey": false,
"notNull": false
},
"start_date": {
"name": "start_date",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"end_date": {
"name": "end_date",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"is_primary": {
"name": "is_primary",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"notes": {
"name": "notes",
"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": {
"idx_cm_company": {
"name": "idx_cm_company",
"columns": [
{
"expression": "company_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_cm_client": {
"name": "idx_cm_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_cm_active": {
"name": "idx_cm_active",
"columns": [
{
"expression": "company_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"company_memberships\".\"end_date\" IS NULL",
"concurrently": false,
"method": "btree",
"with": {}
},
"unique_cm_exact": {
"name": "unique_cm_exact",
"columns": [
{
"expression": "company_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "role",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "start_date",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"company_memberships_company_id_companies_id_fk": {
"name": "company_memberships_company_id_companies_id_fk",
"tableFrom": "company_memberships",
"tableTo": "companies",
"columnsFrom": ["company_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"company_memberships_client_id_clients_id_fk": {
"name": "company_memberships_client_id_clients_id_fk",
"tableFrom": "company_memberships",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.company_notes": {
"name": "company_notes",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"company_id": {
"name": "company_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"author_id": {
"name": "author_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true
},
"mentions": {
"name": "mentions",
"type": "text[]",
"primaryKey": false,
"notNull": false
},
"is_locked": {
"name": "is_locked",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_compn_company": {
"name": "idx_compn_company",
"columns": [
{
"expression": "company_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"company_notes_company_id_companies_id_fk": {
"name": "company_notes_company_id_companies_id_fk",
"tableFrom": "company_notes",
"tableTo": "companies",
"columnsFrom": ["company_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.company_tags": {
"name": "company_tags",
"schema": "",
"columns": {
"company_id": {
"name": "company_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"tag_id": {
"name": "tag_id",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {
"company_tags_company_id_companies_id_fk": {
"name": "company_tags_company_id_companies_id_fk",
"tableFrom": "company_tags",
"tableTo": "companies",
"columnsFrom": ["company_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"company_tags_company_id_tag_id_pk": {
"name": "company_tags_company_id_tag_id_pk",
"columns": ["company_id", "tag_id"]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.document_events": {
"name": "document_events",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"document_id": {
"name": "document_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"event_type": {
"name": "event_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"signer_id": {
"name": "signer_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"event_data": {
"name": "event_data",
"type": "jsonb",
"primaryKey": false,
"notNull": false,
"default": "'{}'::jsonb"
},
"signature_hash": {
"name": "signature_hash",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_de_doc": {
"name": "idx_de_doc",
"columns": [
{
"expression": "document_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_de_dedup": {
"name": "idx_de_dedup",
"columns": [
{
"expression": "document_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "signature_hash",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"where": "\"document_events\".\"signature_hash\" IS NOT NULL",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"document_events_document_id_documents_id_fk": {
"name": "document_events_document_id_documents_id_fk",
"tableFrom": "document_events",
"tableTo": "documents",
"columnsFrom": ["document_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"document_events_signer_id_document_signers_id_fk": {
"name": "document_events_signer_id_document_signers_id_fk",
"tableFrom": "document_events",
"tableTo": "document_signers",
"columnsFrom": ["signer_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.document_signers": {
"name": "document_signers",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"document_id": {
"name": "document_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"signer_name": {
"name": "signer_name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"signer_email": {
"name": "signer_email",
"type": "text",
"primaryKey": false,
"notNull": true
},
"signer_role": {
"name": "signer_role",
"type": "text",
"primaryKey": false,
"notNull": true
},
"signing_order": {
"name": "signing_order",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'pending'"
},
"signed_at": {
"name": "signed_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"signing_url": {
"name": "signing_url",
"type": "text",
"primaryKey": false,
"notNull": false
},
"embedded_url": {
"name": "embedded_url",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_ds_doc": {
"name": "idx_ds_doc",
"columns": [
{
"expression": "document_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"document_signers_document_id_documents_id_fk": {
"name": "document_signers_document_id_documents_id_fk",
"tableFrom": "document_signers",
"tableTo": "documents",
"columnsFrom": ["document_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.document_templates": {
"name": "document_templates",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_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
},
"template_type": {
"name": "template_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"body_html": {
"name": "body_html",
"type": "text",
"primaryKey": false,
"notNull": true
},
"merge_fields": {
"name": "merge_fields",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'[]'::jsonb"
},
"is_active": {
"name": "is_active",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"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": {
"idx_dt_port": {
"name": "idx_dt_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_dt_type": {
"name": "idx_dt_type",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "template_type",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"document_templates_port_id_ports_id_fk": {
"name": "document_templates_port_id_ports_id_fk",
"tableFrom": "document_templates",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.documents": {
"name": "documents",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"interest_id": {
"name": "interest_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"yacht_id": {
"name": "yacht_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"company_id": {
"name": "company_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"document_type": {
"name": "document_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"title": {
"name": "title",
"type": "text",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'draft'"
},
"documenso_id": {
"name": "documenso_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"file_id": {
"name": "file_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"signed_file_id": {
"name": "signed_file_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_manual_upload": {
"name": "is_manual_upload",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"notes": {
"name": "notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"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": {
"idx_docs_port": {
"name": "idx_docs_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_docs_interest": {
"name": "idx_docs_interest",
"columns": [
{
"expression": "interest_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_docs_client": {
"name": "idx_docs_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_documents_yacht": {
"name": "idx_documents_yacht",
"columns": [
{
"expression": "yacht_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_documents_company": {
"name": "idx_documents_company",
"columns": [
{
"expression": "company_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_docs_type": {
"name": "idx_docs_type",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "document_type",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"documents_port_id_ports_id_fk": {
"name": "documents_port_id_ports_id_fk",
"tableFrom": "documents",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"documents_client_id_clients_id_fk": {
"name": "documents_client_id_clients_id_fk",
"tableFrom": "documents",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"documents_file_id_files_id_fk": {
"name": "documents_file_id_files_id_fk",
"tableFrom": "documents",
"tableTo": "files",
"columnsFrom": ["file_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"documents_signed_file_id_files_id_fk": {
"name": "documents_signed_file_id_files_id_fk",
"tableFrom": "documents",
"tableTo": "files",
"columnsFrom": ["signed_file_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.files": {
"name": "files",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"yacht_id": {
"name": "yacht_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"company_id": {
"name": "company_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"filename": {
"name": "filename",
"type": "text",
"primaryKey": false,
"notNull": true
},
"original_name": {
"name": "original_name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"mime_type": {
"name": "mime_type",
"type": "text",
"primaryKey": false,
"notNull": false
},
"size_bytes": {
"name": "size_bytes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"storage_path": {
"name": "storage_path",
"type": "text",
"primaryKey": false,
"notNull": true
},
"storage_bucket": {
"name": "storage_bucket",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'crm-files'"
},
"category": {
"name": "category",
"type": "text",
"primaryKey": false,
"notNull": false
},
"uploaded_by": {
"name": "uploaded_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_files_port": {
"name": "idx_files_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_files_client": {
"name": "idx_files_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_files_yacht": {
"name": "idx_files_yacht",
"columns": [
{
"expression": "yacht_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_files_company": {
"name": "idx_files_company",
"columns": [
{
"expression": "company_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"files_port_id_ports_id_fk": {
"name": "files_port_id_ports_id_fk",
"tableFrom": "files",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"files_client_id_clients_id_fk": {
"name": "files_client_id_clients_id_fk",
"tableFrom": "files",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.form_submissions": {
"name": "form_submissions",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"form_template_id": {
"name": "form_template_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"interest_id": {
"name": "interest_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"token": {
"name": "token",
"type": "text",
"primaryKey": false,
"notNull": true
},
"prefilled_data": {
"name": "prefilled_data",
"type": "jsonb",
"primaryKey": false,
"notNull": false,
"default": "'{}'::jsonb"
},
"submitted_data": {
"name": "submitted_data",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'pending'"
},
"expires_at": {
"name": "expires_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"submitted_at": {
"name": "submitted_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": {
"idx_fs_token": {
"name": "idx_fs_token",
"columns": [
{
"expression": "token",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"form_submissions_form_template_id_form_templates_id_fk": {
"name": "form_submissions_form_template_id_form_templates_id_fk",
"tableFrom": "form_submissions",
"tableTo": "form_templates",
"columnsFrom": ["form_template_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"form_submissions_client_id_clients_id_fk": {
"name": "form_submissions_client_id_clients_id_fk",
"tableFrom": "form_submissions",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"form_submissions_token_unique": {
"name": "form_submissions_token_unique",
"nullsNotDistinct": false,
"columns": ["token"]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.form_templates": {
"name": "form_templates",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_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
},
"fields": {
"name": "fields",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"branding": {
"name": "branding",
"type": "jsonb",
"primaryKey": false,
"notNull": false,
"default": "'{}'::jsonb"
},
"is_active": {
"name": "is_active",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"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": {
"idx_ft_port": {
"name": "idx_ft_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"form_templates_port_id_ports_id_fk": {
"name": "form_templates_port_id_ports_id_fk",
"tableFrom": "form_templates",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.email_accounts": {
"name": "email_accounts",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"provider": {
"name": "provider",
"type": "text",
"primaryKey": false,
"notNull": true
},
"email_address": {
"name": "email_address",
"type": "text",
"primaryKey": false,
"notNull": true
},
"smtp_host": {
"name": "smtp_host",
"type": "text",
"primaryKey": false,
"notNull": true
},
"smtp_port": {
"name": "smtp_port",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"imap_host": {
"name": "imap_host",
"type": "text",
"primaryKey": false,
"notNull": true
},
"imap_port": {
"name": "imap_port",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"credentials_enc": {
"name": "credentials_enc",
"type": "text",
"primaryKey": false,
"notNull": true
},
"is_active": {
"name": "is_active",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"last_sync_at": {
"name": "last_sync_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_ea_user": {
"name": "idx_ea_user",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_ea_port": {
"name": "idx_ea_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"email_accounts_port_id_ports_id_fk": {
"name": "email_accounts_port_id_ports_id_fk",
"tableFrom": "email_accounts",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.email_messages": {
"name": "email_messages",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"thread_id": {
"name": "thread_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"message_id_header": {
"name": "message_id_header",
"type": "text",
"primaryKey": false,
"notNull": false
},
"from_address": {
"name": "from_address",
"type": "text",
"primaryKey": false,
"notNull": true
},
"to_addresses": {
"name": "to_addresses",
"type": "text[]",
"primaryKey": false,
"notNull": true
},
"cc_addresses": {
"name": "cc_addresses",
"type": "text[]",
"primaryKey": false,
"notNull": false
},
"subject": {
"name": "subject",
"type": "text",
"primaryKey": false,
"notNull": false
},
"body_text": {
"name": "body_text",
"type": "text",
"primaryKey": false,
"notNull": false
},
"body_html": {
"name": "body_html",
"type": "text",
"primaryKey": false,
"notNull": false
},
"direction": {
"name": "direction",
"type": "text",
"primaryKey": false,
"notNull": true
},
"sent_at": {
"name": "sent_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"attachment_file_ids": {
"name": "attachment_file_ids",
"type": "text[]",
"primaryKey": false,
"notNull": false
},
"raw_file_id": {
"name": "raw_file_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_em_thread": {
"name": "idx_em_thread",
"columns": [
{
"expression": "thread_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_em_message_id": {
"name": "idx_em_message_id",
"columns": [
{
"expression": "message_id_header",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"where": "\"email_messages\".\"message_id_header\" IS NOT NULL",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"email_messages_thread_id_email_threads_id_fk": {
"name": "email_messages_thread_id_email_threads_id_fk",
"tableFrom": "email_messages",
"tableTo": "email_threads",
"columnsFrom": ["thread_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"email_messages_raw_file_id_files_id_fk": {
"name": "email_messages_raw_file_id_files_id_fk",
"tableFrom": "email_messages",
"tableTo": "files",
"columnsFrom": ["raw_file_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.email_threads": {
"name": "email_threads",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"subject": {
"name": "subject",
"type": "text",
"primaryKey": false,
"notNull": false
},
"last_message_at": {
"name": "last_message_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"message_count": {
"name": "message_count",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"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": {
"idx_et_client": {
"name": "idx_et_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_et_port": {
"name": "idx_et_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"email_threads_port_id_ports_id_fk": {
"name": "email_threads_port_id_ports_id_fk",
"tableFrom": "email_threads",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"email_threads_client_id_clients_id_fk": {
"name": "email_threads_client_id_clients_id_fk",
"tableFrom": "email_threads",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.expenses": {
"name": "expenses",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"establishment_name": {
"name": "establishment_name",
"type": "text",
"primaryKey": false,
"notNull": false
},
"amount": {
"name": "amount",
"type": "numeric",
"primaryKey": false,
"notNull": true
},
"currency": {
"name": "currency",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'USD'"
},
"amount_usd": {
"name": "amount_usd",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"exchange_rate": {
"name": "exchange_rate",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"payment_method": {
"name": "payment_method",
"type": "text",
"primaryKey": false,
"notNull": false
},
"category": {
"name": "category",
"type": "text",
"primaryKey": false,
"notNull": false
},
"payer": {
"name": "payer",
"type": "text",
"primaryKey": false,
"notNull": false
},
"expense_date": {
"name": "expense_date",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": false
},
"receipt_file_ids": {
"name": "receipt_file_ids",
"type": "text[]",
"primaryKey": false,
"notNull": false
},
"payment_status": {
"name": "payment_status",
"type": "text",
"primaryKey": false,
"notNull": false,
"default": "'unpaid'"
},
"payment_date": {
"name": "payment_date",
"type": "date",
"primaryKey": false,
"notNull": false
},
"payment_reference": {
"name": "payment_reference",
"type": "text",
"primaryKey": false,
"notNull": false
},
"payment_notes": {
"name": "payment_notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"archived_at": {
"name": "archived_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_expenses_port": {
"name": "idx_expenses_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_expenses_date": {
"name": "idx_expenses_date",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "expense_date",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_expenses_category": {
"name": "idx_expenses_category",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "category",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"expenses_port_id_ports_id_fk": {
"name": "expenses_port_id_ports_id_fk",
"tableFrom": "expenses",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.invoice_expenses": {
"name": "invoice_expenses",
"schema": "",
"columns": {
"invoice_id": {
"name": "invoice_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"expense_id": {
"name": "expense_id",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {
"invoice_expenses_invoice_id_invoices_id_fk": {
"name": "invoice_expenses_invoice_id_invoices_id_fk",
"tableFrom": "invoice_expenses",
"tableTo": "invoices",
"columnsFrom": ["invoice_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"invoice_expenses_expense_id_expenses_id_fk": {
"name": "invoice_expenses_expense_id_expenses_id_fk",
"tableFrom": "invoice_expenses",
"tableTo": "expenses",
"columnsFrom": ["expense_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"invoice_expenses_invoice_id_expense_id_pk": {
"name": "invoice_expenses_invoice_id_expense_id_pk",
"columns": ["invoice_id", "expense_id"]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.invoice_line_items": {
"name": "invoice_line_items",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"invoice_id": {
"name": "invoice_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"quantity": {
"name": "quantity",
"type": "numeric",
"primaryKey": false,
"notNull": true,
"default": "'1'"
},
"unit_price": {
"name": "unit_price",
"type": "numeric",
"primaryKey": false,
"notNull": true
},
"total": {
"name": "total",
"type": "numeric",
"primaryKey": false,
"notNull": true
},
"sort_order": {
"name": "sort_order",
"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": {
"idx_ili_invoice": {
"name": "idx_ili_invoice",
"columns": [
{
"expression": "invoice_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"invoice_line_items_invoice_id_invoices_id_fk": {
"name": "invoice_line_items_invoice_id_invoices_id_fk",
"tableFrom": "invoice_line_items",
"tableTo": "invoices",
"columnsFrom": ["invoice_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.invoices": {
"name": "invoices",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"invoice_number": {
"name": "invoice_number",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_name": {
"name": "client_name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"billing_entity_type": {
"name": "billing_entity_type",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'client'"
},
"billing_entity_id": {
"name": "billing_entity_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"billing_email": {
"name": "billing_email",
"type": "text",
"primaryKey": false,
"notNull": false
},
"billing_address": {
"name": "billing_address",
"type": "text",
"primaryKey": false,
"notNull": false
},
"due_date": {
"name": "due_date",
"type": "date",
"primaryKey": false,
"notNull": true
},
"payment_terms": {
"name": "payment_terms",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'net30'"
},
"currency": {
"name": "currency",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'USD'"
},
"subtotal": {
"name": "subtotal",
"type": "numeric",
"primaryKey": false,
"notNull": true
},
"discount_pct": {
"name": "discount_pct",
"type": "numeric",
"primaryKey": false,
"notNull": false,
"default": "'0'"
},
"discount_amount": {
"name": "discount_amount",
"type": "numeric",
"primaryKey": false,
"notNull": false,
"default": "'0'"
},
"fee_pct": {
"name": "fee_pct",
"type": "numeric",
"primaryKey": false,
"notNull": false,
"default": "'0'"
},
"fee_amount": {
"name": "fee_amount",
"type": "numeric",
"primaryKey": false,
"notNull": false,
"default": "'0'"
},
"total": {
"name": "total",
"type": "numeric",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'draft'"
},
"payment_status": {
"name": "payment_status",
"type": "text",
"primaryKey": false,
"notNull": false,
"default": "'unpaid'"
},
"payment_date": {
"name": "payment_date",
"type": "date",
"primaryKey": false,
"notNull": false
},
"payment_method": {
"name": "payment_method",
"type": "text",
"primaryKey": false,
"notNull": false
},
"payment_reference": {
"name": "payment_reference",
"type": "text",
"primaryKey": false,
"notNull": false
},
"pdf_file_id": {
"name": "pdf_file_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"notes": {
"name": "notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"archived_at": {
"name": "archived_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_invoices_number": {
"name": "idx_invoices_number",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "invoice_number",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_invoices_port": {
"name": "idx_invoices_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_invoices_status": {
"name": "idx_invoices_status",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_invoices_billing_entity": {
"name": "idx_invoices_billing_entity",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "billing_entity_type",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "billing_entity_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"invoices_port_id_ports_id_fk": {
"name": "invoices_port_id_ports_id_fk",
"tableFrom": "invoices",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"invoices_pdf_file_id_files_id_fk": {
"name": "invoices_pdf_file_id_files_id_fk",
"tableFrom": "invoices",
"tableTo": "files",
"columnsFrom": ["pdf_file_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.ports": {
"name": "ports",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"slug": {
"name": "slug",
"type": "text",
"primaryKey": false,
"notNull": true
},
"logo_url": {
"name": "logo_url",
"type": "text",
"primaryKey": false,
"notNull": false
},
"primary_color": {
"name": "primary_color",
"type": "text",
"primaryKey": false,
"notNull": false
},
"default_currency": {
"name": "default_currency",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'USD'"
},
"timezone": {
"name": "timezone",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'America/Anguilla'"
},
"settings": {
"name": "settings",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"is_active": {
"name": "is_active",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"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": {
"ports_slug_idx": {
"name": "ports_slug_idx",
"columns": [
{
"expression": "slug",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.account": {
"name": "account",
"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 with time zone",
"primaryKey": false,
"notNull": false
},
"refresh_token_expires_at": {
"name": "refresh_token_expires_at",
"type": "timestamp with time zone",
"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 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": {},
"foreignKeys": {
"account_user_id_user_id_fk": {
"name": "account_user_id_user_id_fk",
"tableFrom": "account",
"tableTo": "user",
"columnsFrom": ["user_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.port_role_overrides": {
"name": "port_role_overrides",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"role_id": {
"name": "role_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"permission_overrides": {
"name": "permission_overrides",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"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": {
"port_role_overrides_port_role_idx": {
"name": "port_role_overrides_port_role_idx",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "role_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"port_role_overrides_port_idx": {
"name": "port_role_overrides_port_idx",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"port_role_overrides_port_id_ports_id_fk": {
"name": "port_role_overrides_port_id_ports_id_fk",
"tableFrom": "port_role_overrides",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"port_role_overrides_role_id_roles_id_fk": {
"name": "port_role_overrides_role_id_roles_id_fk",
"tableFrom": "port_role_overrides",
"tableTo": "roles",
"columnsFrom": ["role_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.roles": {
"name": "roles",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": false
},
"permissions": {
"name": "permissions",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"is_global": {
"name": "is_global",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"is_system": {
"name": "is_system",
"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": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.session": {
"name": "session",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"token": {
"name": "token",
"type": "text",
"primaryKey": false,
"notNull": true
},
"expires_at": {
"name": "expires_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"ip_address": {
"name": "ip_address",
"type": "text",
"primaryKey": false,
"notNull": false
},
"user_agent": {
"name": "user_agent",
"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": {
"sessions_token_idx": {
"name": "sessions_token_idx",
"columns": [
{
"expression": "token",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"sessions_user_id_idx": {
"name": "sessions_user_id_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"session_token_unique": {
"name": "session_token_unique",
"nullsNotDistinct": false,
"columns": ["token"]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.user": {
"name": "user",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": true
},
"email_verified": {
"name": "email_verified",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"image": {
"name": "image",
"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": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"user_email_unique": {
"name": "user_email_unique",
"nullsNotDistinct": false,
"columns": ["email"]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.user_port_roles": {
"name": "user_port_roles",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"role_id": {
"name": "role_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"assigned_by": {
"name": "assigned_by",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"user_port_roles_user_port_role_idx": {
"name": "user_port_roles_user_port_role_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "role_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_upr_user": {
"name": "idx_upr_user",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_upr_port": {
"name": "idx_upr_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"user_port_roles_port_id_ports_id_fk": {
"name": "user_port_roles_port_id_ports_id_fk",
"tableFrom": "user_port_roles",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
},
"user_port_roles_role_id_roles_id_fk": {
"name": "user_port_roles_role_id_roles_id_fk",
"tableFrom": "user_port_roles",
"tableTo": "roles",
"columnsFrom": ["role_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.user_profiles": {
"name": "user_profiles",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"display_name": {
"name": "display_name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"avatar_url": {
"name": "avatar_url",
"type": "text",
"primaryKey": false,
"notNull": false
},
"phone": {
"name": "phone",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_super_admin": {
"name": "is_super_admin",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"is_active": {
"name": "is_active",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"last_login_at": {
"name": "last_login_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"preferences": {
"name": "preferences",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"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": {
"user_profiles_user_id_idx": {
"name": "user_profiles_user_id_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"user_profiles_user_id_unique": {
"name": "user_profiles_user_id_unique",
"nullsNotDistinct": false,
"columns": ["user_id"]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.verification": {
"name": "verification",
"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 with time zone",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.yacht_notes": {
"name": "yacht_notes",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"yacht_id": {
"name": "yacht_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"author_id": {
"name": "author_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true
},
"mentions": {
"name": "mentions",
"type": "text[]",
"primaryKey": false,
"notNull": false
},
"is_locked": {
"name": "is_locked",
"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": {
"idx_yn_yacht": {
"name": "idx_yn_yacht",
"columns": [
{
"expression": "yacht_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"yacht_notes_yacht_id_yachts_id_fk": {
"name": "yacht_notes_yacht_id_yachts_id_fk",
"tableFrom": "yacht_notes",
"tableTo": "yachts",
"columnsFrom": ["yacht_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.yacht_ownership_history": {
"name": "yacht_ownership_history",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"yacht_id": {
"name": "yacht_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"owner_type": {
"name": "owner_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"owner_id": {
"name": "owner_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"start_date": {
"name": "start_date",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"end_date": {
"name": "end_date",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"transfer_reason": {
"name": "transfer_reason",
"type": "text",
"primaryKey": false,
"notNull": false
},
"transfer_notes": {
"name": "transfer_notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_yoh_yacht": {
"name": "idx_yoh_yacht",
"columns": [
{
"expression": "yacht_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_yoh_active": {
"name": "idx_yoh_active",
"columns": [
{
"expression": "yacht_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"where": "\"yacht_ownership_history\".\"end_date\" IS NULL",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"yacht_ownership_history_yacht_id_yachts_id_fk": {
"name": "yacht_ownership_history_yacht_id_yachts_id_fk",
"tableFrom": "yacht_ownership_history",
"tableTo": "yachts",
"columnsFrom": ["yacht_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.yacht_tags": {
"name": "yacht_tags",
"schema": "",
"columns": {
"yacht_id": {
"name": "yacht_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"tag_id": {
"name": "tag_id",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {
"yacht_tags_yacht_id_yachts_id_fk": {
"name": "yacht_tags_yacht_id_yachts_id_fk",
"tableFrom": "yacht_tags",
"tableTo": "yachts",
"columnsFrom": ["yacht_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"yacht_tags_yacht_id_tag_id_pk": {
"name": "yacht_tags_yacht_id_tag_id_pk",
"columns": ["yacht_id", "tag_id"]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.yachts": {
"name": "yachts",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"hull_number": {
"name": "hull_number",
"type": "text",
"primaryKey": false,
"notNull": false
},
"registration": {
"name": "registration",
"type": "text",
"primaryKey": false,
"notNull": false
},
"flag": {
"name": "flag",
"type": "text",
"primaryKey": false,
"notNull": false
},
"year_built": {
"name": "year_built",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"builder": {
"name": "builder",
"type": "text",
"primaryKey": false,
"notNull": false
},
"model": {
"name": "model",
"type": "text",
"primaryKey": false,
"notNull": false
},
"hull_material": {
"name": "hull_material",
"type": "text",
"primaryKey": false,
"notNull": false
},
"length_ft": {
"name": "length_ft",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"width_ft": {
"name": "width_ft",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"draft_ft": {
"name": "draft_ft",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"length_m": {
"name": "length_m",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"width_m": {
"name": "width_m",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"draft_m": {
"name": "draft_m",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"current_owner_type": {
"name": "current_owner_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"current_owner_id": {
"name": "current_owner_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'active'"
},
"notes": {
"name": "notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"archived_at": {
"name": "archived_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_yachts_port": {
"name": "idx_yachts_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_yachts_current_owner": {
"name": "idx_yachts_current_owner",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "current_owner_type",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "current_owner_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_yachts_name": {
"name": "idx_yachts_name",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "name",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_yachts_archived": {
"name": "idx_yachts_archived",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "archived_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"yachts_port_id_ports_id_fk": {
"name": "yachts_port_id_ports_id_fk",
"tableFrom": "yachts",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.interest_notes": {
"name": "interest_notes",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"interest_id": {
"name": "interest_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"author_id": {
"name": "author_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true
},
"mentions": {
"name": "mentions",
"type": "text[]",
"primaryKey": false,
"notNull": false
},
"is_locked": {
"name": "is_locked",
"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": {
"idx_in_interest": {
"name": "idx_in_interest",
"columns": [
{
"expression": "interest_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"interest_notes_interest_id_interests_id_fk": {
"name": "interest_notes_interest_id_interests_id_fk",
"tableFrom": "interest_notes",
"tableTo": "interests",
"columnsFrom": ["interest_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.interest_tags": {
"name": "interest_tags",
"schema": "",
"columns": {
"interest_id": {
"name": "interest_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"tag_id": {
"name": "tag_id",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {
"interest_tags_interest_id_interests_id_fk": {
"name": "interest_tags_interest_id_interests_id_fk",
"tableFrom": "interest_tags",
"tableTo": "interests",
"columnsFrom": ["interest_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"interest_tags_interest_id_tag_id_pk": {
"name": "interest_tags_interest_id_tag_id_pk",
"columns": ["interest_id", "tag_id"]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.interests": {
"name": "interests",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"berth_id": {
"name": "berth_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"yacht_id": {
"name": "yacht_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"pipeline_stage": {
"name": "pipeline_stage",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'open'"
},
"lead_category": {
"name": "lead_category",
"type": "text",
"primaryKey": false,
"notNull": false
},
"source": {
"name": "source",
"type": "text",
"primaryKey": false,
"notNull": false
},
"eoi_status": {
"name": "eoi_status",
"type": "text",
"primaryKey": false,
"notNull": false
},
"documenso_id": {
"name": "documenso_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"contract_status": {
"name": "contract_status",
"type": "text",
"primaryKey": false,
"notNull": false
},
"deposit_status": {
"name": "deposit_status",
"type": "text",
"primaryKey": false,
"notNull": false
},
"reservation_status": {
"name": "reservation_status",
"type": "text",
"primaryKey": false,
"notNull": false
},
"date_first_contact": {
"name": "date_first_contact",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"date_last_contact": {
"name": "date_last_contact",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"date_eoi_sent": {
"name": "date_eoi_sent",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"date_eoi_signed": {
"name": "date_eoi_signed",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"date_contract_sent": {
"name": "date_contract_sent",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"date_contract_signed": {
"name": "date_contract_signed",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"date_deposit_received": {
"name": "date_deposit_received",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"reminder_enabled": {
"name": "reminder_enabled",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"reminder_days": {
"name": "reminder_days",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"reminder_last_fired": {
"name": "reminder_last_fired",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"notes": {
"name": "notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"archived_at": {
"name": "archived_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_interests_port": {
"name": "idx_interests_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_interests_client": {
"name": "idx_interests_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_interests_berth": {
"name": "idx_interests_berth",
"columns": [
{
"expression": "berth_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_interests_yacht": {
"name": "idx_interests_yacht",
"columns": [
{
"expression": "yacht_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_interests_stage": {
"name": "idx_interests_stage",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "pipeline_stage",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_interests_archived": {
"name": "idx_interests_archived",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "archived_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"interests_port_id_ports_id_fk": {
"name": "interests_port_id_ports_id_fk",
"tableFrom": "interests",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"interests_client_id_clients_id_fk": {
"name": "interests_client_id_clients_id_fk",
"tableFrom": "interests",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.berth_reservations": {
"name": "berth_reservations",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"berth_id": {
"name": "berth_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"yacht_id": {
"name": "yacht_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"interest_id": {
"name": "interest_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true
},
"start_date": {
"name": "start_date",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"end_date": {
"name": "end_date",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"tenure_type": {
"name": "tenure_type",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'permanent'"
},
"contract_file_id": {
"name": "contract_file_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"notes": {
"name": "notes",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"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": {
"idx_br_berth": {
"name": "idx_br_berth",
"columns": [
{
"expression": "berth_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_br_client": {
"name": "idx_br_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_br_yacht": {
"name": "idx_br_yacht",
"columns": [
{
"expression": "yacht_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_br_port": {
"name": "idx_br_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_br_active": {
"name": "idx_br_active",
"columns": [
{
"expression": "berth_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"where": "\"berth_reservations\".\"status\" = 'active'",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"berth_reservations_berth_id_berths_id_fk": {
"name": "berth_reservations_berth_id_berths_id_fk",
"tableFrom": "berth_reservations",
"tableTo": "berths",
"columnsFrom": ["berth_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"berth_reservations_port_id_ports_id_fk": {
"name": "berth_reservations_port_id_ports_id_fk",
"tableFrom": "berth_reservations",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"berth_reservations_client_id_clients_id_fk": {
"name": "berth_reservations_client_id_clients_id_fk",
"tableFrom": "berth_reservations",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"berth_reservations_yacht_id_yachts_id_fk": {
"name": "berth_reservations_yacht_id_yachts_id_fk",
"tableFrom": "berth_reservations",
"tableTo": "yachts",
"columnsFrom": ["yacht_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"berth_reservations_interest_id_interests_id_fk": {
"name": "berth_reservations_interest_id_interests_id_fk",
"tableFrom": "berth_reservations",
"tableTo": "interests",
"columnsFrom": ["interest_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"berth_reservations_contract_file_id_files_id_fk": {
"name": "berth_reservations_contract_file_id_files_id_fk",
"tableFrom": "berth_reservations",
"tableTo": "files",
"columnsFrom": ["contract_file_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.portal_auth_tokens": {
"name": "portal_auth_tokens",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"portal_user_id": {
"name": "portal_user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"token_hash": {
"name": "token_hash",
"type": "text",
"primaryKey": false,
"notNull": true
},
"type": {
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"expires_at": {
"name": "expires_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"used_at": {
"name": "used_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": {
"idx_portal_tokens_hash_unique": {
"name": "idx_portal_tokens_hash_unique",
"columns": [
{
"expression": "token_hash",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_portal_tokens_user": {
"name": "idx_portal_tokens_user",
"columns": [
{
"expression": "portal_user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"portal_auth_tokens_portal_user_id_portal_users_id_fk": {
"name": "portal_auth_tokens_portal_user_id_portal_users_id_fk",
"tableFrom": "portal_auth_tokens",
"tableTo": "portal_users",
"columnsFrom": ["portal_user_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.portal_users": {
"name": "portal_users",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": true
},
"password_hash": {
"name": "password_hash",
"type": "text",
"primaryKey": false,
"notNull": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_active": {
"name": "is_active",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"last_login_at": {
"name": "last_login_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"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": {
"idx_portal_users_email_unique": {
"name": "idx_portal_users_email_unique",
"columns": [
{
"expression": "email",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_portal_users_client": {
"name": "idx_portal_users_client",
"columns": [
{
"expression": "client_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_portal_users_port": {
"name": "idx_portal_users_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"portal_users_port_id_ports_id_fk": {
"name": "portal_users_port_id_ports_id_fk",
"tableFrom": "portal_users",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"portal_users_client_id_clients_id_fk": {
"name": "portal_users_client_id_clients_id_fk",
"tableFrom": "portal_users",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.generated_reports": {
"name": "generated_reports",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"scheduled_report_id": {
"name": "scheduled_report_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"report_type": {
"name": "report_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'queued'"
},
"parameters": {
"name": "parameters",
"type": "jsonb",
"primaryKey": false,
"notNull": false,
"default": "'{}'::jsonb"
},
"file_id": {
"name": "file_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"error_message": {
"name": "error_message",
"type": "text",
"primaryKey": false,
"notNull": false
},
"requested_by": {
"name": "requested_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"started_at": {
"name": "started_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"completed_at": {
"name": "completed_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_gr_port_created": {
"name": "idx_gr_port_created",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_gr_port_status": {
"name": "idx_gr_port_status",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_gr_scheduled": {
"name": "idx_gr_scheduled",
"columns": [
{
"expression": "scheduled_report_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"generated_reports\".\"scheduled_report_id\" IS NOT NULL",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"generated_reports_port_id_ports_id_fk": {
"name": "generated_reports_port_id_ports_id_fk",
"tableFrom": "generated_reports",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"generated_reports_scheduled_report_id_scheduled_reports_id_fk": {
"name": "generated_reports_scheduled_report_id_scheduled_reports_id_fk",
"tableFrom": "generated_reports",
"tableTo": "scheduled_reports",
"columnsFrom": ["scheduled_report_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"generated_reports_file_id_files_id_fk": {
"name": "generated_reports_file_id_files_id_fk",
"tableFrom": "generated_reports",
"tableTo": "files",
"columnsFrom": ["file_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.google_calendar_cache": {
"name": "google_calendar_cache",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"event_id": {
"name": "event_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"title": {
"name": "title",
"type": "text",
"primaryKey": false,
"notNull": true
},
"start_at": {
"name": "start_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"end_at": {
"name": "end_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"location": {
"name": "location",
"type": "text",
"primaryKey": false,
"notNull": false
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_crm_pushed": {
"name": "is_crm_pushed",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"reminder_id": {
"name": "reminder_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"fetched_at": {
"name": "fetched_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"gcal_cache_user_event_idx": {
"name": "gcal_cache_user_event_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "event_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_gcal_cache_user": {
"name": "idx_gcal_cache_user",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "start_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"google_calendar_cache_reminder_id_reminders_id_fk": {
"name": "google_calendar_cache_reminder_id_reminders_id_fk",
"tableFrom": "google_calendar_cache",
"tableTo": "reminders",
"columnsFrom": ["reminder_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.google_calendar_tokens": {
"name": "google_calendar_tokens",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"access_token": {
"name": "access_token",
"type": "text",
"primaryKey": false,
"notNull": true
},
"refresh_token": {
"name": "refresh_token",
"type": "text",
"primaryKey": false,
"notNull": true
},
"token_expiry": {
"name": "token_expiry",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"calendar_id": {
"name": "calendar_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'primary'"
},
"connected_at": {
"name": "connected_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"last_sync_at": {
"name": "last_sync_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"sync_enabled": {
"name": "sync_enabled",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"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": {
"gcal_tokens_user_id_idx": {
"name": "gcal_tokens_user_id_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"google_calendar_tokens_user_id_unique": {
"name": "google_calendar_tokens_user_id_unique",
"nullsNotDistinct": false,
"columns": ["user_id"]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.notifications": {
"name": "notifications",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"type": {
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"title": {
"name": "title",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": false
},
"link": {
"name": "link",
"type": "text",
"primaryKey": false,
"notNull": false
},
"entity_type": {
"name": "entity_type",
"type": "text",
"primaryKey": false,
"notNull": false
},
"entity_id": {
"name": "entity_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_read": {
"name": "is_read",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"email_sent": {
"name": "email_sent",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"metadata": {
"name": "metadata",
"type": "jsonb",
"primaryKey": false,
"notNull": false,
"default": "'{}'::jsonb"
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_notif_user": {
"name": "idx_notif_user",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "is_read",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_notif_port": {
"name": "idx_notif_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_notifications_user_type": {
"name": "idx_notifications_user_type",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "type",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"notifications_port_id_ports_id_fk": {
"name": "notifications_port_id_ports_id_fk",
"tableFrom": "notifications",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.reminders": {
"name": "reminders",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"title": {
"name": "title",
"type": "text",
"primaryKey": false,
"notNull": true
},
"note": {
"name": "note",
"type": "text",
"primaryKey": false,
"notNull": false
},
"due_at": {
"name": "due_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"priority": {
"name": "priority",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'medium'"
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'pending'"
},
"assigned_to": {
"name": "assigned_to",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"client_id": {
"name": "client_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"interest_id": {
"name": "interest_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"berth_id": {
"name": "berth_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"auto_generated": {
"name": "auto_generated",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"google_calendar_event_id": {
"name": "google_calendar_event_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"google_calendar_synced": {
"name": "google_calendar_synced",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"snoozed_until": {
"name": "snoozed_until",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"completed_at": {
"name": "completed_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_reminders_port": {
"name": "idx_reminders_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_reminders_assigned": {
"name": "idx_reminders_assigned",
"columns": [
{
"expression": "assigned_to",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_reminders_due": {
"name": "idx_reminders_due",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "due_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"reminders\".\"status\" IN ('pending', 'snoozed')",
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"reminders_port_id_ports_id_fk": {
"name": "reminders_port_id_ports_id_fk",
"tableFrom": "reminders",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"reminders_client_id_clients_id_fk": {
"name": "reminders_client_id_clients_id_fk",
"tableFrom": "reminders",
"tableTo": "clients",
"columnsFrom": ["client_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.report_recipients": {
"name": "report_recipients",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"report_id": {
"name": "report_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"report_recipients_report_email_idx": {
"name": "report_recipients_report_email_idx",
"columns": [
{
"expression": "report_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "email",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_rr_report": {
"name": "idx_rr_report",
"columns": [
{
"expression": "report_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"report_recipients_report_id_scheduled_reports_id_fk": {
"name": "report_recipients_report_id_scheduled_reports_id_fk",
"tableFrom": "report_recipients",
"tableTo": "scheduled_reports",
"columnsFrom": ["report_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.scheduled_reports": {
"name": "scheduled_reports",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"report_type": {
"name": "report_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"schedule": {
"name": "schedule",
"type": "text",
"primaryKey": false,
"notNull": true
},
"last_run_at": {
"name": "last_run_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"next_run_at": {
"name": "next_run_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"is_active": {
"name": "is_active",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"config": {
"name": "config",
"type": "jsonb",
"primaryKey": false,
"notNull": false,
"default": "'{}'::jsonb"
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"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": {
"idx_sr_port": {
"name": "idx_sr_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"scheduled_reports_port_id_ports_id_fk": {
"name": "scheduled_reports_port_id_ports_id_fk",
"tableFrom": "scheduled_reports",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"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
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"action": {
"name": "action",
"type": "text",
"primaryKey": false,
"notNull": true
},
"entity_type": {
"name": "entity_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"entity_id": {
"name": "entity_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"field_changed": {
"name": "field_changed",
"type": "text",
"primaryKey": false,
"notNull": false
},
"old_value": {
"name": "old_value",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"new_value": {
"name": "new_value",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"ip_address": {
"name": "ip_address",
"type": "text",
"primaryKey": false,
"notNull": false
},
"user_agent": {
"name": "user_agent",
"type": "text",
"primaryKey": false,
"notNull": false
},
"reverted_by": {
"name": "reverted_by",
"type": "text",
"primaryKey": false,
"notNull": false
},
"reverted_at": {
"name": "reverted_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"revert_of": {
"name": "revert_of",
"type": "text",
"primaryKey": false,
"notNull": false
},
"metadata": {
"name": "metadata",
"type": "jsonb",
"primaryKey": false,
"notNull": false,
"default": "'{}'::jsonb"
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_al_port": {
"name": "idx_al_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_al_entity": {
"name": "idx_al_entity",
"columns": [
{
"expression": "entity_type",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "entity_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_al_user": {
"name": "idx_al_user",
"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": {}
},
"idx_al_created": {
"name": "idx_al_created",
"columns": [
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"audit_logs_port_id_ports_id_fk": {
"name": "audit_logs_port_id_ports_id_fk",
"tableFrom": "audit_logs",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
},
"audit_logs_revert_of_audit_logs_id_fk": {
"name": "audit_logs_revert_of_audit_logs_id_fk",
"tableFrom": "audit_logs",
"tableTo": "audit_logs",
"columnsFrom": ["revert_of"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.currency_rates": {
"name": "currency_rates",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"base_currency": {
"name": "base_currency",
"type": "text",
"primaryKey": false,
"notNull": true
},
"target_currency": {
"name": "target_currency",
"type": "text",
"primaryKey": false,
"notNull": true
},
"rate": {
"name": "rate",
"type": "numeric",
"primaryKey": false,
"notNull": true
},
"source": {
"name": "source",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'frankfurter'"
},
"fetched_at": {
"name": "fetched_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"currency_rates_base_target_idx": {
"name": "currency_rates_base_target_idx",
"columns": [
{
"expression": "base_currency",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "target_currency",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.custom_field_definitions": {
"name": "custom_field_definitions",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"entity_type": {
"name": "entity_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"field_name": {
"name": "field_name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"field_label": {
"name": "field_label",
"type": "text",
"primaryKey": false,
"notNull": true
},
"field_type": {
"name": "field_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"select_options": {
"name": "select_options",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"is_required": {
"name": "is_required",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"sort_order": {
"name": "sort_order",
"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": {
"cfd_port_entity_name_idx": {
"name": "cfd_port_entity_name_idx",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "entity_type",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "field_name",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_cfd_port": {
"name": "idx_cfd_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"custom_field_definitions_port_id_ports_id_fk": {
"name": "custom_field_definitions_port_id_ports_id_fk",
"tableFrom": "custom_field_definitions",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.custom_field_values": {
"name": "custom_field_values",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"field_id": {
"name": "field_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"entity_id": {
"name": "entity_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"value": {
"name": "value",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"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": {
"cfv_field_entity_idx": {
"name": "cfv_field_entity_idx",
"columns": [
{
"expression": "field_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "entity_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_cfv_entity": {
"name": "idx_cfv_entity",
"columns": [
{
"expression": "entity_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"custom_field_values_field_id_custom_field_definitions_id_fk": {
"name": "custom_field_values_field_id_custom_field_definitions_id_fk",
"tableFrom": "custom_field_values",
"tableTo": "custom_field_definitions",
"columnsFrom": ["field_id"],
"columnsTo": ["id"],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.saved_views": {
"name": "saved_views",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"entity_type": {
"name": "entity_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"filters": {
"name": "filters",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"sort_config": {
"name": "sort_config",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"column_config": {
"name": "column_config",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"is_shared": {
"name": "is_shared",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"is_default": {
"name": "is_default",
"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": {
"idx_sv_user": {
"name": "idx_sv_user",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "entity_type",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"saved_views_port_id_ports_id_fk": {
"name": "saved_views_port_id_ports_id_fk",
"tableFrom": "saved_views",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.scratchpad_notes": {
"name": "scratchpad_notes",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true
},
"linked_client_id": {
"name": "linked_client_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"linked_at": {
"name": "linked_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()"
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"idx_sp_user": {
"name": "idx_sp_user",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"scratchpad_notes_linked_client_id_clients_id_fk": {
"name": "scratchpad_notes_linked_client_id_clients_id_fk",
"tableFrom": "scratchpad_notes",
"tableTo": "clients",
"columnsFrom": ["linked_client_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.system_settings": {
"name": "system_settings",
"schema": "",
"columns": {
"key": {
"name": "key",
"type": "text",
"primaryKey": false,
"notNull": true
},
"value": {
"name": "value",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"updated_by": {
"name": "updated_by",
"type": "text",
"primaryKey": false,
"notNull": false
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"system_settings_key_port_idx": {
"name": "system_settings_key_port_idx",
"columns": [
{
"expression": "key",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"system_settings_port_id_ports_id_fk": {
"name": "system_settings_port_id_ports_id_fk",
"tableFrom": "system_settings",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.tags": {
"name": "tags",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"color": {
"name": "color",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'#6B7280'"
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"tags_port_name_idx": {
"name": "tags_port_name_idx",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "name",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
},
"idx_tags_port": {
"name": "idx_tags_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"tags_port_id_ports_id_fk": {
"name": "tags_port_id_ports_id_fk",
"tableFrom": "tags",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.user_notification_preferences": {
"name": "user_notification_preferences",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"notification_type": {
"name": "notification_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"in_app": {
"name": "in_app",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"email": {
"name": "email",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
}
},
"indexes": {
"unp_user_port_type_idx": {
"name": "unp_user_port_type_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "notification_type",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"user_notification_preferences_port_id_ports_id_fk": {
"name": "user_notification_preferences_port_id_ports_id_fk",
"tableFrom": "user_notification_preferences",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"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_type": {
"name": "event_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"payload": {
"name": "payload",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"response_status": {
"name": "response_status",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"response_body": {
"name": "response_body",
"type": "text",
"primaryKey": false,
"notNull": false
},
"attempt": {
"name": "attempt",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 1
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'pending'"
},
"delivered_at": {
"name": "delivered_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": {
"idx_wd_webhook": {
"name": "idx_wd_webhook",
"columns": [
{
"expression": "webhook_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"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
},
"port_id": {
"name": "port_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"url": {
"name": "url",
"type": "text",
"primaryKey": false,
"notNull": true
},
"secret": {
"name": "secret",
"type": "text",
"primaryKey": false,
"notNull": false
},
"events": {
"name": "events",
"type": "text[]",
"primaryKey": false,
"notNull": true
},
"is_active": {
"name": "is_active",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"created_by": {
"name": "created_by",
"type": "text",
"primaryKey": false,
"notNull": true
},
"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": {
"idx_webhooks_port": {
"name": "idx_webhooks_port",
"columns": [
{
"expression": "port_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"webhooks_port_id_ports_id_fk": {
"name": "webhooks_port_id_ports_id_fk",
"tableFrom": "webhooks",
"tableTo": "ports",
"columnsFrom": ["port_id"],
"columnsTo": ["id"],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
}
},
"enums": {},
"schemas": {},
"sequences": {},
"roles": {},
"policies": {},
"views": {},
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
}
}