Pular para o conteúdo
Backend

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.

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. 1. endpoint de agendamento: receber JSON com data/hora,
    destinatário, mensagem e tipo de comunicação. Salvar isso no PostgreSQL.
  2. 2. endpoint de consulta: permitir buscar o status de envio por
    ID.
  3. 3. arquitetura RESTful: endpoints em JSON usando boas práticas
    de API.
  4. 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

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.