Files
beenvoice/drizzle/meta/0001_snapshot.json
T
Claude e6b79ce2c2 Add bulk actions, multi-currency, expenses, templates, and reports
Schema (migration 0001):
- clients: add currency column (default USD)
- invoices: add currency column (default USD)
- New expenses table: amount, currency, category, billable, reimbursable,
  client/invoice/business relations, notes
- New invoice_templates table: name, type (notes|terms), content, isDefault

API:
- invoices: add bulkUpdateStatus and bulkDelete procedures (ownership-safe)
- invoices: currency field threaded through create/update schemas
- clients: currency field added to create/update schemas
- New expenses router: full CRUD with authorization
- New invoiceTemplates router: full CRUD, isDefault management per type
- Root router: wire in expenses and invoiceTemplates

Currency (src/lib/currency.ts):
- Shared formatCurrency(amount, currency) utility replacing hardcoded USD
- SUPPORTED_CURRENCIES list (17 currencies)
- Invoice form: currency selector in Config card, auto-fills from client
- Client form: currency selector in Billing Information card

Bulk actions (invoices list):
- Checkbox column with select-all support
- Selection toolbar: Mark as Sent/Paid/Draft dropdown, Delete (N) button
- DataTable: new selectionActions prop renders toolbar when rows selected

Notes templates:
- Invoice form: Notes card with textarea in Details tab
- Template dropdown button appears when templates exist
- /dashboard/invoices/templates: full CRUD page for notes and terms templates

New pages:
- /dashboard/expenses: expense list with summary cards, add/edit dialog
- /dashboard/reports: KPI cards, 12-month revenue area chart, top clients
  bar chart, status breakdown, recent activity
- Navigation: Expenses and Reports added to Main section

https://claude.ai/code/session_012sqEgNQpx676isepeoX4Mi
2026-04-05 02:34:06 +00:00

1618 lines
42 KiB
JSON

{
"id": "7dc54995-f82a-4650-a7d6-9e7e4db678ee",
"prevId": "f6c70548-143c-48a3-a0c5-85873eaaa326",
"version": "7",
"dialect": "postgresql",
"tables": {
"public.beenvoice_account": {
"name": "beenvoice_account",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"userId": {
"name": "userId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"accountId": {
"name": "accountId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"providerId": {
"name": "providerId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"accessToken": {
"name": "accessToken",
"type": "text",
"primaryKey": false,
"notNull": false
},
"refreshToken": {
"name": "refreshToken",
"type": "text",
"primaryKey": false,
"notNull": false
},
"accessTokenExpiresAt": {
"name": "accessTokenExpiresAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false
},
"refreshTokenExpiresAt": {
"name": "refreshTokenExpiresAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false
},
"scope": {
"name": "scope",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"idToken": {
"name": "idToken",
"type": "text",
"primaryKey": false,
"notNull": false
},
"password": {
"name": "password",
"type": "text",
"primaryKey": false,
"notNull": false
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"account_userId_idx": {
"name": "account_userId_idx",
"columns": [
{
"expression": "userId",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"beenvoice_account_userId_beenvoice_user_id_fk": {
"name": "beenvoice_account_userId_beenvoice_user_id_fk",
"tableFrom": "beenvoice_account",
"tableTo": "beenvoice_user",
"columnsFrom": [
"userId"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_business": {
"name": "beenvoice_business",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "varchar(255)",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"nickname": {
"name": "nickname",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"email": {
"name": "email",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"phone": {
"name": "phone",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false
},
"addressLine1": {
"name": "addressLine1",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"addressLine2": {
"name": "addressLine2",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"city": {
"name": "city",
"type": "varchar(100)",
"primaryKey": false,
"notNull": false
},
"state": {
"name": "state",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false
},
"postalCode": {
"name": "postalCode",
"type": "varchar(20)",
"primaryKey": false,
"notNull": false
},
"country": {
"name": "country",
"type": "varchar(100)",
"primaryKey": false,
"notNull": false
},
"website": {
"name": "website",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"taxId": {
"name": "taxId",
"type": "varchar(100)",
"primaryKey": false,
"notNull": false
},
"logoUrl": {
"name": "logoUrl",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false
},
"isDefault": {
"name": "isDefault",
"type": "boolean",
"primaryKey": false,
"notNull": false,
"default": false
},
"resendApiKey": {
"name": "resendApiKey",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"resendDomain": {
"name": "resendDomain",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"emailFromName": {
"name": "emailFromName",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"createdById": {
"name": "createdById",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "CURRENT_TIMESTAMP"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"business_created_by_idx": {
"name": "business_created_by_idx",
"columns": [
{
"expression": "createdById",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"business_name_idx": {
"name": "business_name_idx",
"columns": [
{
"expression": "name",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"business_nickname_idx": {
"name": "business_nickname_idx",
"columns": [
{
"expression": "nickname",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"business_email_idx": {
"name": "business_email_idx",
"columns": [
{
"expression": "email",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"business_is_default_idx": {
"name": "business_is_default_idx",
"columns": [
{
"expression": "isDefault",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"beenvoice_business_createdById_beenvoice_user_id_fk": {
"name": "beenvoice_business_createdById_beenvoice_user_id_fk",
"tableFrom": "beenvoice_business",
"tableTo": "beenvoice_user",
"columnsFrom": [
"createdById"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_client": {
"name": "beenvoice_client",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "varchar(255)",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"email": {
"name": "email",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"phone": {
"name": "phone",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false
},
"addressLine1": {
"name": "addressLine1",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"addressLine2": {
"name": "addressLine2",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"city": {
"name": "city",
"type": "varchar(100)",
"primaryKey": false,
"notNull": false
},
"state": {
"name": "state",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false
},
"postalCode": {
"name": "postalCode",
"type": "varchar(20)",
"primaryKey": false,
"notNull": false
},
"country": {
"name": "country",
"type": "varchar(100)",
"primaryKey": false,
"notNull": false
},
"defaultHourlyRate": {
"name": "defaultHourlyRate",
"type": "real",
"primaryKey": false,
"notNull": false
},
"currency": {
"name": "currency",
"type": "varchar(3)",
"primaryKey": false,
"notNull": true,
"default": "'USD'"
},
"createdById": {
"name": "createdById",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "CURRENT_TIMESTAMP"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"client_created_by_idx": {
"name": "client_created_by_idx",
"columns": [
{
"expression": "createdById",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"client_name_idx": {
"name": "client_name_idx",
"columns": [
{
"expression": "name",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"client_email_idx": {
"name": "client_email_idx",
"columns": [
{
"expression": "email",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"beenvoice_client_createdById_beenvoice_user_id_fk": {
"name": "beenvoice_client_createdById_beenvoice_user_id_fk",
"tableFrom": "beenvoice_client",
"tableTo": "beenvoice_user",
"columnsFrom": [
"createdById"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_expense": {
"name": "beenvoice_expense",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "varchar(255)",
"primaryKey": true,
"notNull": true
},
"businessId": {
"name": "businessId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"clientId": {
"name": "clientId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"invoiceId": {
"name": "invoiceId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"date": {
"name": "date",
"type": "timestamp",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "varchar(500)",
"primaryKey": false,
"notNull": true
},
"amount": {
"name": "amount",
"type": "real",
"primaryKey": false,
"notNull": true
},
"currency": {
"name": "currency",
"type": "varchar(3)",
"primaryKey": false,
"notNull": true,
"default": "'USD'"
},
"category": {
"name": "category",
"type": "varchar(100)",
"primaryKey": false,
"notNull": false
},
"billable": {
"name": "billable",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"reimbursable": {
"name": "reimbursable",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"notes": {
"name": "notes",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false
},
"createdById": {
"name": "createdById",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "CURRENT_TIMESTAMP"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"expense_created_by_idx": {
"name": "expense_created_by_idx",
"columns": [
{
"expression": "createdById",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"expense_client_id_idx": {
"name": "expense_client_id_idx",
"columns": [
{
"expression": "clientId",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"expense_invoice_id_idx": {
"name": "expense_invoice_id_idx",
"columns": [
{
"expression": "invoiceId",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"expense_date_idx": {
"name": "expense_date_idx",
"columns": [
{
"expression": "date",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"expense_billable_idx": {
"name": "expense_billable_idx",
"columns": [
{
"expression": "billable",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"beenvoice_expense_businessId_beenvoice_business_id_fk": {
"name": "beenvoice_expense_businessId_beenvoice_business_id_fk",
"tableFrom": "beenvoice_expense",
"tableTo": "beenvoice_business",
"columnsFrom": [
"businessId"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"beenvoice_expense_clientId_beenvoice_client_id_fk": {
"name": "beenvoice_expense_clientId_beenvoice_client_id_fk",
"tableFrom": "beenvoice_expense",
"tableTo": "beenvoice_client",
"columnsFrom": [
"clientId"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"beenvoice_expense_invoiceId_beenvoice_invoice_id_fk": {
"name": "beenvoice_expense_invoiceId_beenvoice_invoice_id_fk",
"tableFrom": "beenvoice_expense",
"tableTo": "beenvoice_invoice",
"columnsFrom": [
"invoiceId"
],
"columnsTo": [
"id"
],
"onDelete": "set null",
"onUpdate": "no action"
},
"beenvoice_expense_createdById_beenvoice_user_id_fk": {
"name": "beenvoice_expense_createdById_beenvoice_user_id_fk",
"tableFrom": "beenvoice_expense",
"tableTo": "beenvoice_user",
"columnsFrom": [
"createdById"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_invoice_item": {
"name": "beenvoice_invoice_item",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "varchar(255)",
"primaryKey": true,
"notNull": true
},
"invoiceId": {
"name": "invoiceId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"date": {
"name": "date",
"type": "timestamp",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "varchar(500)",
"primaryKey": false,
"notNull": true
},
"hours": {
"name": "hours",
"type": "real",
"primaryKey": false,
"notNull": true
},
"rate": {
"name": "rate",
"type": "real",
"primaryKey": false,
"notNull": true
},
"amount": {
"name": "amount",
"type": "real",
"primaryKey": false,
"notNull": true
},
"position": {
"name": "position",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {
"invoice_item_invoice_id_idx": {
"name": "invoice_item_invoice_id_idx",
"columns": [
{
"expression": "invoiceId",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"invoice_item_date_idx": {
"name": "invoice_item_date_idx",
"columns": [
{
"expression": "date",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"invoice_item_position_idx": {
"name": "invoice_item_position_idx",
"columns": [
{
"expression": "position",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"beenvoice_invoice_item_invoiceId_beenvoice_invoice_id_fk": {
"name": "beenvoice_invoice_item_invoiceId_beenvoice_invoice_id_fk",
"tableFrom": "beenvoice_invoice_item",
"tableTo": "beenvoice_invoice",
"columnsFrom": [
"invoiceId"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_invoice_template": {
"name": "beenvoice_invoice_template",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "varchar(255)",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"type": {
"name": "type",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"default": "'notes'"
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true
},
"isDefault": {
"name": "isDefault",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"createdById": {
"name": "createdById",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "CURRENT_TIMESTAMP"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"invoice_template_created_by_idx": {
"name": "invoice_template_created_by_idx",
"columns": [
{
"expression": "createdById",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"invoice_template_type_idx": {
"name": "invoice_template_type_idx",
"columns": [
{
"expression": "type",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"beenvoice_invoice_template_createdById_beenvoice_user_id_fk": {
"name": "beenvoice_invoice_template_createdById_beenvoice_user_id_fk",
"tableFrom": "beenvoice_invoice_template",
"tableTo": "beenvoice_user",
"columnsFrom": [
"createdById"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_invoice": {
"name": "beenvoice_invoice",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "varchar(255)",
"primaryKey": true,
"notNull": true
},
"invoiceNumber": {
"name": "invoiceNumber",
"type": "varchar(100)",
"primaryKey": false,
"notNull": true
},
"businessId": {
"name": "businessId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"clientId": {
"name": "clientId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"issueDate": {
"name": "issueDate",
"type": "timestamp",
"primaryKey": false,
"notNull": true
},
"dueDate": {
"name": "dueDate",
"type": "timestamp",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"default": "'draft'"
},
"totalAmount": {
"name": "totalAmount",
"type": "real",
"primaryKey": false,
"notNull": true,
"default": 0
},
"taxRate": {
"name": "taxRate",
"type": "real",
"primaryKey": false,
"notNull": true,
"default": 0
},
"notes": {
"name": "notes",
"type": "varchar(1000)",
"primaryKey": false,
"notNull": false
},
"currency": {
"name": "currency",
"type": "varchar(3)",
"primaryKey": false,
"notNull": true,
"default": "'USD'"
},
"createdById": {
"name": "createdById",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "CURRENT_TIMESTAMP"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"invoice_business_id_idx": {
"name": "invoice_business_id_idx",
"columns": [
{
"expression": "businessId",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"invoice_client_id_idx": {
"name": "invoice_client_id_idx",
"columns": [
{
"expression": "clientId",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"invoice_created_by_idx": {
"name": "invoice_created_by_idx",
"columns": [
{
"expression": "createdById",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"invoice_number_idx": {
"name": "invoice_number_idx",
"columns": [
{
"expression": "invoiceNumber",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"invoice_status_idx": {
"name": "invoice_status_idx",
"columns": [
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"beenvoice_invoice_businessId_beenvoice_business_id_fk": {
"name": "beenvoice_invoice_businessId_beenvoice_business_id_fk",
"tableFrom": "beenvoice_invoice",
"tableTo": "beenvoice_business",
"columnsFrom": [
"businessId"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"beenvoice_invoice_clientId_beenvoice_client_id_fk": {
"name": "beenvoice_invoice_clientId_beenvoice_client_id_fk",
"tableFrom": "beenvoice_invoice",
"tableTo": "beenvoice_client",
"columnsFrom": [
"clientId"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"beenvoice_invoice_createdById_beenvoice_user_id_fk": {
"name": "beenvoice_invoice_createdById_beenvoice_user_id_fk",
"tableFrom": "beenvoice_invoice",
"tableTo": "beenvoice_user",
"columnsFrom": [
"createdById"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_session": {
"name": "beenvoice_session",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"userId": {
"name": "userId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"token": {
"name": "token",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"expiresAt": {
"name": "expiresAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true
},
"ipAddress": {
"name": "ipAddress",
"type": "text",
"primaryKey": false,
"notNull": false
},
"userAgent": {
"name": "userAgent",
"type": "text",
"primaryKey": false,
"notNull": false
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"session_userId_idx": {
"name": "session_userId_idx",
"columns": [
{
"expression": "userId",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"beenvoice_session_userId_beenvoice_user_id_fk": {
"name": "beenvoice_session_userId_beenvoice_user_id_fk",
"tableFrom": "beenvoice_session",
"tableTo": "beenvoice_user",
"columnsFrom": [
"userId"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"beenvoice_session_token_unique": {
"name": "beenvoice_session_token_unique",
"nullsNotDistinct": false,
"columns": [
"token"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_sso_provider": {
"name": "beenvoice_sso_provider",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "varchar(255)",
"primaryKey": true,
"notNull": true
},
"providerId": {
"name": "providerId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"userId": {
"name": "userId",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"redirectURI": {
"name": "redirectURI",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"oidcConfig": {
"name": "oidcConfig",
"type": "text",
"primaryKey": false,
"notNull": false
},
"samlConfig": {
"name": "samlConfig",
"type": "text",
"primaryKey": false,
"notNull": false
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"sso_provider_user_id_idx": {
"name": "sso_provider_user_id_idx",
"columns": [
{
"expression": "userId",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"beenvoice_sso_provider_userId_beenvoice_user_id_fk": {
"name": "beenvoice_sso_provider_userId_beenvoice_user_id_fk",
"tableFrom": "beenvoice_sso_provider",
"tableTo": "beenvoice_user",
"columnsFrom": [
"userId"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"beenvoice_sso_provider_providerId_unique": {
"name": "beenvoice_sso_provider_providerId_unique",
"nullsNotDistinct": false,
"columns": [
"providerId"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_user": {
"name": "beenvoice_user",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "varchar(255)",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"email": {
"name": "email",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"emailVerified": {
"name": "emailVerified",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"image": {
"name": "image",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"password": {
"name": "password",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"resetToken": {
"name": "resetToken",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false
},
"resetTokenExpiry": {
"name": "resetTokenExpiry",
"type": "timestamp",
"primaryKey": false,
"notNull": false
},
"prefersReducedMotion": {
"name": "prefersReducedMotion",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"animationSpeedMultiplier": {
"name": "animationSpeedMultiplier",
"type": "real",
"primaryKey": false,
"notNull": true,
"default": 1
},
"colorTheme": {
"name": "colorTheme",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"default": "'slate'"
},
"customColor": {
"name": "customColor",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false
},
"theme": {
"name": "theme",
"type": "varchar(20)",
"primaryKey": false,
"notNull": true,
"default": "'system'"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"beenvoice_user_email_unique": {
"name": "beenvoice_user_email_unique",
"nullsNotDistinct": false,
"columns": [
"email"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.beenvoice_verification_token": {
"name": "beenvoice_verification_token",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"identifier": {
"name": "identifier",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"value": {
"name": "value",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true
},
"expiresAt": {
"name": "expiresAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"verification_token_identifier_idx": {
"name": "verification_token_identifier_idx",
"columns": [
{
"expression": "identifier",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
}
},
"enums": {},
"schemas": {},
"sequences": {},
"roles": {},
"policies": {},
"views": {},
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
}
}