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
- Clone o repositório:
git clone https://github.com/Inteli-College/2025-1B-T08-EC10-G01.git
cd 2025-1B-T08-EC10-G01/src
- Execute o seguinte comando para criar o contêiner do banco de dados de do backend:
docker-compose up --build
- Gere o prisma Client:
docker-compose exec backend npx prisma generate
- Execute as migrações do banco de dados:
docker-compose exec backend npx prisma migrate dev --name init
- Popule o banco de dados com dados iniciais:
docker-compose exec backend npx prisma db seed
- Abra no seu navegador o seguinte endereço para acessar o Swagger:
http://localhost:3000/api