# 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