chore: perauset customer project
This commit is contained in:
65
sql/0005-rooms.sql
Normal file
65
sql/0005-rooms.sql
Normal file
@@ -0,0 +1,65 @@
|
||||
-- Rooms
|
||||
CREATE TABLE app.room (
|
||||
room_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
code TEXT NOT NULL UNIQUE,
|
||||
name TEXT NOT NULL,
|
||||
room_type app.room_type NOT NULL DEFAULT 'private',
|
||||
capacity INT NOT NULL DEFAULT 1,
|
||||
is_active BOOLEAN NOT NULL DEFAULT true,
|
||||
notes TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Room blocks (maintenance, retreat holds, admin reservations)
|
||||
CREATE TABLE app.room_block (
|
||||
block_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
room_id UUID NOT NULL REFERENCES app.room(room_id),
|
||||
block_type app.room_block_type NOT NULL DEFAULT 'maintenance',
|
||||
retreat_id UUID,
|
||||
starts_at DATE NOT NULL,
|
||||
ends_at DATE NOT NULL,
|
||||
reason TEXT,
|
||||
created_by_user_id UUID NOT NULL REFERENCES app."user"(user_id),
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_room_block_room ON app.room_block(room_id);
|
||||
CREATE INDEX idx_room_block_dates ON app.room_block(starts_at, ends_at);
|
||||
|
||||
-- Room requests (preferences)
|
||||
CREATE TABLE app.room_request (
|
||||
request_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
stay_id UUID NOT NULL REFERENCES app.stay(stay_id),
|
||||
requested_room_type app.room_type,
|
||||
preference_notes TEXT,
|
||||
status app.room_request_status NOT NULL DEFAULT 'submitted',
|
||||
reviewed_by_user_id UUID REFERENCES app."user"(user_id),
|
||||
reviewed_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Room allocations (actual assignment)
|
||||
CREATE TABLE app.room_allocation (
|
||||
allocation_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
stay_id UUID NOT NULL REFERENCES app.stay(stay_id),
|
||||
room_id UUID NOT NULL REFERENCES app.room(room_id),
|
||||
starts_at DATE NOT NULL,
|
||||
ends_at DATE NOT NULL,
|
||||
status app.room_allocation_status NOT NULL DEFAULT 'planned',
|
||||
allocation_reason 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_room_allocation_room ON app.room_allocation(room_id);
|
||||
CREATE INDEX idx_room_allocation_stay ON app.room_allocation(stay_id);
|
||||
CREATE INDEX idx_room_allocation_dates ON app.room_allocation(starts_at, ends_at);
|
||||
|
||||
SELECT app.enable_audit('room', 'room_id');
|
||||
SELECT app.enable_audit('room_block', 'block_id');
|
||||
SELECT app.enable_audit('room_request', 'request_id');
|
||||
SELECT app.enable_audit('room_allocation', 'allocation_id');
|
||||
Reference in New Issue
Block a user