/ db-seeds / postgres / ddl_pet_owners.sql
ddl_pet_owners.sql
 1  -- Enable UUID extension
 2  CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
 3  
 4  -- Trigger function to auto-update updated_at
 5  CREATE OR REPLACE FUNCTION set_updated_at_column()
 6  RETURNS TRIGGER AS $$
 7  BEGIN
 8      NEW.updated_at = NOW();
 9      RETURN NEW;
10  END;
11  $$ LANGUAGE plpgsql;
12  
13  -- Owners Table
14  CREATE TABLE owners (
15      id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
16      email VARCHAR(255) NOT NULL UNIQUE,
17      username VARCHAR(50) NOT NULL UNIQUE,
18      password_hash VARCHAR(255) NOT NULL,
19      full_name VARCHAR(100),
20      phone_number VARCHAR(20),
21      address TEXT,
22      is_active BOOLEAN NOT NULL DEFAULT TRUE,
23      email_verified BOOLEAN NOT NULL DEFAULT FALSE,
24      metadata JSONB DEFAULT '{}'::JSONB,
25  
26      created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
27      updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
28      deleted_at TIMESTAMP WITH TIME ZONE
29  );
30  
31  -- Trigger for owners table
32  CREATE TRIGGER trigger_set_updated_at_owners
33  BEFORE UPDATE ON owners
34  FOR EACH ROW
35  EXECUTE PROCEDURE set_updated_at_column();
36  
37  -- Pets Table
38  CREATE TABLE pets (
39      id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
40      owner_id UUID NOT NULL,
41      name VARCHAR(100) NOT NULL,
42      species VARCHAR(50) NOT NULL,
43      breed VARCHAR(100),
44      date_of_birth DATE,
45      gender VARCHAR(10),
46      weight DECIMAL(5,2),
47      microchip_id VARCHAR(100) UNIQUE,
48      medical_notes TEXT,
49      metadata JSONB DEFAULT '{}'::JSONB,
50  
51      created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
52      updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
53      deleted_at TIMESTAMP WITH TIME ZONE,
54  
55      FOREIGN KEY (owner_id) REFERENCES owners(id) ON DELETE CASCADE
56  );
57  
58  -- Trigger for pets table
59  CREATE TRIGGER trigger_set_updated_at_pets
60  BEFORE UPDATE ON pets
61  FOR EACH ROW
62  EXECUTE PROCEDURE set_updated_at_column();
63  
64  -- Insert sample data into owners
65  INSERT INTO owners (id, email, username, password_hash, full_name, phone_number, address, email_verified)
66  VALUES
67      ('11111111-1111-1111-1111-111111111111', 'alice@example.com', 'alice123', 'hashedpassword1', 'Alice Johnson', '123-456-7890', '123 Apple St', TRUE),
68      ('22222222-2222-2222-2222-222222222222', 'bob@example.com', 'bobby88', 'hashedpassword2', 'Bob Smith', '987-654-3210', '456 Orange Ave', FALSE),
69      ('33333333-3333-3333-3333-333333333333', 'carol@example.com', 'carol_c', 'hashedpassword3', 'Carol Danvers', '555-555-5555', '789 Banana Blvd', TRUE);
70  
71  -- Insert sample data into pets
72  INSERT INTO pets (owner_id, name, species, breed, date_of_birth, gender, weight, microchip_id, medical_notes)
73  VALUES
74      ('11111111-1111-1111-1111-111111111111', 'Buddy', 'Dog', 'Golden Retriever', '2018-06-01', 'Male', 30.5, 'MC-1001', 'Allergic to peanuts.'),
75      ('22222222-2222-2222-2222-222222222222', 'Whiskers', 'Cat', 'Siamese', '2020-02-15', 'Female', 4.2, 'MC-1002', 'None'),
76      ('33333333-3333-3333-3333-333333333333', 'Hopper', 'Rabbit', 'Lop', '2021-11-20', 'Male', 2.1, 'MC-1003', 'Needs monthly nail trimming.');