Spec Backend Com Php E Laravel • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 05.1 — Criação de Tabela com Chave Primária, Índices e Timestamps

Contexto: Criação de Tabela com Chave Primária, Índices e Timestamps no contexto de Migrations e Schema Builder do Laravel.

Requisitos de Execução:

  1. Escrever migration criando tabela produtos com campos tipados e índices.

Resultado Esperado

Migration executada: Tabela `produtos` criada com índices únicos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_05_1_SeuNome
  2. Envie na tarefa: Atividade Cap 05 - Migrations e Schema Builder do Laravel
🔑 Gabarito de Código & Solução Comentada
<?php
// database/migrations/2026_01_01_000000_create_produtos_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('produtos', function (Blueprint $table) {
            $table->id();
            $table->string('nome', 150)->index();
            $table->string('sku', 50)->unique();
            $table->decimal('preco', 10, 2);
            $table->boolean('ativo')->default(true);
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('produtos');
    }
};

🔍 Nível 2: Prática

Problema 05.2 — Chave Estrangeira com cascadeOnDelete e Restrições de Integridade

Contexto: Chave Estrangeira com cascadeOnDelete e Restrições de Integridade no contexto de Migrations e Schema Builder do Laravel.

Requisitos de Execução:

  1. Criar migration da tabela pedidos com foreign key referenciando users com deleção em cascata.

Resultado Esperado

Chave estrangeira `user_id` configurada com cascadeOnDelete.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_05_2_SeuNome
  2. Envie na tarefa: Atividade Cap 05 - Migrations e Schema Builder do Laravel
🔑 Gabarito de Código & Solução Comentada
<?php
// database/migrations/2026_01_01_000001_create_pedidos_table.php
Schema::create('pedidos', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->constrained()->cascadeOnDelete();
    $table->decimal('total', 10, 2);
    $table->string('status')->default('PENDENTE');
    $table->timestamps();
});

⚡ Nível 3: Integração

Problema 05.3 — Alteração de Tabela com Schema::table e Rollback Seguro

Contexto: Alteração de Tabela com Schema::table e Rollback Seguro no contexto de Migrations e Schema Builder do Laravel.

Requisitos de Execução:

  1. Adicionar coluna desconto e renomear coluna com método down() correspondente.

Resultado Esperado

Migration de alteração aplicada com suporte a rollback reversível.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_05_3_SeuNome
  2. Envie na tarefa: Atividade Cap 05 - Migrations e Schema Builder do Laravel
🔑 Gabarito de Código & Solução Comentada
<?php
// database/migrations/2026_01_01_000002_add_desconto_to_pedidos_table.php
public function up(): void
{
    Schema::table('pedidos', function (Blueprint $table) {
        $table->decimal('desconto', 8, 2)->default(0.0)->after('total');
    });
}

public function down(): void
{
    Schema::table('pedidos', function (Blueprint $table) {
        $table->dropColumn('desconto');
    });
}

🏆 Nível 4: Desafio Corporativo

Problema 05.4 — Migrations Transacionais e Suporte a Schemas Múltiplos

Contexto: Migrations Transacionais e Suporte a Schemas Múltiplos no contexto de Migrations e Schema Builder do Laravel.

Requisitos de Execução:

  1. Executar migrações complexas encapsuladas em transações com chave de idempotência.

Resultado Esperado

Migração corporativa concluída com commit seguro.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_05_4_SeuNome
  2. Envie na tarefa: Atividade Cap 05 - Migrations e Schema Builder do Laravel
🔑 Gabarito de Código & Solução Comentada
<?php
// migration_transacional.php
use Illuminate\Support\Facades\DB;

DB::transaction(function () {
    // Execução de queries DDL seguras
});
$executado = true;
\Log::info('Operação corporativa executada com sucesso.');