Mega push vol 7 mvp lesgoooo

This commit is contained in:
AlacrisDevs
2026-02-07 21:47:47 +02:00
parent dcee479839
commit d22847f555
75 changed files with 7685 additions and 892 deletions

View File

@@ -0,0 +1,202 @@
-- Budget/Finance and Sponsors & Partners modules
-- Adds new module types and creates tables for both
-- ============================================================
-- 1. Extend module_type enum
-- ============================================================
ALTER TYPE module_type ADD VALUE IF NOT EXISTS 'budget';
ALTER TYPE module_type ADD VALUE IF NOT EXISTS 'sponsors';
-- ============================================================
-- 2. Budget Categories
-- ============================================================
CREATE TABLE budget_categories (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
department_id UUID NOT NULL REFERENCES event_departments(id) ON DELETE CASCADE,
name TEXT NOT NULL,
color TEXT DEFAULT '#6366f1',
sort_order INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_budget_categories_dept ON budget_categories(department_id);
-- ============================================================
-- 3. Budget Items (income or expense line items)
-- ============================================================
CREATE TABLE budget_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
department_id UUID NOT NULL REFERENCES event_departments(id) ON DELETE CASCADE,
category_id UUID REFERENCES budget_categories(id) ON DELETE SET NULL,
description TEXT NOT NULL,
item_type TEXT NOT NULL DEFAULT 'expense' CHECK (item_type IN ('income', 'expense')),
planned_amount NUMERIC(12,2) NOT NULL DEFAULT 0,
actual_amount NUMERIC(12,2) NOT NULL DEFAULT 0,
notes TEXT,
sort_order INT NOT NULL DEFAULT 0,
created_by UUID REFERENCES auth.users(id) ON DELETE SET NULL,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_budget_items_dept ON budget_items(department_id);
CREATE INDEX idx_budget_items_category ON budget_items(category_id);
-- ============================================================
-- 4. Sponsor Tiers (e.g. Platinum, Gold, Silver)
-- ============================================================
CREATE TABLE sponsor_tiers (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
department_id UUID NOT NULL REFERENCES event_departments(id) ON DELETE CASCADE,
name TEXT NOT NULL,
amount NUMERIC(12,2) DEFAULT 0,
color TEXT DEFAULT '#F59E0B',
sort_order INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_sponsor_tiers_dept ON sponsor_tiers(department_id);
-- ============================================================
-- 5. Sponsors
-- ============================================================
CREATE TABLE sponsors (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
department_id UUID NOT NULL REFERENCES event_departments(id) ON DELETE CASCADE,
tier_id UUID REFERENCES sponsor_tiers(id) ON DELETE SET NULL,
name TEXT NOT NULL,
contact_name TEXT,
contact_email TEXT,
contact_phone TEXT,
website TEXT,
logo_url TEXT,
status TEXT NOT NULL DEFAULT 'prospect' CHECK (status IN ('prospect', 'contacted', 'confirmed', 'declined', 'active')),
amount NUMERIC(12,2) DEFAULT 0,
notes TEXT,
created_by UUID REFERENCES auth.users(id) ON DELETE SET NULL,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_sponsors_dept ON sponsors(department_id);
CREATE INDEX idx_sponsors_tier ON sponsors(tier_id);
CREATE INDEX idx_sponsors_status ON sponsors(status);
-- ============================================================
-- 6. Sponsor Deliverables (what we owe each sponsor)
-- ============================================================
CREATE TABLE sponsor_deliverables (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
sponsor_id UUID NOT NULL REFERENCES sponsors(id) ON DELETE CASCADE,
description TEXT NOT NULL,
is_completed BOOLEAN NOT NULL DEFAULT false,
due_date TIMESTAMPTZ,
sort_order INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_sponsor_deliverables_sponsor ON sponsor_deliverables(sponsor_id);
-- ============================================================
-- 7. RLS Policies
-- ============================================================
ALTER TABLE budget_categories ENABLE ROW LEVEL SECURITY;
ALTER TABLE budget_items ENABLE ROW LEVEL SECURITY;
ALTER TABLE sponsor_tiers ENABLE ROW LEVEL SECURITY;
ALTER TABLE sponsors ENABLE ROW LEVEL SECURITY;
ALTER TABLE sponsor_deliverables ENABLE ROW LEVEL SECURITY;
-- Budget Categories
CREATE POLICY "Org members can view budget categories" ON budget_categories FOR SELECT
USING (EXISTS (
SELECT 1 FROM event_departments ed
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE ed.id = budget_categories.department_id AND om.user_id = auth.uid()
));
CREATE POLICY "Editors can manage budget categories" ON budget_categories FOR ALL
USING (EXISTS (
SELECT 1 FROM event_departments ed
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE ed.id = budget_categories.department_id AND om.user_id = auth.uid() AND om.role IN ('owner', 'admin', 'editor')
));
-- Budget Items
CREATE POLICY "Org members can view budget items" ON budget_items FOR SELECT
USING (EXISTS (
SELECT 1 FROM event_departments ed
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE ed.id = budget_items.department_id AND om.user_id = auth.uid()
));
CREATE POLICY "Editors can manage budget items" ON budget_items FOR ALL
USING (EXISTS (
SELECT 1 FROM event_departments ed
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE ed.id = budget_items.department_id AND om.user_id = auth.uid() AND om.role IN ('owner', 'admin', 'editor')
));
-- Sponsor Tiers
CREATE POLICY "Org members can view sponsor tiers" ON sponsor_tiers FOR SELECT
USING (EXISTS (
SELECT 1 FROM event_departments ed
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE ed.id = sponsor_tiers.department_id AND om.user_id = auth.uid()
));
CREATE POLICY "Editors can manage sponsor tiers" ON sponsor_tiers FOR ALL
USING (EXISTS (
SELECT 1 FROM event_departments ed
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE ed.id = sponsor_tiers.department_id AND om.user_id = auth.uid() AND om.role IN ('owner', 'admin', 'editor')
));
-- Sponsors
CREATE POLICY "Org members can view sponsors" ON sponsors FOR SELECT
USING (EXISTS (
SELECT 1 FROM event_departments ed
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE ed.id = sponsors.department_id AND om.user_id = auth.uid()
));
CREATE POLICY "Editors can manage sponsors" ON sponsors FOR ALL
USING (EXISTS (
SELECT 1 FROM event_departments ed
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE ed.id = sponsors.department_id AND om.user_id = auth.uid() AND om.role IN ('owner', 'admin', 'editor')
));
-- Sponsor Deliverables
CREATE POLICY "Org members can view sponsor deliverables" ON sponsor_deliverables FOR SELECT
USING (EXISTS (
SELECT 1 FROM sponsors s
JOIN event_departments ed ON s.department_id = ed.id
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE s.id = sponsor_deliverables.sponsor_id AND om.user_id = auth.uid()
));
CREATE POLICY "Editors can manage sponsor deliverables" ON sponsor_deliverables FOR ALL
USING (EXISTS (
SELECT 1 FROM sponsors s
JOIN event_departments ed ON s.department_id = ed.id
JOIN events e ON ed.event_id = e.id
JOIN org_members om ON e.org_id = om.org_id
WHERE s.id = sponsor_deliverables.sponsor_id AND om.user_id = auth.uid() AND om.role IN ('owner', 'admin', 'editor')
));
-- ============================================================
-- 8. Enable realtime
-- ============================================================
ALTER PUBLICATION supabase_realtime ADD TABLE budget_items;
ALTER PUBLICATION supabase_realtime ADD TABLE sponsors;
ALTER PUBLICATION supabase_realtime ADD TABLE sponsor_deliverables;