A aplicação pode sofrer um cold start na primeira requisição devido à inatividade. Pode levar até 50 segundos para responder à primeira requisição, pois o back-end está hospedado no plano gratuito do Render.
Neste repositório, documentarei os aspectos importantes do back-end para o desafio técnico da vaga de Desenvolvedor Júnior na Clarke Energia. Para acessar a documentação do front-end, acesse o repositório clicando aqui.
O principal objetivo deste projeto é permitir que os usuários informem seu consumo de energia sendo um número maior que 0, e com base nesse dado, encontrem os melhores fornecedores que mais se adequam às suas necessidades. O projeto conta com duas tabelas no banco de dados: uma para usuários e outra para fornecedores. Essas tabelas possuem os seguintes atributos:
model suppliers {
id String @id @default(uuid())
name String
logo String
state String
costPerKwh Float
minKwhLimit Float
totalClients Int
averageRating Float
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model users {
id String @id @default(uuid())
name String?
surname String?
birthDate DateTime?
email String @unique
password String?
googleId String? @unique
createdAt DateTime @default(now())
}No próximo tópico da documentação, irei detalhar as rotas e os métodos HTTP disponíveis para interação com a API, bem como suas respectivas regras de negócio.
- Endpoint:
/- Método:
GET- Descrição: Retorna uma mensagem de boas vindas, indicando que a API está funcionando corretamente.
- Método:
- Endpoint:
/auth/login- Método:
POST- Descrição: Na autenticação manual, realiza a autenticação de um usuário com base no e-mail e senha fornecidos na requisição.
- Método:
- Endpoint:
/auth/google- Método:
GET- Descrição: Inicia o processo de autenticação utilizando a estratégia de autenticação do Google. O usuário será redirecionado para o Google para realizar o login.
- Método:
- Endpoint:
/auth/google/callback- Método:
GET- Descrição: Recebe a resposta do Google após o login e gera um token JWT para o usuário. O token gerado é então enviado como parte da URL de redirecionamento para a aplicação cliente.
- Método:
- Endpoint:
/users- Método:
POST- Descrição: Cria um novo usuário, a requisição exige que sejam enviados os dados necessários para criação do usuário, onde não pode existir um usuário já cadastrado pelo email, a data de nascimento deve ser menor que tal dia e a senha deve possuir mais de 5 caracteres.
- Método:
- Endpoint:
/users- Método:
GET- Descrição: Retorna uma lista de todos os usuários registrados no sistema.
- Método:
- Endpoint:
/users/:email- Método:
GET- Descrição: Retorna os dados de um usuário específico, identificado pelo e-mail fornecido na URL.
- Método:
- Endpoint:
/users/:id- Método:
GET- Descrição: Retorna os dados de um usuário específico, identificado pelo e-mail fornecido na URL.
- Método:
- Endpoint:
/users/:id- Método:
DELETE- Descrição: Remove um usuário do sistema com base no ID fornecido na URL.
- Método:
- Endpoint:
/suppliers- Método:
POST- Descrição: A requisição para criar um novo fornecedor exige que sejam enviados os dados necessários para a criação, com as seguintes validações: o nome do fornecedor não pode ser duplicado; o estado deve ser uma sigla válida de um estado brasileiro; a média de avaliação deve estar entre 1 e 5; o custo por KWh não pode ser inferior a 1; o limite mínimo de KWh não pode ser menor que 1; e o total de clientes não pode ser negativo. Caso algum desses critérios não seja atendido, será retornado um erro com a mensagem correspondente. Se todas as regras forem seguidas corretamente, o fornecedor será criado com sucesso.
- Método:
- Endpoint:
/suppliers- Método:
GET- Descrição: Retorna os dados dos fornecedores, filtrados com base no consumo informado. Filtra de acordo com o limite mínimo de energia de cada fornecedor.
- Query:
/suppliers?name=Fornecedor%20X&state=SP&averageRating=4.5&costPerKwh=0.45&minKwhLimit=300&totalClients=1500para filtrar os dados, os respectivos valores devem ser informados com o tipo correto.
- Método:
- Endpoint:
/suppliers/by-consumption- Método:
GET- Descrição: Retorna os dados dos fornecedores, filtrados com base no consumo informado, onde filtra de acordo com o limite minimo de energia de cada fornecedor. A requisição exige que seja passado o parâmetro de consumption na query string. O valor de consumption deve ser maior que 0.
- Query:
consumptionnúmero de consumo de energia médio, informado pelo usuário.
- Método:
- Endpoint:
/suppliers/:id- Método:
GET- Descrição: Retorna os dados de um fornecedor específico, identificado pelo id fornecido na URL.
- Método:
- Endpoint:
/suppliers/:id- Método:
DELETE- Descrição: Remove um fornecedor do sistema com base no ID fornecido na URL.
- Método:
- Endpoint:
/suppliers/:id- Método:
PUT- Descrição: Atualiza os dados de um fornecedor existente com base no ID fornecido na URL. A requisição exige que sejam enviados os dados necessários para a atualização, sendo eles: nome, logo, estado, custo por KWh, limite mínimo de KWh, total de clientes e média de avaliação. Onde as regras de negócios são as mesma que para o cadastro.
- Método:
Para a criação desta API REST, foram utilizadas as seguintes tecnologias:
- TypeScript: Linguagem para o desenvolvimento do back-end.
- NestJS: Framework para construção de aplicações Node.js baseado em TypeScript.
- PostgreSQL: Banco de dados relacional.
- Prisma: ORM que facilita a interação com o banco de dados PostgreSQL.
- bcrypt: Biblioteca de criptografia para hashing de senhas armazenando no banco de dados de maneira criptografada.
- JWT (JSON Web Tokens) do NestJS: Tecnologia utilizada para autenticação e autorização, permitindo a criação de tokens.
- passport-google-oauth20: Autenticação que integra o Google OAuth 2.0, permitindo login com contas do Google.
# Clone o repositório.
$ git clone https://github.com/Arthur-SD15/ClarkeEnergia-API.git
# Instala todas as dependências.
$ npm install
# Executa.
$ npm start