-- Create businesses table CREATE TABLE IF NOT EXISTS public.businesses ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, name TEXT NOT NULL, address TEXT NOT NULL, phone TEXT NOT NULL, description TEXT NOT NULL, website TEXT, source TEXT NOT NULL, rating REAL, location POINT, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); -- Create indexes CREATE INDEX IF NOT EXISTS idx_businesses_source ON public.businesses(source); CREATE INDEX IF NOT EXISTS idx_businesses_rating ON public.businesses(rating); CREATE INDEX IF NOT EXISTS idx_businesses_location ON public.businesses USING GIST(location); -- Enable Row Level Security (RLS) ALTER TABLE public.businesses ENABLE ROW LEVEL SECURITY; -- Create policies CREATE POLICY "Allow public read access" ON public.businesses FOR SELECT USING (true); CREATE POLICY "Allow service role insert/update" ON public.businesses FOR ALL USING (auth.role() = 'service_role'); -- Create function to update updated_at timestamp CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ language 'plpgsql'; -- Create trigger for updated_at CREATE TRIGGER update_businesses_updated_at BEFORE UPDATE ON public.businesses FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- Create the searches table CREATE TABLE searches ( id BIGSERIAL PRIMARY KEY, query TEXT NOT NULL, results JSONB NOT NULL DEFAULT '[]', created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); -- Create an index on the query column for faster lookups CREATE INDEX searches_query_idx ON searches USING GIN (to_tsvector('english', query)); -- Create a function to update the updated_at timestamp CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ language 'plpgsql'; -- Create a trigger to automatically update the updated_at column CREATE TRIGGER update_searches_updated_at BEFORE UPDATE ON searches FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();