70 lines
2.6 KiB
MySQL
70 lines
2.6 KiB
MySQL
|
|
-- 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.';
|