mirror of
https://github.com/ItzCrazyKns/Perplexica.git
synced 2025-07-12 03:28:45 +00:00
feat: update database schema and migrations
This commit is contained in:
75
supabase/migrations/20240106_init.sql
Normal file
75
supabase/migrations/20240106_init.sql
Normal file
@ -0,0 +1,75 @@
|
||||
-- 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();
|
Reference in New Issue
Block a user