Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Seed Data

Os INSERTs que fizemos manualmente servem para aprender SQL, mas não são práticos no dia a dia. Quando um colega clona o repositório e roda as migrations, o banco está vazio — sem dados para testar, sem nada para renderizar no frontend. Para resolver isso, usamos seed data: um script que popula o banco com dados de teste.

Crie o arquivo backend/seed.sql:

Arquivo: backend/seed.sql
-- Limpar dados existentes (para poder rodar o seed repetidamente)
TRUNCATE events, users RESTART IDENTITY CASCADE;

-- Usuários
INSERT INTO users (name, email) VALUES
    ('Ana Silva',    'ana@email.com'),
    ('Bruno Costa',  'bruno@email.com'),
    ('Carla Souza',  'carla@email.com');

-- Eventos organizados pela Ana (id = 1)
INSERT INTO events (title, description, location, date, capacity, organizer_id) VALUES
    ('Hackathon UFS',
     'Maratona de programação de 24h aberta a todos os cursos',
     'Centro de Vivência - UFS', '2026-09-15 08:00', 50, 1),
    ('Workshop de Git',
     'Aprenda Git do zero com exercícios práticos',
     'Lab 1 - DCOMP', '2026-09-18 14:00', 25, 1),
    ('Café com Código',
     'Bate-papo informal sobre carreira em tech',
     'Cantina Central', '2026-09-22 10:00', 15, 1),
    ('Palestra: IA Generativa',
     'Introdução a LLMs e suas aplicações',
     'Auditório do CCET', '2026-10-01 19:00', 80, 1);

-- Eventos organizados pelo Bruno (id = 2)
INSERT INTO events (title, description, location, date, capacity, organizer_id) VALUES
    ('Meetup de TypeScript',
     'Palestra sobre tipos avançados em TS',
     'Auditório do DCOMP', '2026-09-20 19:00', 30, 2),
    ('Torneio de Ping-Pong',
     'Torneio aberto para a comunidade universitária',
     'Ginásio - UFS', '2026-09-25 15:00', 32, 2),
    ('Cineclube: Wargames',
     'Sessão comentada do filme Wargames (1983)',
     'Sala de Projeção - Biblioteca', '2026-10-05 18:30', 40, 2),
    ('Aulão de SQL',
     'Revisão intensiva de SQL para a prova',
     'Lab 2 - DCOMP', '2026-10-10 08:00', 35, 2);

-- Eventos organizados pela Carla (id = 3)
INSERT INTO events (title, description, location, date, capacity, organizer_id) VALUES
    ('Grupo de Estudos: Redes',
     'Estudo colaborativo dos capítulos 3 e 4 do Kurose',
     'Sala de Estudos - Biblioteca', '2026-09-19 16:00', 12, 3),
    ('Oficina de Arduino',
     'Monte seu primeiro circuito com Arduino Uno',
     'Lab de Eletrônica - DEL', '2026-09-28 09:00', 20, 3),
    ('Sarau Nerd',
     'Poesia, música e stand-up com tema de computação',
     'Praça da Reitoria', '2026-10-08 19:00', 60, 3),
    ('Corrida da Integração',
     'Corrida de 5km entre os cursos de exatas',
     'Pista de Atletismo - UFS', '2026-10-12 06:30', 100, 3);

Código 5-4: Seed data com 3 usuários e 12 eventos.

O TRUNCATE ... RESTART IDENTITY CASCADE no início limpa todas as tabelas e reinicia os contadores de SERIAL, permitindo rodar o seed várias vezes sem acumular duplicatas. O CASCADE é necessário porque events tem um foreign key apontando para users — sem ele, o PostgreSQL se recusaria a truncar users enquanto existirem eventos referenciando registros dela.

Para executar:

$ psql postgres://localhost:5432/tamojunto -f backend/seed.sql
TRUNCATE TABLE
INSERT 0 3
INSERT 0 4
INSERT 0 4
INSERT 0 4

12 eventos, 3 usuários. Dados suficientes para o frontend ter algo para renderizar sem precisar de paginação — e concretos o bastante para parecerem reais durante o desenvolvimento.