feat: add contact management functionality
- Implemented ContactForm component for creating and editing contacts. - Added ProjectContactSelector component to manage project-specific contacts. - Updated ProjectForm to include ProjectContactSelector for associating contacts with projects. - Enhanced Card component with a new CardTitle subcomponent for better structure. - Updated Navigation to include a link to the contacts page. - Added translations for contact-related terms in the i18n module. - Initialized contacts database schema and created necessary tables for contact management. - Developed queries for CRUD operations on contacts, including linking and unlinking contacts to projects. - Created a test script to validate contact queries against the database.
This commit is contained in:
@@ -515,4 +515,44 @@ export default function initializeDatabase() {
|
||||
INSERT OR IGNORE INTO settings (key, value, description) VALUES
|
||||
('backup_notification_user_id', '', 'User ID to receive backup completion notifications');
|
||||
`);
|
||||
|
||||
// Contacts table for managing contact information
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS contacts (
|
||||
contact_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
phone TEXT,
|
||||
email TEXT,
|
||||
company TEXT,
|
||||
position TEXT,
|
||||
contact_type TEXT CHECK(contact_type IN ('project', 'contractor', 'office', 'supplier', 'other')) DEFAULT 'other',
|
||||
notes TEXT,
|
||||
is_active INTEGER DEFAULT 1,
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Project contacts junction table (many-to-many relationship)
|
||||
CREATE TABLE IF NOT EXISTS project_contacts (
|
||||
project_id INTEGER NOT NULL,
|
||||
contact_id INTEGER NOT NULL,
|
||||
relationship_type TEXT DEFAULT 'general',
|
||||
is_primary INTEGER DEFAULT 0,
|
||||
added_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
added_by TEXT,
|
||||
PRIMARY KEY (project_id, contact_id),
|
||||
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (contact_id) REFERENCES contacts(contact_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (added_by) REFERENCES users(id)
|
||||
);
|
||||
|
||||
-- Indexes for contacts
|
||||
CREATE INDEX IF NOT EXISTS idx_contacts_name ON contacts(name);
|
||||
CREATE INDEX IF NOT EXISTS idx_contacts_type ON contacts(contact_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_contacts_active ON contacts(is_active);
|
||||
CREATE INDEX IF NOT EXISTS idx_contacts_phone ON contacts(phone);
|
||||
CREATE INDEX IF NOT EXISTS idx_contacts_email ON contacts(email);
|
||||
CREATE INDEX IF NOT EXISTS idx_project_contacts_project ON project_contacts(project_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_project_contacts_contact ON project_contacts(contact_id);
|
||||
`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user