| 1 | DROP TABLE IF EXISTS MessageD; | 
|---|
| 2 | DROP TABLE IF EXISTS DocumentD; | 
|---|
| 3 | DROP TABLE IF EXISTS Inspection; | 
|---|
| 4 | DROP TABLE IF EXISTS MaintenanceLog; | 
|---|
| 5 | DROP TABLE IF EXISTS ServiceRequest; | 
|---|
| 6 | DROP TABLE IF EXISTS Payment; | 
|---|
| 7 | DROP TABLE IF EXISTS Lease; | 
|---|
| 8 | DROP TABLE IF EXISTS Listing; | 
|---|
| 9 | DROP TABLE IF EXISTS UnitImage; | 
|---|
| 10 | DROP TABLE IF EXISTS PropertyImage; | 
|---|
| 11 | DROP TABLE IF EXISTS Unit; | 
|---|
| 12 | DROP TABLE IF EXISTS Property; | 
|---|
| 13 | DROP TABLE IF EXISTS LandlordProfile; | 
|---|
| 14 | DROP TABLE IF EXISTS TenantProfile; | 
|---|
| 15 | DROP TABLE IF EXISTS UserD; | 
|---|
| 16 | DROP TABLE IF EXISTS Address; | 
|---|
| 17 | DROP TABLE IF EXISTS PropertyType; | 
|---|
| 18 | DROP TABLE IF EXISTS ServiceCategory; | 
|---|
| 19 | DROP TABLE IF EXISTS PaymentMethod; | 
|---|
| 20 |  | 
|---|
| 21 | drop schema if exists domify cascade; | 
|---|
| 22 |  | 
|---|
| 23 | create schema domify; | 
|---|
| 24 |  | 
|---|
| 25 | SET search_path TO domify; | 
|---|
| 26 |  | 
|---|
| 27 | CREATE TABLE Address ( | 
|---|
| 28 | id BIGINT PRIMARY KEY, | 
|---|
| 29 | street VARCHAR(255) NOT NULL, | 
|---|
| 30 | number VARCHAR(50) NOT NULL, | 
|---|
| 31 | municipality VARCHAR(100) NOT NULL, | 
|---|
| 32 | city VARCHAR(100) NOT NULL, | 
|---|
| 33 | country VARCHAR(100) NOT NULL | 
|---|
| 34 | ); | 
|---|
| 35 |  | 
|---|
| 36 | CREATE TABLE PropertyType ( | 
|---|
| 37 | id BIGINT PRIMARY KEY, | 
|---|
| 38 | name VARCHAR(100) NOT NULL | 
|---|
| 39 | ); | 
|---|
| 40 |  | 
|---|
| 41 | CREATE TABLE ServiceCategory ( | 
|---|
| 42 | id BIGINT PRIMARY KEY, | 
|---|
| 43 | name VARCHAR(100) NOT NULL | 
|---|
| 44 | ); | 
|---|
| 45 |  | 
|---|
| 46 | CREATE TABLE PaymentMethod ( | 
|---|
| 47 | id BIGINT PRIMARY KEY, | 
|---|
| 48 | name VARCHAR(100) NOT NULL | 
|---|
| 49 | ); | 
|---|
| 50 |  | 
|---|
| 51 | CREATE TABLE UserD ( | 
|---|
| 52 | id BIGINT PRIMARY KEY, | 
|---|
| 53 | first_name VARCHAR(100) NOT NULL, | 
|---|
| 54 | last_name VARCHAR(100) NOT NULL, | 
|---|
| 55 | email VARCHAR(255) NOT NULL UNIQUE, | 
|---|
| 56 | password_hash VARCHAR(255) NOT NULL, | 
|---|
| 57 | date_of_birth DATE NOT NULL, | 
|---|
| 58 | rating DECIMAL(3,2) NOT NULL DEFAULT 0.00, | 
|---|
| 59 | bio TEXT, | 
|---|
| 60 | address_id BIGINT NOT NULL, | 
|---|
| 61 | FOREIGN KEY (address_id) REFERENCES Address(id) ON DELETE RESTRICT | 
|---|
| 62 | ); | 
|---|
| 63 |  | 
|---|
| 64 | CREATE TABLE TenantProfile ( | 
|---|
| 65 | id BIGINT PRIMARY KEY, | 
|---|
| 66 | FOREIGN KEY (id) REFERENCES UserD(id) ON DELETE CASCADE | 
|---|
| 67 | ); | 
|---|
| 68 |  | 
|---|
| 69 | CREATE TABLE LandlordProfile ( | 
|---|
| 70 | id BIGINT PRIMARY KEY, | 
|---|
| 71 | managed_properties_count INT NOT NULL DEFAULT 0, | 
|---|
| 72 | is_agent BOOL NOT NULL, | 
|---|
| 73 | FOREIGN KEY (id) REFERENCES UserD(id) ON DELETE CASCADE | 
|---|
| 74 | ); | 
|---|
| 75 |  | 
|---|
| 76 |  | 
|---|
| 77 | CREATE TABLE Property ( | 
|---|
| 78 | id BIGINT PRIMARY KEY, | 
|---|
| 79 | title VARCHAR(255) NOT NULL, | 
|---|
| 80 | description TEXT NOT NULL, | 
|---|
| 81 | created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, | 
|---|
| 82 | owner_id BIGINT NOT NULL, | 
|---|
| 83 | property_type_id BIGINT NOT NULL, | 
|---|
| 84 | address_id BIGINT NOT NULL, | 
|---|
| 85 | FOREIGN KEY (owner_id) REFERENCES UserD(id) ON DELETE RESTRICT, | 
|---|
| 86 | FOREIGN KEY (property_type_id) REFERENCES PropertyType(id) ON DELETE RESTRICT, | 
|---|
| 87 | FOREIGN KEY (address_id) REFERENCES Address(id) ON DELETE RESTRICT | 
|---|
| 88 | ); | 
|---|
| 89 |  | 
|---|
| 90 | CREATE TABLE Unit ( | 
|---|
| 91 | id BIGINT PRIMARY KEY, | 
|---|
| 92 | unit_number VARCHAR(50) NOT NULL, | 
|---|
| 93 | floor INT NOT NULL, | 
|---|
| 94 | bedrooms INT NOT NULL, | 
|---|
| 95 | bathrooms INT NOT NULL, | 
|---|
| 96 | area_sq_m DECIMAL(8,2) NOT NULL, | 
|---|
| 97 | rent_amount DECIMAL(10,2), | 
|---|
| 98 | property_id BIGINT NOT NULL, | 
|---|
| 99 | FOREIGN KEY (property_id) REFERENCES Property(id) ON DELETE CASCADE | 
|---|
| 100 | ); | 
|---|
| 101 |  | 
|---|
| 102 | CREATE TABLE PropertyImage ( | 
|---|
| 103 | id BIGINT PRIMARY KEY, | 
|---|
| 104 | image VARCHAR(500) NOT NULL, | 
|---|
| 105 | property_id BIGINT NOT NULL, | 
|---|
| 106 | FOREIGN KEY (property_id) REFERENCES Property(id) ON DELETE CASCADE | 
|---|
| 107 | ); | 
|---|
| 108 |  | 
|---|
| 109 | CREATE TABLE Listing ( | 
|---|
| 110 | id BIGINT PRIMARY KEY, | 
|---|
| 111 | title VARCHAR(255) NOT NULL, | 
|---|
| 112 | available_from DATE NOT NULL, | 
|---|
| 113 | available_to DATE NOT NULL, | 
|---|
| 114 | status VARCHAR(50) NOT NULL DEFAULT 'available', | 
|---|
| 115 | description TEXT, | 
|---|
| 116 | unit_id BIGINT NOT NULL, | 
|---|
| 117 | FOREIGN KEY (unit_id) REFERENCES Unit(id) ON DELETE CASCADE | 
|---|
| 118 | ); | 
|---|
| 119 |  | 
|---|
| 120 | CREATE TABLE Lease ( | 
|---|
| 121 | id BIGINT PRIMARY KEY, | 
|---|
| 122 | start_date DATE NOT NULL, | 
|---|
| 123 | end_date DATE NOT NULL, | 
|---|
| 124 | rent_amount DECIMAL(10,2) NOT NULL, | 
|---|
| 125 | deposit_amount DECIMAL(10,2) NOT NULL, | 
|---|
| 126 | listing_id BIGINT NOT NULL, | 
|---|
| 127 | tenant_id BIGINT NOT NULL, | 
|---|
| 128 | landlord_id BIGINT NOT NULL, | 
|---|
| 129 | FOREIGN KEY (listing_id) REFERENCES Listing(id) ON DELETE RESTRICT, | 
|---|
| 130 | FOREIGN KEY (tenant_id) REFERENCES TenantProfile(id) ON DELETE RESTRICT, | 
|---|
| 131 | FOREIGN KEY (landlord_id) REFERENCES LandlordProfile(id) ON DELETE RESTRICT | 
|---|
| 132 | ); | 
|---|
| 133 |  | 
|---|
| 134 | CREATE TABLE Payment ( | 
|---|
| 135 | id BIGINT PRIMARY KEY, | 
|---|
| 136 | amount DECIMAL(10,2) NOT NULL, | 
|---|
| 137 | status VARCHAR(50) NOT NULL, | 
|---|
| 138 | payment_date DATE NOT NULL, | 
|---|
| 139 | lease_id BIGINT NOT NULL, | 
|---|
| 140 | payment_method_id BIGINT NOT NULL, | 
|---|
| 141 | FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE, | 
|---|
| 142 | FOREIGN KEY (payment_method_id) REFERENCES PaymentMethod(id) ON DELETE RESTRICT | 
|---|
| 143 | ); | 
|---|
| 144 |  | 
|---|
| 145 | CREATE TABLE ServiceRequest ( | 
|---|
| 146 | id BIGINT PRIMARY KEY, | 
|---|
| 147 | description TEXT NOT NULL, | 
|---|
| 148 | request_date DATE NOT NULL, | 
|---|
| 149 | status VARCHAR(50) NOT NULL, | 
|---|
| 150 | lease_id BIGINT NOT NULL, | 
|---|
| 151 | service_category_id BIGINT NOT NULL, | 
|---|
| 152 | FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE, | 
|---|
| 153 | FOREIGN KEY (service_category_id) REFERENCES ServiceCategory(id) ON DELETE RESTRICT | 
|---|
| 154 | ); | 
|---|
| 155 |  | 
|---|
| 156 | CREATE TABLE MaintenanceLog ( | 
|---|
| 157 | id BIGINT PRIMARY KEY, | 
|---|
| 158 | description TEXT NOT NULL, | 
|---|
| 159 | maintenance_date DATE NOT NULL, | 
|---|
| 160 | service_request_id BIGINT NOT NULL, | 
|---|
| 161 | user_id BIGINT NOT NULL, | 
|---|
| 162 | FOREIGN KEY (service_request_id) REFERENCES ServiceRequest(id) ON DELETE CASCADE, | 
|---|
| 163 | FOREIGN KEY (user_id) REFERENCES UserD(id) ON DELETE CASCADE | 
|---|
| 164 | ); | 
|---|
| 165 |  | 
|---|
| 166 | CREATE TABLE Inspection ( | 
|---|
| 167 | id BIGINT PRIMARY KEY, | 
|---|
| 168 | inspection_date DATE NOT NULL, | 
|---|
| 169 | notes TEXT NOT NULL, | 
|---|
| 170 | lease_id BIGINT NOT NULL, | 
|---|
| 171 | landlord_id BIGINT NOT NULL, | 
|---|
| 172 | FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE, | 
|---|
| 173 | FOREIGN KEY (landlord_id) REFERENCES LandlordProfile(id) ON DELETE RESTRICT | 
|---|
| 174 | ); | 
|---|
| 175 |  | 
|---|
| 176 | CREATE TABLE DocumentD ( | 
|---|
| 177 | id BIGINT PRIMARY KEY, | 
|---|
| 178 | file_type VARCHAR(50) NOT NULL, | 
|---|
| 179 | file_url VARCHAR(500) NOT NULL, | 
|---|
| 180 | uploaded_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, | 
|---|
| 181 | user_id BIGINT, | 
|---|
| 182 | lease_id BIGINT, | 
|---|
| 183 | FOREIGN KEY (user_id) REFERENCES UserD(id) ON DELETE CASCADE, | 
|---|
| 184 | FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE, | 
|---|
| 185 | CHECK (user_id IS NOT NULL OR lease_id IS NOT NULL) | 
|---|
| 186 | ); | 
|---|
| 187 |  | 
|---|
| 188 | CREATE TABLE MessageD ( | 
|---|
| 189 | id BIGINT PRIMARY KEY, | 
|---|
| 190 | content TEXT NOT NULL, | 
|---|
| 191 | sent_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, | 
|---|
| 192 | from_user_id BIGINT NOT NULL, | 
|---|
| 193 | to_user_id BIGINT NOT NULL, | 
|---|
| 194 | lease_id BIGINT NOT NULL, | 
|---|
| 195 | FOREIGN KEY (from_user_id) REFERENCES UserD(id) ON DELETE CASCADE, | 
|---|
| 196 | FOREIGN KEY (to_user_id) REFERENCES UserD(id) ON DELETE CASCADE, | 
|---|
| 197 | FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE | 
|---|
| 198 | ); | 
|---|
| 199 |  | 
|---|
| 200 | CREATE TABLE UnitImage ( | 
|---|
| 201 | id BIGINT PRIMARY KEY, | 
|---|
| 202 | image VARCHAR(500) NOT NULL, | 
|---|
| 203 | unit_id BIGINT NOT NULL, | 
|---|
| 204 | FOREIGN KEY (unit_id) REFERENCES Unit(id) ON DELETE CASCADE | 
|---|
| 205 | ); | 
|---|
| 206 |  | 
|---|
| 207 | CREATE TABLE Interested ( | 
|---|
| 208 | listing_id BIGINT NOT NULL, | 
|---|
| 209 | tenant_profile_id BIGINT NOT NULL, | 
|---|
| 210 | PRIMARY KEY (listing_id, tenant_profile_id), | 
|---|
| 211 | FOREIGN KEY (listing_id) REFERENCES Listing(id) ON DELETE CASCADE, | 
|---|
| 212 | FOREIGN KEY (tenant_profile_id) REFERENCES TenantProfile(id) ON DELETE CASCADE | 
|---|
| 213 | ); | 
|---|