xtablo-source/sql/17_availabilities_table.sql

70 lines
2.6 KiB
MySQL
Raw Normal View History

2025-09-09 20:49:02 +00:00
-- Create the availabilities table
CREATE TABLE IF NOT EXISTS availabilities (
id SERIAL PRIMARY KEY,
user_id uuid NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
availabilities JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now()
);
-- Create an index for faster lookups by user_id
CREATE INDEX IF NOT EXISTS idx_availabilities_user_id ON availabilities(user_id);
-- Add unique constraint on user_id to ensure one availability record per user
ALTER TABLE availabilities ADD CONSTRAINT unique_user_availabilities UNIQUE (user_id);
-- Add trigger to update updated_at timestamp
CREATE TRIGGER update_availabilities_updated_at
BEFORE UPDATE ON availabilities
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
-- Enable Row Level Security
ALTER TABLE availabilities ENABLE ROW LEVEL SECURITY;
-- Policy to allow users to view their own availabilities
CREATE POLICY "Users can view their own availabilities" ON availabilities
FOR SELECT
TO authenticated
USING (user_id = auth.uid());
-- Policy to allow users to insert their own availabilities
CREATE POLICY "Users can insert their own availabilities" ON availabilities
FOR INSERT
TO authenticated
WITH CHECK (user_id = auth.uid());
-- Policy to allow users to update their own availabilities
CREATE POLICY "Users can update their own availabilities" ON availabilities
FOR UPDATE
TO authenticated
USING (user_id = auth.uid())
WITH CHECK (user_id = auth.uid());
-- Policy to allow users to delete their own availabilities
CREATE POLICY "Users can delete their own availabilities" ON availabilities
FOR DELETE
TO authenticated
USING (user_id = auth.uid());
-- Add helpful comments
COMMENT ON TABLE availabilities IS
'User availability settings with Row Level Security';
COMMENT ON COLUMN availabilities.id IS
'Primary key: auto-incrementing integer';
COMMENT ON COLUMN availabilities.user_id IS
'Foreign key reference to auth.users(id)';
COMMENT ON COLUMN availabilities.availabilities IS
'JSONB object containing availability settings for each day (0-6, where 0 is Monday). Each day has enabled status and time ranges.';
-- Rename the availabilities column to availability_data for clarity
ALTER TABLE availabilities RENAME COLUMN availabilities TO availability_data;
-- Update the comment for the renamed column
COMMENT ON COLUMN availabilities.availability_data IS
'JSONB object containing availability settings for each day (0-6, where 0 is Monday). Each day has enabled status and time ranges.';