← O caminho IaGenify

Back-end

02 · 2–3 semanas

Transforme a experiência do usuário em uma aplicação confiável com lógica de servidor, identidade e dados.

Candidatar-se↗
Node.jsExpressMongoDB

Back-end, aplicado em trabalho real.

Transforme a experiência do usuário em uma aplicação confiável com lógica de servidor, identidade e dados.

Transforme uma interface numa aplicação que responde e guarda informações.

A etapa Back-end leva a lógica da aplicação para o servidor e conecta-a a dados persistentes e identidade com Node.js, Express e MongoDB.

Definir a fronteira do servidor

O back-end oferece à interface um lugar confiável para solicitar trabalho. Com Node.js e Express, você aprenderá como uma rota recebe uma solicitação, aplica a lógica da aplicação e devolve uma resposta útil. Uma fronteira clara separa a apresentação das regras e do tratamento de dados.

Dar aos dados um lugar duradouro

MongoDB apresenta o armazenamento de dados orientado a documentos. É preciso decidir quais informações pertencem juntas, como os registros se relacionam com a aplicação e como o servidor os consulta ou atualiza. Uma camada de dados bem estruturada torna a aplicação útil além de uma sessão do navegador.

Conectar identidade a ações protegidas

A autenticação faz parte do fluxo da aplicação, não apenas de uma tela de entrada. JWT e Google OAuth cumprem papéis diferentes: um representa uma sessão autenticada e o outro permite estabelecer a identidade por meio do Google. A etapa reúne rotas, dados e identidade numa aplicação dinâmica.

Do conceito ao código funcional

Estes trechos mostram como os conceitos de cada nível aparecem em projetos reais. São pontos de partida para ler, questionar, adaptar e testar — não código para copiar sem entender.

Validar na fronteira do servidor

A rota obtém o ID da oficina pela URL e valida os dados antes de gravar. Ela diferencia entradas inválidas, oficina inexistente e criação bem-sucedida com status HTTP apropriados.

router.post("/workshops/:id/registrations", async (req, res) => {
  const { name, email } = req.body;
  const workshopId = req.params.id;

  if (!name?.trim() || !/^\S+@\S+\.\S+$/.test(email ?? "")) {
    return res.status(400).json({ error: "Name and valid email required." });
  }

  const workshop = await workshops.findOne({ _id: workshopId });
  if (!workshop) return res.status(404).json({ error: "Workshop not found." });

  const registration = await registrations.insertOne({
    workshopId,
    name: name.trim(),
    email: email.toLowerCase(),
    createdAt: new Date(),
  });

  return res.status(201).json({ id: registration.insertedId });
});

Isolar a persistência em um repositório

O repositório concentra as operações do MongoDB e oferece uma interface pequena ao restante da aplicação. Assim a rota fica clara e o armazenamento pode ser alterado ou testado em um único local.

export function createRegistrationRepository(db) {
  const registrations = db.collection("registrations");

  return {
    async create(input) {
      const result = await registrations.insertOne({
        workshopId: input.workshopId,
        name: input.name.trim(),
        email: input.email.toLowerCase(),
        status: "pending",
        createdAt: new Date(),
      });

      return { id: result.insertedId.toString(), status: "pending" };
    },

    findForWorkshop(workshopId) {
      return registrations.find({ workshopId }).toArray();
    },
  };
}
Leia e depois adapte

Altere um requisito, preveja o resultado e execute o código para conferir. Na revisão, explique a escolha feita e uma melhoria que faria a seguir.

TECNOLOGIAS PRINCIPAIS
  • Node.js
  • Express
  • MongoDB
  • JWT
  • Google OAuth