Files
Trabalho-da-escola/SUPABASE_SETUP.md
Rodrigo Nogueira de Sousa 47d2cc65c3 first commit
2026-05-22 11:12:19 +01:00

144 lines
5.2 KiB
Markdown

# Configuração do Supabase para AppBarber
Este guia explica como configurar o Supabase para que todas as marcações sejam guardadas na base de dados em vez de apenas localmente.
## Passo 1: Criar projeto no Supabase
1. Aceda a [https://supabase.com](https://supabase.com)
2. Crie uma conta ou faça login
3. Clique em "New Project"
4. Escolha um nome para o projeto (ex: "AppBarber")
5. Escolha uma password de base de dados e guarde-a
6. Selecione a região mais próxima (ex: "South America East" para Portugal)
7. Clique em "Create new project" e aguarde a criação (2-3 minutos)
## Passo 2: Obter credenciais
1. No dashboard do Supabase, aceda a "Settings" > "API"
2. Copie o "Project URL"
3. Copie o "anon public key"
## Passo 3: Configurar o projeto
1. No arquivo `.env` na raiz do projeto, substitua:
```
EXPO_PUBLIC_SUPABASE_URL=your-supabase-project-url
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
```
Por:
```
EXPO_PUBLIC_SUPABASE_URL=https://seu-projeto-id.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=sua-chave-anon-real
```
## Passo 4: Criar tabelas no Supabase
No SQL Editor do Supabase, execute os seguintes comandos:
```sql
-- Tabela de utilizadores
CREATE TABLE users (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
phone TEXT,
role TEXT NOT NULL CHECK (role IN ('customer', 'barber', 'admin')),
photo TEXT,
loyalty_points INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabela de serviços
CREATE TABLE services (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
duration INTEGER NOT NULL,
price DECIMAL(10,2) NOT NULL,
image TEXT,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabela de barbeiros
CREATE TABLE barbers (
id TEXT PRIMARY KEY,
user_id TEXT REFERENCES users(id) ON DELETE CASCADE,
specialty TEXT,
bio TEXT,
rating DECIMAL(3,1) DEFAULT 4.5,
availability JSONB,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabela de marcações
CREATE TABLE bookings (
id TEXT PRIMARY KEY,
customer_id TEXT REFERENCES users(id) ON DELETE CASCADE,
barber_id TEXT REFERENCES barbers(id) ON DELETE CASCADE,
service_id TEXT REFERENCES services(id) ON DELETE CASCADE,
booking_date DATE NOT NULL,
booking_time TIME NOT NULL,
status TEXT DEFAULT 'pending' CHECK (status IN ('pending', 'confirmed', 'completed', 'cancelled')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabela de reviews
CREATE TABLE reviews (
id TEXT PRIMARY KEY,
user_id TEXT REFERENCES users(id) ON DELETE CASCADE,
barber_id TEXT REFERENCES barbers(id) ON DELETE CASCADE,
service_id TEXT REFERENCES services(id) ON DELETE SET NULL,
rating INTEGER CHECK (rating >= 1 AND rating <= 5),
comment TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabela de promoções
CREATE TABLE promotions (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
discount_percentage INTEGER,
is_active BOOLEAN DEFAULT true,
start_date DATE,
end_date DATE,
image TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
## Passo 5: Inserir dados iniciais (opcional)
```sql
-- Inserir serviços
INSERT INTO services (id, name, description, duration, price, image) VALUES
('svc-1', 'Corte Clássico', 'Corte de precisão adaptado ao formato do seu rosto. Inclui lavagem, corte e penteado com produtos premium.', 30, 35.00, 'https://images.unsplash.com/photo-1599351431202-1e0f0137899a?w=400'),
('svc-2', 'Escultura de Barba', 'Aparar e moldar a barba completa com tratamento de toalha quente e acabamento com navalha.', 25, 28.00, 'https://images.unsplash.com/photo-1621605815971-fbc98d665033?w=400'),
('svc-3', 'Barbear com Toalha Quente', 'Barbear tradicional com navalha, toalhas quentes, óleo pré-barba e bálsamo pós-barba.', 45, 45.00, 'https://images.unsplash.com/photo-1503951914875-452162b0f77f?w=400'),
('svc-4', 'Combo Corte + Barba', 'Pacote completo de grooming. Corte de cabelo completo com lavagem e penteado + aparar e moldar barba.', 55, 55.00, 'https://images.unsplash.com/photo-1633681926022-84c23e8cb2d6?w=400'),
('svc-5', 'Tratamento Real', 'Experiência premium: corte de cabelo, escultura de barba, barbear com toalha quente, esfoliação facial e massagem no couro cabeludo.', 90, 95.00, 'https://images.unsplash.com/photo-1605497788044-5a32c7078486?w=400'),
('svc-6', 'Corte para Crianças', 'Experiência de corte suave e divertida para meninos com menos de 12 anos. Inclui rebuçado!', 20, 22.00, 'https://images.unsplash.com/photo-1622286342621-4bd786c2447c?w=400');
```
## Passo 6: Reiniciar a aplicação
1. Pare o servidor atual (Ctrl+C)
2. Execute novamente: `npm run web`
## Verificação
Após configurar, quando fizer uma marcação:
- ✅ Os dados serão guardados no Supabase
- ✅ Receberá uma notificação detalhada da marcação
- ✅ Poderá ver "Ver Minhas Marcações" para aceder ao histórico
- ✅ As marcações persistirão mesmo em diferentes dispositivos
## Suporte
Se encontrar problemas:
1. Verifique que as credenciais no `.env` estão corretas
2. Confirme que as tabelas foram criadas no Supabase
3. Verifique os RLS (Row Level Security) policies se necessário