31 lines
1.3 KiB
SQL
31 lines
1.3 KiB
SQL
CREATE TABLE IF NOT EXISTS chat_rooms (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE,
|
|
type VARCHAR(10) NOT NULL DEFAULT 'general' CHECK (type IN ('general', 'direct')),
|
|
name VARCHAR(100),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS chat_room_members (
|
|
room_id UUID NOT NULL REFERENCES chat_rooms(id) ON DELETE CASCADE,
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
PRIMARY KEY (room_id, user_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
room_id UUID NOT NULL REFERENCES chat_rooms(id) ON DELETE CASCADE,
|
|
hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE,
|
|
sender_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
text TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_chat_messages_room ON chat_messages(room_id, created_at DESC);
|
|
|
|
CREATE TABLE IF NOT EXISTS chat_read_status (
|
|
room_id UUID NOT NULL REFERENCES chat_rooms(id) ON DELETE CASCADE,
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
last_read TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (room_id, user_id)
|
|
);
|