Desafio estágio Magalu: API Spring Boot (como abordar)
Walkthrough técnico do desafio — não é “resolvido = aprovado”. Soften carreira.
Por que isso é importante
Desafio de estágio Magalu: clareza, testes e README costumam pesar mais que framework da moda — sem garantir vaga.
Leitura relacionada: Aprender Node.js · DTO / Repository · Curso Node.js · Programa CrazyStack.
O Contexto do Desafio
O Magalu deseja desenvolver uma plataforma de comunicação em Sprints. O desafio é criar
uma API back-end capaz de registrar agendamentos de envios de mensagens através de
e-mail, WhatsApp, SMS ou push. Seu objetivo é estruturar dois endpoints principais: um
para cadastrar a solicitação e outro para consultar o status.
Requisitos Técnicos
- 1. endpoint de agendamento: receber JSON com data/hora,
destinatário, mensagem e tipo de comunicação. Salvar isso no PostgreSQL. - 2. endpoint de consulta: permitir buscar o status de envio por
ID. - 3. arquitetura RESTful: endpoints em JSON usando boas práticas
de API. - 4. implementação limpa: usar Spring Boot, Hibernate/JPA,
PostgreSQL com estrutura em camadas.
Estrutura do Projeto
O projeto foi criado com Spring Initializr, incluindo as dependências: Spring Web,
Spring Data JPA, PostgreSQL Driver, Lombok, Validation e DevTools. A arquitetura segue o
padrão Model → Repository → Service → Controller.
Modelagem da Entidade
Criamos a entidade Agendamento com os campos: id, destinatário,
mensagem, tipo de comunicação (enum), data/hora de envio, status do agendamento (enum) e
data de criação. As enums foram modeladas para refletir os tipos (EMAIL, SMS, PUSH,
WHATSAPP) e status (AGENDADO, ENVIADO, CANCELADO).
DTOs para Solicitação e Resposta
Utilizamos DTOs para separar o modelo de entidade das trocas de dados.
O AgendamentoRequest carrega apenas os dados necessários no POST com validações
usando Bean Validation para atributos obrigatórios e datas futuras. Já o AgendamentoResponse devolve dados ao cliente após cadastramento ou consulta.
Camada de Repository
A interface AgendamentoRepository estende JpaRepository para
permitir persistência automática da entidade. Isso facilita encontrar por ID e salvar
agendamentos sem código de SQL manual.
Implementamos a Service
A classe AgendamentoService centraliza a lógica de negócio como
transformar o DTO em entidade, preencher os campos de auditoria, validar se a data de
envio é futura e persistir via repository. Isso isola regras de negócio da camada de
controle.
Criação dos Endpoints no Controller
Em AgendamentoController , definimos as rotas: POST /agendamentos para cadastrar e GET /agendamentos/ {id} para
consultar. O controller delega para o service garantindo responsabilidade única.
Validações e Segurança dos Dados
Usamos anotações como @NotBlank , @NotNull e @Future diretamente nos DTOs, garantindo consistência da entrada antes de chegar ao banco. Isso
ajuda a reduzir erros e garantir que os dados entregues tenham significado.
Atenção
Ao trabalhar com data/hora, sempre valide se seu servidor está em UTC ou timezone
local para evitar bugs de agendamentos que já passaram.
Diferenciais Visando Equipe e Escalabilidade
A arquitetura em camadas permite que outros desenvolvedores estendam o sistema com novos
canais de envio ou regras sem reescrever a lógica atual. O banco preparado e os enums
evitam retrabalho posterior.
Ferramentas Utilizadas
Dica Importante
Utilize Spring Initializr para gerar projetos rapidamente com as dependências
pré-selecionadas. Otimiza seu tempo e mantém suas builds organizadas.
Próximos Passos
No próximo vídeo, serão implementados os testes unitários para validar os endpoints com
JUnit. Isso tornará a aplicação pronta para testes automatizados, garantindo confiança
na evolução do sistema.
Checklist de Implementação
- Projeto gerado com Spring Boot e dependências corretas
- Entidade Agendamento configurada adequadamente
- DTOs com validações adicionadas
- Repositório com JpaRepository funcionando
- Service com lógica de transformação e persistência
- Endpoints RESTful criados com controller
- Banco PostgreSQL testado e pronto para inserções
Perguntas frequentes
Como abordar o desafio de estágio Magalu?
Entenda o enunciado, entregue código limpo, testes básicos e README. Comunicação clara conta.
Precisa de framework fancy?
Não. Solução correta e legível > buzzword.
Quanto tempo investir?
Planeje, implemente o core, depois polish. Não deixe README por último.
E se travar?
Documente trade-offs e o que faria com mais tempo — mostra maturidade.
Continue explorando
Continue: Aprender Node.js · DTO / Repository · Curso Node.js · Programa CrazyStack.
Perguntas frequentes
Como abordar o desafio de estágio Magalu?
Entenda o enunciado, entregue código limpo, testes básicos e README claro. Isso melhora a entrega — não garante aprovação no processo seletivo.
Precisa de framework fancy?
Não. Solução correta e legível > buzzword. Mostre camadas e validação sem overengineering.
Quanto tempo investir?
Planeje, implemente o core, depois polish. Não deixe README por último.
E se travar?
Documente trade-offs e o que faria com mais tempo — demonstra maturidade técnica, não resultado de RH.