75 lines
No EOL
2.2 KiB
PL/PgSQL
75 lines
No EOL
2.2 KiB
PL/PgSQL
-- 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(); |