Spec Backend Com Golang E Gin • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 08.1 — Execução de AutoMigrate de Múltiplos Modelos

Contexto: Execução de AutoMigrate de Múltiplos Modelos no contexto de Migrações e Versionamento de Banco de Dados.

Requisitos de Execução:

  1. Criar rotina de migração declarativa que registre e sincronize todas as structs do sistema.

Resultado Esperado

AutoMigrate sincronizou 5 tabelas no banco de dados.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_08_1_SeuNome
  2. Envie na tarefa: Atividade Cap 08 - Migrações e Versionamento de Banco de Dados
🔑 Gabarito de Código & Solução Comentada
// migrations/automigrate.go
package migrations

import (
	"gorm.io/gorm"
	"espec_backend_go_gin/models"
)

func RunAutoMigrate(db *gorm.DB) error {
	return db.AutoMigrate(
		&models.Produto{},
		&models.ClienteComPedidos{},
		&models.Pedido{},
	)
}

🔍 Nível 2: Prática

Problema 08.2 — Migração Baseada em Arquivos SQL com golang-migrate

Contexto: Migração Baseada em Arquivos SQL com golang-migrate no contexto de Migrações e Versionamento de Banco de Dados.

Requisitos de Execução:

  1. Configurar biblioteca golang-migrate para aplicar arquivos de migração .up.sql e .down.sql.

Resultado Esperado

Migração '000001_criar_tabela_usuarios.up.sql' aplicada com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_08_2_SeuNome
  2. Envie na tarefa: Atividade Cap 08 - Migrações e Versionamento de Banco de Dados
🔑 Gabarito de Código & Solução Comentada
// sql_migrate.go
package main

import (
	"database/sql"
	"github.com/golang-migrate/migrate/v4"
	"github.com/golang-migrate/migrate/v4/database/sqlite3"
	_ "github.com/golang-migrate/migrate/v4/source/file"
)

func ExecutarMigracoesSQL(db *sql.DB) error {
	driver, err := sqlite3.WithInstance(db, &sqlite3.Config{})
	if err != nil { return err }
	m, err := migrate.NewWithDatabaseInstance("file://migrations", "sqlite3", driver)
	if err != nil { return err }
	return m.Up()
}

⚡ Nível 3: Integração

Problema 08.3 — Seed de Dados Iniciais (Data Seeding) com Idempotência

Contexto: Seed de Dados Iniciais (Data Seeding) com Idempotência no contexto de Migrações e Versionamento de Banco de Dados.

Requisitos de Execução:

  1. Criar rotina de seed que popule dados de admin e papéis padrão apenas se a tabela estiver vazia.

Resultado Esperado

Seeding idempotente concluído: 1 usuário admin padrão inserido.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_08_3_SeuNome
  2. Envie na tarefa: Atividade Cap 08 - Migrações e Versionamento de Banco de Dados
🔑 Gabarito de Código & Solução Comentada
// seeding.go
package main

import (
	"gorm.io/gorm"
	"espec_backend_go_gin/models"
)

func SeedDadosIniciais(db *gorm.DB) error {
	var count int64
	db.Model(&models.Produto{}).Count(&count)
	if count == 0 {
		prodPadrao := models.Produto{Nome: "Produto Inicial", Preco: 99.0, SKU: "INIT-01"}
		return db.Create(&prodPadrao).Error
	}
	return nil
}

🏆 Nível 4: Desafio Corporativo

Problema 08.4 — Controle de Versão de Migrações em Pipeline CI/CD

Contexto: Controle de Versão de Migrações em Pipeline CI/CD no contexto de Migrações e Versionamento de Banco de Dados.

Requisitos de Execução:

  1. Criar comando CLI para verificar a versão atual da migração e abortar build se houver drift no schema.

Resultado Esperado

Verificação de integridade de migrações aprovada.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_08_4_SeuNome
  2. Envie na tarefa: Atividade Cap 08 - Migrações e Versionamento de Banco de Dados
🔑 Gabarito de Código & Solução Comentada
// check_version.go
package main

import "log"

func VerificarSchemaVersion(versaoEsperada int, versaoAtual int) bool {
	if versaoAtual != versaoEsperada {
		log.Printf("ERRO: Drift detectado! Esperado: %d, Atual: %d", versaoEsperada, versaoAtual)
		return false
	}
	log.Println("Schema version 100% alinhado com a HEAD.")
	return true
}