🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
61 lines
2.8 KiB
SQL
61 lines
2.8 KiB
SQL
-- Add fee structure columns to organizations table
|
|
ALTER TABLE organizations
|
|
ADD COLUMN platform_fee_type VARCHAR(20) DEFAULT 'percentage_plus_fixed',
|
|
ADD COLUMN platform_fee_percentage DECIMAL(5,4) DEFAULT 0.0300,
|
|
ADD COLUMN platform_fee_fixed INTEGER DEFAULT 30,
|
|
ADD COLUMN platform_fee_notes TEXT;
|
|
|
|
-- Add comments for clarity
|
|
COMMENT ON COLUMN organizations.platform_fee_type IS 'Fee type: percentage, fixed, percentage_plus_fixed';
|
|
COMMENT ON COLUMN organizations.platform_fee_percentage IS 'Percentage fee (0.03 = 3%)';
|
|
COMMENT ON COLUMN organizations.platform_fee_fixed IS 'Fixed fee in cents (30 = $0.30)';
|
|
COMMENT ON COLUMN organizations.platform_fee_notes IS 'Notes about the fee structure for this organization';
|
|
|
|
-- Update existing organizations with default fees
|
|
UPDATE organizations
|
|
SET
|
|
platform_fee_type = 'percentage_plus_fixed',
|
|
platform_fee_percentage = 0.0300,
|
|
platform_fee_fixed = 30
|
|
WHERE platform_fee_type IS NULL;
|
|
|
|
-- Add fee tracking to tickets table
|
|
ALTER TABLE tickets
|
|
ADD COLUMN platform_fee_charged INTEGER DEFAULT 0,
|
|
ADD COLUMN organizer_net INTEGER DEFAULT 0;
|
|
|
|
COMMENT ON COLUMN tickets.platform_fee_charged IS 'Platform fee charged in cents';
|
|
COMMENT ON COLUMN tickets.organizer_net IS 'Net amount organizer receives in cents';
|
|
|
|
-- Create fee_structures table for historical tracking and templates
|
|
CREATE TABLE fee_structures (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
fee_type VARCHAR(20) NOT NULL DEFAULT 'percentage_plus_fixed',
|
|
fee_percentage DECIMAL(5,4) DEFAULT 0.0000,
|
|
fee_fixed INTEGER DEFAULT 0,
|
|
is_template BOOLEAN DEFAULT false,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
-- Insert some common fee structure templates
|
|
INSERT INTO fee_structures (name, description, fee_type, fee_percentage, fee_fixed, is_template) VALUES
|
|
('Standard Platform Fee', 'Default 3% + $0.30 per transaction', 'percentage_plus_fixed', 0.0300, 30, true),
|
|
('Percentage Only 3%', '3% of transaction, no fixed fee', 'percentage', 0.0300, 0, true),
|
|
('Percentage Only 2.5%', '2.5% of transaction, no fixed fee', 'percentage', 0.0250, 0, true),
|
|
('Fixed Fee Only', '$1.00 flat fee per transaction', 'fixed', 0.0000, 100, true),
|
|
('Premium Rate', '3.5% + $0.50 for premium features', 'percentage_plus_fixed', 0.0350, 50, true),
|
|
('Volume Discount', '2% + $0.25 for high-volume clients', 'percentage_plus_fixed', 0.0200, 25, true);
|
|
|
|
-- Enable RLS on fee_structures
|
|
ALTER TABLE fee_structures ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Anyone can read templates
|
|
CREATE POLICY "Anyone can view fee structure templates" ON fee_structures
|
|
FOR SELECT USING (is_template = true);
|
|
|
|
-- Add indexes for performance
|
|
CREATE INDEX idx_organizations_platform_fee_type ON organizations(platform_fee_type);
|
|
CREATE INDEX idx_tickets_platform_fee ON tickets(platform_fee_charged);
|
|
CREATE INDEX idx_fee_structures_template ON fee_structures(is_template); |