1+ -- Create services table
2+ CREATE TABLE IF NOT EXISTS services (
3+ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
4+ name VARCHAR (255 ) NOT NULL ,
5+ description TEXT NOT NULL ,
6+ price DECIMAL (10 ,2 ) NOT NULL CHECK (price >= 0 ),
7+ duration VARCHAR (100 ) NOT NULL ,
8+ features TEXT [] NOT NULL DEFAULT ' {}' ,
9+ category VARCHAR (100 ) NOT NULL ,
10+ is_active BOOLEAN DEFAULT true,
11+ created_by UUID REFERENCES codev(id),
12+ created_at TIMESTAMP DEFAULT NOW(),
13+ updated_at TIMESTAMP DEFAULT NOW()
14+ );
15+
16+ -- Create indexes for better performance
17+ CREATE INDEX IF NOT EXISTS idx_services_category ON services(category);
18+ CREATE INDEX IF NOT EXISTS idx_services_is_active ON services(is_active);
19+ CREATE INDEX IF NOT EXISTS idx_services_created_by ON services(created_by);
20+
21+ -- Enable Row Level Security
22+ ALTER TABLE services ENABLE ROW LEVEL SECURITY;
23+
24+ -- RLS Policies for services table
25+ CREATE POLICY " Services are viewable by authenticated users" ON services
26+ FOR SELECT USING (auth .role () = ' authenticated' );
27+
28+ CREATE POLICY " Only admins can insert services" ON services
29+ FOR INSERT WITH CHECK (
30+ EXISTS (
31+ SELECT 1 FROM codev
32+ WHERE id = auth .uid ()
33+ AND role_id = 1
34+ )
35+ );
36+
37+ CREATE POLICY " Only admins can update services" ON services
38+ FOR UPDATE USING (
39+ EXISTS (
40+ SELECT 1 FROM codev
41+ WHERE id = auth .uid ()
42+ AND role_id = 1
43+ )
44+ );
45+
46+ CREATE POLICY " Only admins can delete services" ON services
47+ FOR DELETE USING (
48+ EXISTS (
49+ SELECT 1 FROM codev
50+ WHERE id = auth .uid ()
51+ AND role_id = 1
52+ )
53+ );
54+
55+ -- Create trigger to update updated_at timestamp
56+ CREATE OR REPLACE FUNCTION update_updated_at_column ()
57+ RETURNS TRIGGER AS $$
58+ BEGIN
59+ NEW .updated_at = NOW();
60+ RETURN NEW;
61+ END;
62+ $$ language ' plpgsql' ;
63+
64+ CREATE TRIGGER update_services_updated_at BEFORE UPDATE ON services
65+ FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
0 commit comments