feature/enhanced-litters-and-pedigree #15

Merged
jason merged 4 commits from feature/enhanced-litters-and-pedigree into master 2026-03-09 02:07:38 -05:00
Showing only changes of commit 3ae3458dfc - Show all commits

View File

@@ -16,7 +16,7 @@ function initDatabase(dbPath) {
console.log('Initializing database schema...');
// Dogs table - Core registry
// Dogs table - NO sire/dam columns, only litter_id
db.exec(`
CREATE TABLE IF NOT EXISTS dogs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -29,9 +29,11 @@ function initDatabase(dbPath) {
microchip TEXT,
photo_urls TEXT, -- JSON array of photo URLs
notes TEXT,
litter_id INTEGER,
is_active INTEGER DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (litter_id) REFERENCES litters(id) ON DELETE SET NULL
)
`);
@@ -42,7 +44,7 @@ function initDatabase(dbPath) {
WHERE microchip IS NOT NULL
`);
// Parents table - Relationship mapping
// Parents table - Stores sire/dam relationships
db.exec(`
CREATE TABLE IF NOT EXISTS parents (
id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -51,7 +53,7 @@ function initDatabase(dbPath) {
parent_type TEXT NOT NULL CHECK(parent_type IN ('sire', 'dam')),
FOREIGN KEY (dog_id) REFERENCES dogs(id) ON DELETE CASCADE,
FOREIGN KEY (parent_id) REFERENCES dogs(id) ON DELETE CASCADE,
UNIQUE(dog_id, parent_id, parent_type)
UNIQUE(dog_id, parent_type)
)
`);
@@ -122,6 +124,7 @@ function initDatabase(dbPath) {
db.exec(`
CREATE INDEX IF NOT EXISTS idx_dogs_name ON dogs(name);
CREATE INDEX IF NOT EXISTS idx_dogs_registration ON dogs(registration_number);
CREATE INDEX IF NOT EXISTS idx_dogs_litter ON dogs(litter_id);
CREATE INDEX IF NOT EXISTS idx_parents_dog ON parents(dog_id);
CREATE INDEX IF NOT EXISTS idx_parents_parent ON parents(parent_id);
CREATE INDEX IF NOT EXISTS idx_litters_sire ON litters(sire_id);
@@ -141,7 +144,10 @@ function initDatabase(dbPath) {
END;
`);
console.log('Database schema initialized successfully!');
console.log('Database schema initialized successfully!');
console.log('✓ Dogs table: NO sire/dam columns, uses parents table');
console.log('✓ Parents table: Stores sire/dam relationships');
console.log('✓ Litters table: Links puppies via litter_id');
db.close();
return true;
@@ -159,5 +165,11 @@ module.exports = { initDatabase, getDatabase };
// Run initialization if called directly
if (require.main === module) {
const dbPath = process.env.DB_PATH || path.join(__dirname, '../../data/breedr.db');
console.log('\n==========================================');
console.log('BREEDR Database Initialization');
console.log('==========================================');
console.log(`Database: ${dbPath}`);
console.log('==========================================\n');
initDatabase(dbPath);
}
console.log('\n✓ Database ready!\n');
}