Initial commit: SIBU 2.0 MISSION
This commit is contained in:
77
old/supabase/migrations/20250126225029_taxi_module.sql
Normal file
77
old/supabase/migrations/20250126225029_taxi_module.sql
Normal file
@ -0,0 +1,77 @@
|
||||
-- Location: supabase/migrations/20250126225029_taxi_module.sql
|
||||
-- Schema Analysis: Existing transportation system with routes, stops, timetable
|
||||
-- Integration Type: NEW_MODULE - Adding taxi directory functionality
|
||||
-- Dependencies: No direct references to existing tables (standalone module)
|
||||
|
||||
-- Create tables for taxi directory functionality
|
||||
CREATE TABLE public.taxis (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
name TEXT NOT NULL,
|
||||
phone TEXT NOT NULL,
|
||||
district TEXT NOT NULL,
|
||||
is_active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Create favorites table (conditional user relationship)
|
||||
CREATE TABLE public.favorite_taxis (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL,
|
||||
taxi_id UUID REFERENCES public.taxis(id) ON DELETE CASCADE,
|
||||
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Essential indexes for performance
|
||||
CREATE INDEX idx_taxis_district ON public.taxis(district);
|
||||
CREATE INDEX idx_taxis_is_active ON public.taxis(is_active);
|
||||
CREATE INDEX idx_taxis_name ON public.taxis(name);
|
||||
CREATE INDEX idx_favorite_taxis_user_id ON public.favorite_taxis(user_id);
|
||||
CREATE INDEX idx_favorite_taxis_taxi_id ON public.favorite_taxis(taxi_id);
|
||||
|
||||
-- Unique constraint for user-taxi favorites
|
||||
CREATE UNIQUE INDEX idx_favorite_taxis_unique ON public.favorite_taxis(user_id, taxi_id);
|
||||
|
||||
-- Enable RLS for security
|
||||
ALTER TABLE public.taxis ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.favorite_taxis ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- RLS Policies using Pattern 4: Public Read, Private Write
|
||||
CREATE POLICY "public_can_read_taxis"
|
||||
ON public.taxis
|
||||
FOR SELECT
|
||||
TO public
|
||||
USING (true);
|
||||
|
||||
-- Pattern 2: Simple User Ownership for favorites
|
||||
CREATE POLICY "users_manage_own_favorite_taxis"
|
||||
ON public.favorite_taxis
|
||||
FOR ALL
|
||||
TO authenticated
|
||||
USING (user_id = auth.uid())
|
||||
WITH CHECK (user_id = auth.uid());
|
||||
|
||||
-- Allow anonymous users to read favorites (for local storage fallback)
|
||||
CREATE POLICY "public_can_read_favorite_taxis"
|
||||
ON public.favorite_taxis
|
||||
FOR SELECT
|
||||
TO public
|
||||
USING (true);
|
||||
|
||||
-- Sample taxi data for different districts
|
||||
DO $$
|
||||
BEGIN
|
||||
INSERT INTO public.taxis (name, phone, district, is_active) VALUES
|
||||
('Taxi Central Boquete', '+507 720-1234', 'Boquete', true),
|
||||
('Taxi Flores David', '+507 775-5678', 'David', true),
|
||||
('Taxi Montaña Verde', '+507 720-9101', 'Boquete', true),
|
||||
('Taxi Ciudad David', '+507 775-1122', 'David', true),
|
||||
('Taxi Volcán Express', '+507 771-3344', 'Volcán', true),
|
||||
('Taxi Dolega Rápido', '+507 721-5566', 'Dolega', true),
|
||||
('Taxi Bugaba Seguro', '+507 772-7788', 'Bugaba', true),
|
||||
('Taxi Renacimiento', '+507 773-9900', 'Renacimiento', true),
|
||||
('Taxi Alanje Centro', '+507 774-2233', 'Alanje', true),
|
||||
('Taxi Boquerón', '+507 775-4455', 'Boquerón', true),
|
||||
('Taxi Los Naranjos', '+507 720-6677', 'Boquete', true),
|
||||
('Taxi San Lorenzo', '+507 775-8899', 'David', true);
|
||||
END $$;
|
||||
Reference in New Issue
Block a user