veza/veza-backend-api/migrations/042_create_room_members.sql

33 lines
1.5 KiB
MySQL
Raw Normal View History

2025-12-03 19:29:37 +00:00
-- Migration: Create room_members table
-- Description: Members of chat rooms
CREATE TABLE IF NOT EXISTS room_members (
id BIGSERIAL PRIMARY KEY,
room_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
role VARCHAR(50) NOT NULL DEFAULT 'member', -- 'admin', 'moderator', 'member'
joined_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
last_read_at TIMESTAMP WITH TIME ZONE,
is_muted BOOLEAN DEFAULT false,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP WITH TIME ZONE,
CONSTRAINT fk_room_members_room_id FOREIGN KEY (room_id) REFERENCES rooms(id) ON DELETE CASCADE,
CONSTRAINT fk_room_members_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
CONSTRAINT unique_room_member UNIQUE (room_id, user_id)
);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_room_members_room_id ON room_members(room_id);
CREATE INDEX IF NOT EXISTS idx_room_members_user_id ON room_members(user_id);
CREATE INDEX IF NOT EXISTS idx_room_members_role ON room_members(role);
CREATE INDEX IF NOT EXISTS idx_room_members_deleted_at ON room_members(deleted_at);
-- Comments
COMMENT ON TABLE room_members IS 'Members of chat rooms with roles and permissions';
COMMENT ON COLUMN room_members.role IS 'Member role: admin, moderator, or member';
COMMENT ON COLUMN room_members.last_read_at IS 'Timestamp of last message read by user';
COMMENT ON COLUMN room_members.is_muted IS 'Whether notifications are muted for this user';