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

5.2 KiB

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
  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:

-- 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)

-- 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