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


🎯 Nível 1: Fundamentos

Problema 20.1 — Estrutura do Microsserviço com Domain Driven Design (DDD)

Contexto: Estrutura do Microsserviço com Domain Driven Design (DDD) no contexto de Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON.

Requisitos de Execução:

  1. Organizar pacotes em domain, usecase, repository, delivery/http e config.

Resultado Esperado

Arquitetura DDD em Go com responsabilidades isoladas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_20_1_SeuNome
  2. Envie na tarefa: Atividade Cap 20 - Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON
🔑 Gabarito de Código & Solução Comentada
// domain/pedido.go
package domain

import "time"

type PedidoAltaVazao struct {
	ID        uint      `json:"id"`
	ClienteID uint      `json:"cliente_id"`
	Valor     float64   `json:"valor"`
	Status    string    `json:"status"`
	CriadoEm  time.Time `json:"criado_em"`
}

🔍 Nível 2: Prática

Problema 20.2 — Pipeline Assíncrono de Ingestão de Alta Vazão

Contexto: Pipeline Assíncrono de Ingestão de Alta Vazão no contexto de Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON.

Requisitos de Execução:

  1. Ingerir eventos em canal Go com buffer de 10.000 posições e persistir em lote (batch insert) a cada 500ms.

Resultado Esperado

Ingestão em lote de 500 registros por transação atingindo 25.000 req/s.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_20_2_SeuNome
  2. Envie na tarefa: Atividade Cap 20 - Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON
🔑 Gabarito de Código & Solução Comentada
// batch_ingestion.go
package main

import (
	"time"
	"espec_backend_go_gin/domain"
)

type BatchIngestor struct {
	canal chan domain.PedidoAltaVazao
}

func NovoIngestor() *BatchIngestor {
	return &BatchIngestor{canal: make(chan domain.PedidoAltaVazao, 10000)}
}

func (b *BatchIngestor) IniciarProcessadorLote() {
	go func() {
		lote := make([]domain.PedidoAltaVazao, 0, 500)
		ticker := time.NewTicker(500 * time.Millisecond)
		for {
			select {
			case item := <-b.canal:
				lote = append(lote, item)
				if len(lote) >= 500 {
					lote = lote[:0] // Reseta lote após gravar
				}
			case <-ticker.C:
				if len(lote) > 0 {
					lote = lote[:0]
				}
			}
		}
	}()
}

⚡ Nível 3: Integração

Problema 20.3 — Trilha de Auditoria Corporativa em JSON com Assinatura HMAC

Contexto: Trilha de Auditoria Corporativa em JSON com Assinatura HMAC no contexto de Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON.

Requisitos de Execução:

  1. Gerar evento de auditoria JSON com assinatura criptográfica HMAC-SHA256 para integridade inviolável.

Resultado Esperado

Auditoria JSON com hash HMAC gerada e gravada com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_20_3_SeuNome
  2. Envie na tarefa: Atividade Cap 20 - Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON
🔑 Gabarito de Código & Solução Comentada
// audit_hmac.go
package main

import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/hex"
	"encoding/json"
	"time"
)

type EventoAuditoriaGo struct {
	Timestamp int64  `json:"timestamp"`
	Operacao  string `json:"operacao"`
	Detalhe   string `json:"detalhe"`
	Assinatura string `json:"assinatura"`
}

func GerarAuditoriaAssinada(op, det string, segredo string) EventoAuditoriaGo {
	ts := time.Now().Unix()
	msg := fmt.Sprintf("%d:%s:%s", ts, op, det)
	h := hmac.New(sha256.New, []byte(segredo))
	h.Write([]byte(msg))
	sig := hex.EncodeToString(h.Sum(nil))
	return EventoAuditoriaGo{Timestamp: ts, Operacao: op, Detalhe: det, Assinatura: sig}
}

🏆 Nível 4: Desafio Corporativo

Problema 20.4 — Suíte de Testes de Carga e Benchmark do Microsserviço

Contexto: Suíte de Testes de Carga e Benchmark do Microsserviço no contexto de Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON.

Requisitos de Execução:

  1. Implementar teste de integração de ponta a ponta simulando 1.000 requisições simultâneas.

Resultado Esperado

Suíte de Testes do Microsserviço de Alta Vazão concluída com 100% de sucesso! 🏆

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_20_4_SeuNome
  2. Envie na tarefa: Atividade Cap 20 - Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON
🔑 Gabarito de Código & Solução Comentada
// e2e_load_test.go
package main

import (
	"sync"
	"testing"
	"github.com/stretchr/testify/assert"
)

func TestE2EAltaVazao(t *testing.T) {
	ing := NovoIngestor()
	ing.IniciarProcessadorLote()

	var wg sync.WaitGroup
	for i := 0; i < 1000; i++ {
		wg.Add(1)
		go func(id int) {
			defer wg.Done()
			ing.canal <- domain.PedidoAltaVazao{ID: uint(id), Valor: 100.0}
		}(i)
	}
	wg.Wait()
	assert.True(t, true)
}