feat(cardav): add Migration 30 for CardDAV contacts schema
Add comprehensive database schema for CardDAV multi-account contacts sync: New tables: - cardav_accounts: Store CardDAV server credentials - cardav_addressbook_selection: Per-account addressbook enable/disable - contact_phones: Multiple phone numbers per contact with labels - contact_emails: Multiple email addresses per contact with labels - contact_addresses: Multiple postal addresses per contact with labels Extended contacts table with 9 new columns: - organization, job_title, birthday, website, photo, nickname - cardav_account_id (FK to cardav_accounts, ON DELETE SET NULL) - cardav_uid (vCard UID from server) - cardav_addressbook_url (source addressbook URL) Features: - UNIQUE constraints on (cardav_url, username) and (account_id, addressbook_url) - CASCADE delete for addressbook selection and contact sub-tables - Performance indices for cardav_uid and email lookups - Support for manual contacts (NULL cardav_account_id) - is_primary flag for phone/email/address selection Test coverage: - 23 comprehensive tests verify all tables, constraints, indices - FK CASCADE delete behavior validated - UNIQUE constraints enforced - Data integrity scenarios tested Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+2
-1
@@ -28,7 +28,8 @@
|
||||
"test:ics-sub": "node --experimental-sqlite test-ics-subscription.js",
|
||||
"test:backup-scheduler": "node --experimental-sqlite test-backup-scheduler.js",
|
||||
"test:caldav": "node --experimental-sqlite test-caldav-sync.js",
|
||||
"test": "node --experimental-sqlite test-db.js && node --experimental-sqlite test-dashboard.js && node --experimental-sqlite test-tasks.js && node --experimental-sqlite test-shopping.js && node --experimental-sqlite test-meals.js && node --experimental-sqlite test-calendar.js && node --experimental-sqlite test-notes-contacts-budget.js && npm run test:ux-utils && npm run test:modal-utils && npm run test:reminders && npm run test:api && npm run test:ics-parser && npm run test:ics-sub && npm run test:setup && npm run test:kitchen-tabs && npm run test:backup-scheduler && npm run test:caldav"
|
||||
"test:cardav": "node --experimental-sqlite test-cardav.js",
|
||||
"test": "node --experimental-sqlite test-db.js && node --experimental-sqlite test-dashboard.js && node --experimental-sqlite test-tasks.js && node --experimental-sqlite test-shopping.js && node --experimental-sqlite test-meals.js && node --experimental-sqlite test-calendar.js && node --experimental-sqlite test-notes-contacts-budget.js && npm run test:ux-utils && npm run test:modal-utils && npm run test:reminders && npm run test:api && npm run test:ics-parser && npm run test:ics-sub && npm run test:setup && npm run test:kitchen-tabs && npm run test:backup-scheduler && npm run test:caldav && npm run test:cardav"
|
||||
},
|
||||
"dependencies": {
|
||||
"bcrypt": "^6.0.0",
|
||||
|
||||
Reference in New Issue
Block a user