| 210 | ---- |
| 211 | |
| 212 | |
| 213 | = Triggers = |
| 214 | |
| 215 | == 1. Update free seats based on ticket purchase == |
| 216 | |
| 217 | This trigger calculates the number of available tickets after purchasing a ticket and can be tested via the application, by trying to buy new tickets. |
| 218 | |
| 219 | {{{ |
| 220 | -- TRIGGER TO UPDATE FREE SEATS |
| 221 | CREATE OR REPLACE FUNCTION update_free_seats() |
| 222 | RETURNS TRIGGER AS $$ |
| 223 | BEGIN |
| 224 | IF TG_OP = 'INSERT' THEN |
| 225 | UPDATE trip |
| 226 | SET free_seats = free_seats - 1 |
| 227 | WHERE trip_id = NEW.trip_id; |
| 228 | RETURN NEW; |
| 229 | ELSIF TG_OP = 'DELETE' THEN |
| 230 | UPDATE trip |
| 231 | SET free_seats = free_seats + 1 |
| 232 | WHERE trip_id = OLD.trip_id; |
| 233 | RETURN OLD; |
| 234 | END IF; |
| 235 | RETURN NULL; |
| 236 | END; |
| 237 | $$ LANGUAGE plpgsql; |
| 238 | |
| 239 | CREATE TRIGGER ticket_insert_update_seats |
| 240 | AFTER INSERT ON ticket |
| 241 | FOR EACH ROW |
| 242 | EXECUTE FUNCTION update_free_seats(); |
| 243 | |
| 244 | CREATE TRIGGER ticket_delete_update_seats |
| 245 | AFTER DELETE ON ticket |
| 246 | FOR EACH ROW |
| 247 | EXECUTE FUNCTION update_free_seats(); |
| 248 | }}} |
| 249 | |
| 250 | |
| 251 | |