Add demo account seed migration for App Store review.
Seeds demo@example.com with sample clients, business, and invoices via the Drizzle journal. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,172 @@
|
|||||||
|
-- App Store review demo account: demo@example.com / demo123
|
||||||
|
DO $$
|
||||||
|
DECLARE
|
||||||
|
demo_user_id varchar(255) := 'a0000000-0000-4000-8000-000000000001';
|
||||||
|
demo_account_id text := 'a0000000-0000-4000-8000-000000000010';
|
||||||
|
demo_business_id varchar(255) := 'a0000000-0000-4000-8000-000000000020';
|
||||||
|
demo_client_acme varchar(255) := 'a0000000-0000-4000-8000-000000000030';
|
||||||
|
demo_client_bright varchar(255) := 'a0000000-0000-4000-8000-000000000031';
|
||||||
|
demo_invoice_draft varchar(255) := 'a0000000-0000-4000-8000-000000000040';
|
||||||
|
demo_invoice_sent varchar(255) := 'a0000000-0000-4000-8000-000000000041';
|
||||||
|
demo_invoice_paid varchar(255) := 'a0000000-0000-4000-8000-000000000042';
|
||||||
|
demo_password_hash text := '$2b$12$90U31okgkhOwSQD5RDqHwO0QpcC.pkKsqKb1IPnHfKUZm/2A9hzs6';
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (SELECT 1 FROM "beenvoice_user" WHERE "email" = 'demo@example.com') THEN
|
||||||
|
RETURN;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
INSERT INTO "beenvoice_user" (
|
||||||
|
"id", "name", "email", "emailVerified", "password", "role"
|
||||||
|
) VALUES (
|
||||||
|
demo_user_id,
|
||||||
|
'Demo User',
|
||||||
|
'demo@example.com',
|
||||||
|
true,
|
||||||
|
demo_password_hash,
|
||||||
|
'user'
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO "beenvoice_account" (
|
||||||
|
"id", "userId", "accountId", "providerId", "password"
|
||||||
|
) VALUES (
|
||||||
|
demo_account_id,
|
||||||
|
demo_user_id,
|
||||||
|
demo_user_id,
|
||||||
|
'credential',
|
||||||
|
demo_password_hash
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO "beenvoice_business" (
|
||||||
|
"id", "name", "nickname", "email", "phone", "addressLine1", "city", "state",
|
||||||
|
"postalCode", "country", "isDefault", "createdById"
|
||||||
|
) VALUES (
|
||||||
|
demo_business_id,
|
||||||
|
'Demo Studio LLC',
|
||||||
|
'Demo Studio',
|
||||||
|
'hello@demostudio.example',
|
||||||
|
'(555) 010-2000',
|
||||||
|
'100 Market Street',
|
||||||
|
'San Francisco',
|
||||||
|
'CA',
|
||||||
|
'94105',
|
||||||
|
'United States',
|
||||||
|
true,
|
||||||
|
demo_user_id
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO "beenvoice_client" (
|
||||||
|
"id", "name", "email", "phone", "defaultHourlyRate", "currency", "createdById"
|
||||||
|
) VALUES
|
||||||
|
(
|
||||||
|
demo_client_acme,
|
||||||
|
'Acme Corporation',
|
||||||
|
'billing@acme.example',
|
||||||
|
'(555) 010-3001',
|
||||||
|
150,
|
||||||
|
'USD',
|
||||||
|
demo_user_id
|
||||||
|
),
|
||||||
|
(
|
||||||
|
demo_client_bright,
|
||||||
|
'Bright Labs',
|
||||||
|
'ap@brightlabs.example',
|
||||||
|
'(555) 010-3002',
|
||||||
|
125,
|
||||||
|
'USD',
|
||||||
|
demo_user_id
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO "beenvoice_invoice" (
|
||||||
|
"id", "invoiceNumber", "invoicePrefix", "businessId", "clientId",
|
||||||
|
"issueDate", "dueDate", "status", "totalAmount", "taxRate", "notes", "currency", "createdById"
|
||||||
|
) VALUES
|
||||||
|
(
|
||||||
|
demo_invoice_draft,
|
||||||
|
'INV-DEMO-001',
|
||||||
|
'#',
|
||||||
|
demo_business_id,
|
||||||
|
demo_client_acme,
|
||||||
|
NOW() - INTERVAL '5 days',
|
||||||
|
NOW() + INTERVAL '25 days',
|
||||||
|
'draft',
|
||||||
|
1500,
|
||||||
|
0,
|
||||||
|
'Website redesign — phase 1',
|
||||||
|
'USD',
|
||||||
|
demo_user_id
|
||||||
|
),
|
||||||
|
(
|
||||||
|
demo_invoice_sent,
|
||||||
|
'INV-DEMO-002',
|
||||||
|
'#',
|
||||||
|
demo_business_id,
|
||||||
|
demo_client_bright,
|
||||||
|
NOW() - INTERVAL '20 days',
|
||||||
|
NOW() - INTERVAL '5 days',
|
||||||
|
'sent',
|
||||||
|
2500,
|
||||||
|
0,
|
||||||
|
'Mobile app consulting',
|
||||||
|
'USD',
|
||||||
|
demo_user_id
|
||||||
|
),
|
||||||
|
(
|
||||||
|
demo_invoice_paid,
|
||||||
|
'INV-DEMO-003',
|
||||||
|
'#',
|
||||||
|
demo_business_id,
|
||||||
|
demo_client_acme,
|
||||||
|
NOW() - INTERVAL '45 days',
|
||||||
|
NOW() - INTERVAL '15 days',
|
||||||
|
'paid',
|
||||||
|
3200,
|
||||||
|
0,
|
||||||
|
'API integration project',
|
||||||
|
'USD',
|
||||||
|
demo_user_id
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO "beenvoice_invoice_item" (
|
||||||
|
"id", "invoiceId", "date", "description", "hours", "rate", "amount", "position"
|
||||||
|
) VALUES
|
||||||
|
(
|
||||||
|
'a0000000-0000-4000-8000-000000000050',
|
||||||
|
demo_invoice_draft,
|
||||||
|
NOW() - INTERVAL '5 days',
|
||||||
|
'UX wireframes and design system',
|
||||||
|
10,
|
||||||
|
150,
|
||||||
|
1500,
|
||||||
|
0
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'a0000000-0000-4000-8000-000000000051',
|
||||||
|
demo_invoice_sent,
|
||||||
|
NOW() - INTERVAL '20 days',
|
||||||
|
'Sprint planning and implementation',
|
||||||
|
20,
|
||||||
|
125,
|
||||||
|
2500,
|
||||||
|
0
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'a0000000-0000-4000-8000-000000000052',
|
||||||
|
demo_invoice_paid,
|
||||||
|
NOW() - INTERVAL '45 days',
|
||||||
|
'Backend API work',
|
||||||
|
16,
|
||||||
|
150,
|
||||||
|
2400,
|
||||||
|
0
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'a0000000-0000-4000-8000-000000000053',
|
||||||
|
demo_invoice_paid,
|
||||||
|
NOW() - INTERVAL '44 days',
|
||||||
|
'Deployment and documentation',
|
||||||
|
5.33,
|
||||||
|
150,
|
||||||
|
800,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
END $$;
|
||||||
@@ -99,6 +99,13 @@
|
|||||||
"when": 1781194385000,
|
"when": 1781194385000,
|
||||||
"tag": "0013_invoice_public_token_expiry",
|
"tag": "0013_invoice_public_token_expiry",
|
||||||
"breakpoints": true
|
"breakpoints": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idx": 14,
|
||||||
|
"version": "7",
|
||||||
|
"when": 1781300000000,
|
||||||
|
"tag": "0014_seed_demo_account",
|
||||||
|
"breakpoints": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user