All checks were successful
Build & Deploy Frontend / build-push-deploy (push) Successful in 1m45s
59 lines
1.9 KiB
SQL
59 lines
1.9 KiB
SQL
-- Create a singleton system settings table
|
|
CREATE TABLE IF NOT EXISTS public.system_settings (
|
|
id TEXT PRIMARY KEY DEFAULT 'default' CHECK (id = 'default'),
|
|
application_name TEXT NOT NULL DEFAULT 'SubsTracker',
|
|
default_currency TEXT NOT NULL DEFAULT 'INR',
|
|
default_reminder_days INTEGER NOT NULL DEFAULT 7,
|
|
session_timeout_hours INTEGER NOT NULL DEFAULT 24,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- Enable Row Level Security
|
|
ALTER TABLE public.system_settings ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Policies
|
|
DO $$ BEGIN
|
|
-- Anyone can read settings
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM pg_policies
|
|
WHERE schemaname = 'public' AND tablename = 'system_settings' AND policyname = 'Anyone can read system settings'
|
|
) THEN
|
|
CREATE POLICY "Anyone can read system settings"
|
|
ON public.system_settings
|
|
FOR SELECT
|
|
USING (true);
|
|
END IF;
|
|
|
|
-- Admins can insert settings
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM pg_policies
|
|
WHERE schemaname = 'public' AND tablename = 'system_settings' AND policyname = 'Admins can insert system settings'
|
|
) THEN
|
|
CREATE POLICY "Admins can insert system settings"
|
|
ON public.system_settings
|
|
FOR INSERT
|
|
WITH CHECK (has_role(auth.uid(), 'admin'::app_role));
|
|
END IF;
|
|
|
|
-- Admins can update settings
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM pg_policies
|
|
WHERE schemaname = 'public' AND tablename = 'system_settings' AND policyname = 'Admins can update system settings'
|
|
) THEN
|
|
CREATE POLICY "Admins can update system settings"
|
|
ON public.system_settings
|
|
FOR UPDATE
|
|
USING (has_role(auth.uid(), 'admin'::app_role));
|
|
END IF;
|
|
END $$;
|
|
|
|
-- Timestamp trigger
|
|
CREATE TRIGGER update_system_settings_updated_at
|
|
BEFORE UPDATE ON public.system_settings
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION public.update_updated_at_column();
|
|
|
|
-- Seed singleton row
|
|
INSERT INTO public.system_settings (id)
|
|
VALUES ('default')
|
|
ON CONFLICT (id) DO NOTHING; |