Skip to main content

Backend

Introducão

O backend do projeto foi estruturado com base na arquitetura pensada para suportar um alto volume de acessos. Dessa forma, o início do desenvolvimento iniciou com a construção das rotas básicas de cada tabela, ou seja, as rotas de CRUD (Create, Read, Update e Delete). A tecnologia utilizada foi o frameweork NestJS, que é um framework para construção de aplicações escaláveis e de fácil manutenção. O NestJS é construído em cima do Express, o que permite uma fácil integração com outras bibliotecas e ferramentas do ecossistema Node.js. Em relação à estrutura do projeto, o NestJS utiliza uma arquitetura modular, o que permite uma fácil organização do código e uma melhor separação de responsabilidades. Além disso, o NestJS possui suporte nativo para TypeScript, o que permite uma melhor tipagem do código e uma melhor experiência de desenvolvimento.

Estrutura do projeto

A estrutura do projeto foi organizada de forma a facilitar a manutenção e a escalabilidade do código. O projeto foi dividido em módulos, onde cada módulo é responsável por uma funcionalidade específica do sistema. As rotas foram organizados da seguinte forma:

  • /usuario: Rota responsável por gerenciar os usuários do sistema.
  • /estacao-favorita: Rota responsável por gerenciar as estações favoritas dos usuários.
  • /notificacao: Rota responsável por gerenciar as notificações enviadas aos usuários.
  • /emergencia: Rota responsável por gerenciar os alertas de emergência enviadas pelos usuários.
  • /acompanhante: Rota responsável por gerenciar os regirstros de acompanhamento de acessibilidade aos usuários com necessidades especiais.

Cada rota foi construída da seguinte forma:

  • Controller: Responsável por gerenciar as requisições e respostas da rota. O controller é responsável por receber as requisições, chamar os serviços necessários e retornar as respostas para o cliente.
  • Service: Responsável por gerenciar a lógica de negócio da rota. O service é responsável por realizar as operações necessárias para atender as requisições do controller, como acessar o banco de dados, realizar validações e retornar os resultados para o controller.
  • DTO (Data Transfer Object): Responsável por gerenciar os dados que são enviados e recebidos pelas rotas. O DTO é responsável por validar os dados recebidos e formatar os dados que serão enviados para o cliente.
  • Prisma: Responsável por gerenciar o acesso ao banco de dados. O Prisma é um ORM (Object Relational Mapper) que permite uma fácil integração com o banco de dados, além de fornecer uma API para realizar operações de CRUD de forma simples e intuitiva. O Prisma também possui suporte para migrações, o que permite uma fácil atualização do banco de dados.

A rotas apresentadas tem como foco a jornada do usuário logado, pois as demais informações sobre os trens e estações são obtidas através de APIs da CPTM.

Conteinerização

O backend foi containerizado utilizando o Docker, o que permite uma fácil configuração e escalabilidade do ambiente. O Docker Compose foi utilizado para orquestrar os contêineres, facilitando a execução e o gerenciamento dos serviços necessários para o funcionamento do backend. O banco de dados utilizado é o PostgreSQL, que foi escolhido por sua robustez e confiabilidade. O Docker Compose também foi utilizado para criar um contêiner para o banco de dados, permitindo uma fácil configuração e escalabilidade do ambiente.

Como rodar

Pré-requisitos

  • Python 3.8 ou superior
  • pip
  • PostgreSQL
  • Docker
  • Docker Compose
  • Node.js
  • npm

Passo a passo

  1. Clone o repositório:
git clone https://github.com/Inteli-College/2025-1B-T08-EC10-G01.git
cd 2025-1B-T08-EC10-G01/src

  1. Execute o seguinte comando para criar o contêiner do banco de dados de do backend:
docker-compose up --build
  1. Gere o prisma Client:
docker-compose exec backend npx prisma generate
  1. Execute as migrações do banco de dados:
docker-compose exec backend npx prisma migrate dev --name init
  1. Popule o banco de dados com dados iniciais:
docker-compose exec backend npx prisma db seed
  1. Abra no seu navegador o seguinte endereço para acessar o Swagger:
http://localhost:3000/api