76 lines
3 KiB
SQL
76 lines
3 KiB
SQL
-- 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.';
|
|
|
|
-- 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.';
|