π± Manage Exchange Rates
Add / Update Rate
Database Setup
If the exchange_rates table doesn't exist, run this SQL:
Create exchange_rates table
CREATE TABLE IF NOT EXISTS exchange_rates (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
pair TEXT UNIQUE NOT NULL,
rate NUMERIC NOT NULL,
description TEXT,
updated_at TIMESTAMPTZ DEFAULT NOW()
);
ALTER TABLE exchange_rates ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Allow public read" ON exchange_rates;
CREATE POLICY "Allow public read" ON exchange_rates FOR SELECT USING (true);
DROP POLICY IF EXISTS "Allow all operations" ON exchange_rates;
CREATE POLICY "Allow all operations" ON exchange_rates FOR ALL USING (true);
-- Insert default rates
INSERT INTO exchange_rates (pair, rate, description) VALUES
('QAR-KES', 33.0, 'Qatar Riyal β Kenyan Shilling (MβPesa)'),
('AED-GHS', 3.25, 'UAE Dirham β Ghanaian Cedi'),
('GHS-AED', 0.31, 'Ghanaian Cedi β UAE Dirham')
ON CONFLICT (pair) DO NOTHING;
ποΈ Database Setup (Video Support)
Follow these steps in order to set up your Supabase database correctly.
Important: If you already have tables, run the "Add Missing Columns" script first.
ALTER TABLE products ADD COLUMN IF NOT EXISTS video_url TEXT;
ALTER TABLE widgets ADD COLUMN IF NOT EXISTS video_url TEXT;
CREATE TABLE IF NOT EXISTS products (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
name TEXT NOT NULL,
price DECIMAL(10,2) NOT NULL,
description TEXT,
category TEXT,
image_url TEXT,
images JSONB,
title_color TEXT DEFAULT '#1f2937',
desc_color TEXT DEFAULT '#6b7280',
product_link TEXT,
video_url TEXT,
created_at TIMESTAMP DEFAULT now()
);
ALTER TABLE products ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Enable all" ON products;
CREATE POLICY "Enable all" ON products FOR ALL USING (true);
CREATE TABLE IF NOT EXISTS widgets (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
image_url TEXT,
video_url TEXT,
placement TEXT DEFAULT 'body',
created_at TIMESTAMP DEFAULT now()
);
ALTER TABLE widgets ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Enable all" ON widgets;
CREATE POLICY "Enable all" ON widgets FOR ALL USING (true);
CREATE TABLE IF NOT EXISTS exchange_rates (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
pair TEXT UNIQUE NOT NULL,
rate NUMERIC NOT NULL,
description TEXT,
updated_at TIMESTAMPTZ DEFAULT NOW()
);
ALTER TABLE exchange_rates ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Allow all" ON exchange_rates FOR ALL USING (true);
INSERT INTO storage.buckets (id, name, public) VALUES ('products', 'products', true) ON CONFLICT (id) DO NOTHING;
DROP POLICY IF EXISTS "Public access" ON storage.objects;
CREATE POLICY "Public access" ON storage.objects FOR ALL USING (bucket_id = 'products');
Done! After running the scripts, refresh the page.