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. ' ;
2025-09-12 21:46:04 +00:00
-- Add exceptions column for date-specific availability overrides
ALTER TABLE availabilities ADD COLUMN exceptions JSONB DEFAULT ' [] ' ;
-- Add comment for the exceptions column
COMMENT ON COLUMN availabilities . exceptions IS
' JSONB object containing date-specific availability exceptions that override regular availability settings. Keys are ISO date strings (YYYY-MM-DD), values contain exception type and optional time ranges. ' ;