Desafios Apex

Prática guiada: treine no que realmente quebra em produção

Cada desafio traz um cenário que existe de verdade numa org, a assinatura do método que você precisa entregar e as regras de aceite. Não tem passo a passo dizendo o que digitar: tem o problema, o critério e as dicas de onde pesquisar. O gabarito vem comentado, explicando cada decisão, e fica escondido até você querer ver.

Como usar: leia o cenário, escreva a classe na sua org de desenvolvimento e rode o código de teste que está no fim de cada desafio. Se travar, abra as dicas antes do gabarito. Travar e descobrir o que pesquisar é parte do treino, e é exatamente essa parte que o mercado cobra.

Desafio 09

Atualizar meio milhão de contas sem estourar o limite

Um update da base inteira estoura o heap e o limite de DML numa transação só. Você vai reescrever a classificação como Batch Apex, acumular o total entre lotes com Database.Stateful e garantir que rodar de novo não muda nada.

Avançado Batch Apex QueryLocator Idempotência
Desafio 08

Salvar o lote quando um registro inválido derruba tudo

Uma conta sem nome no meio do lote derruba as outras 199 e desfaz a importação. Você vai gravar os válidos com Database.insert parcial e devolver o erro de cada linha que falhou, com índice e mensagem.

Intermediário Database.insert allOrNone SaveResult
Desafio 07

Descobrir por que o usuário não vê o registro

O registro existe, mas o usuário jura que sumiu. Você vai construir o diagnóstico que responde por que o acesso existe ou não, usando UserRecordAccess e a RowCause do compartilhamento, do OWD ao dono.

Avançado UserRecordAccess Sharing RowCause
Desafio 01

Somar 200 contas com uma única consulta

O código funciona na demonstração com três contas e morre em produção. Você vai entregar um método que resolve qualquer volume com um SOQL só, e que não esconde as contas sem resultado.

Fundamento SOQL agregado Bulkificação Map
Desafio 02

Filtro dinâmico sem abrir a porta para injection

A tela deixa o usuário escolher o campo e o valor da busca. Você vai fazer isso funcionar para qualquer campo do objeto sem permitir que alguém injete SOQL nem leia campo que não deveria.

Intermediário SOQL dinâmico Schema describe Segurança
Desafio 03

O teste que realmente testa, não só cobre

Cobertura de 90% que passa mesmo com o código errado é fácil. Você vai escrever a classe de teste que fica vermelha quando a regra quebra, com @TestSetup, bulk de 200 e caminho negativo.

Intermediário Testes Apex @TestSetup Fronteira
Desafio 04

Uma task por venda, mesmo com o trigger rodando duas vezes

A automação atualiza o registro, o trigger reexecuta na mesma transação e a org duplica tarefas em silêncio. Você vai construir o handler que detecta a mudança real e nunca duplica, sem quebrar o lote de 201.

Intermediário Trigger handler oldMap Reexecução
Desafio 05

Avisar o ERP quando a venda fecha, sem sequestrar a transação

O callout no trigger trava metade das vendas com "You have uncommitted work pending". Você vai tirar a chamada da transação com Queueable, tratar timeout com retry e garantir idempotência para não duplicar o pedido.

Avançado Callout Queueable Idempotência
Desafio 06

Listar 5 mil registros sem travar o navegador

A tela funciona com trinta linhas e congela com cinco mil. Você vai paginar no servidor com Apex cacheable e cursor por Id, manter o estado entre as cargas e tratar o erro sem deixar a tela em branco.

Avançado LWC Paginação Apex cacheable
Desafio 10

Em breve: respeitar as permissões de campo na leitura e na escrita

Apex roda com acesso total por padrão e acaba lendo e gravando campo que o usuário nem deveria ver. O próximo desafio é respeitar o FLS de ponta a ponta, com USER_MODE e stripInaccessible, sem quebrar quando um campo é negado.

Intermediário FLS USER_MODE

Prática que pode ser retomada no seu ritmo. Os desafios existentes permanecem disponíveis com seus gabaritos comentados. Se quiser acompanhar, o blog tem os artigos que dão a base de cada tema, e o glossário explica os termos que aparecem aqui.