chore: perauset customer project
This commit is contained in:
84
sql/0006-boats.sql
Normal file
84
sql/0006-boats.sql
Normal file
@@ -0,0 +1,84 @@
|
||||
-- Boat routes
|
||||
CREATE TABLE app.boat_route (
|
||||
route_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
name TEXT NOT NULL,
|
||||
origin TEXT NOT NULL,
|
||||
destination TEXT NOT NULL,
|
||||
is_active BOOLEAN NOT NULL DEFAULT true,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Boats
|
||||
CREATE TABLE app.boat (
|
||||
boat_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
name TEXT NOT NULL,
|
||||
passenger_capacity INT NOT NULL,
|
||||
cargo_capacity_kg NUMERIC,
|
||||
is_active BOOLEAN NOT NULL DEFAULT true,
|
||||
notes TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Boat trips
|
||||
CREATE TABLE app.boat_trip (
|
||||
trip_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
boat_id UUID REFERENCES app.boat(boat_id),
|
||||
route_id UUID NOT NULL REFERENCES app.boat_route(route_id),
|
||||
scheduled_departure_at TIMESTAMPTZ NOT NULL,
|
||||
scheduled_arrival_at TIMESTAMPTZ,
|
||||
status app.boat_trip_status NOT NULL DEFAULT 'planned',
|
||||
notes TEXT,
|
||||
created_by_user_id UUID NOT NULL REFERENCES app."user"(user_id),
|
||||
updated_by_user_id UUID REFERENCES app."user"(user_id),
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_boat_trip_status ON app.boat_trip(status);
|
||||
CREATE INDEX idx_boat_trip_departure ON app.boat_trip(scheduled_departure_at);
|
||||
|
||||
-- Boat reservation requests (user intent)
|
||||
CREATE TABLE app.boat_reservation_request (
|
||||
request_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
trip_id UUID NOT NULL REFERENCES app.boat_trip(trip_id),
|
||||
user_id UUID NOT NULL REFERENCES app."user"(user_id),
|
||||
stay_id UUID REFERENCES app.stay(stay_id),
|
||||
retreat_id UUID,
|
||||
requested_seats INT NOT NULL DEFAULT 1,
|
||||
cargo_notes TEXT,
|
||||
special_requirements TEXT,
|
||||
priority_reason TEXT,
|
||||
status app.boat_reservation_status NOT NULL DEFAULT 'submitted',
|
||||
reviewed_by_user_id UUID REFERENCES app."user"(user_id),
|
||||
reviewed_at TIMESTAMPTZ,
|
||||
review_notes TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_boat_reservation_trip ON app.boat_reservation_request(trip_id);
|
||||
CREATE INDEX idx_boat_reservation_user ON app.boat_reservation_request(user_id);
|
||||
CREATE INDEX idx_boat_reservation_status ON app.boat_reservation_request(status);
|
||||
|
||||
-- Boat manifest entries (confirmed passengers)
|
||||
CREATE TABLE app.boat_manifest_entry (
|
||||
entry_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
trip_id UUID NOT NULL REFERENCES app.boat_trip(trip_id),
|
||||
reservation_request_id UUID REFERENCES app.boat_reservation_request(request_id),
|
||||
user_id UUID NOT NULL REFERENCES app."user"(user_id),
|
||||
stay_id UUID REFERENCES app.stay(stay_id),
|
||||
status app.boat_manifest_status NOT NULL DEFAULT 'confirmed',
|
||||
confirmed_by_user_id UUID NOT NULL REFERENCES app."user"(user_id),
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_boat_manifest_trip ON app.boat_manifest_entry(trip_id);
|
||||
|
||||
SELECT app.enable_audit('boat_route', 'route_id');
|
||||
SELECT app.enable_audit('boat', 'boat_id');
|
||||
SELECT app.enable_audit('boat_trip', 'trip_id');
|
||||
SELECT app.enable_audit('boat_reservation_request', 'request_id');
|
||||
SELECT app.enable_audit('boat_manifest_entry', 'entry_id');
|
||||
Reference in New Issue
Block a user