Gabrielja2 / back-end-my-calendary

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Sejam bem vindos ao repositório backend do projeto my-calendary!

Este projeto foi completamente desenvolvido em TypeScript, utilizando Node.js, Express.js, Prisma, Postgresql e outras bibliotecas auxiliares como, jsonwebtoken, bcrypt, jest, entre algumas outras. 🚀

Foi totalmente desenvolvido seguindo os pilares da programação orientada a objeto (POO), e seguindo alguns padrões de projeto e arquitetura, como separaçção dos casos de uso em use-cases, para o nosso domínio da aplicação foi criadas as entidade no formato de object-value, também separei as camadas em layers e main. A camada Layer está toda a parte das entidades, as controladoras na camada presentation, tudo que for biblioteca externa está na camada external, assim como os repositórios, qualquer import feito de módulos external são feitos na camada external. A camada main está todas as nossas factories para atender a camada layer, além de conter todas as rotas e configurações rest.

Orientações

Antes de começar a desenvolver

👀 Leia essa parte atentamente, pois aqui você encontrará informações importantes para rodar corretamente o projeto.

🔰 Instruções
  1. Clone o repositório
  • git clone https://github.com/Gabrielja2/back-end-my-calendary.git
  1. Entre na pasta do repositório que você acabou de clonar:
  • cd pasta-do-repositório
  1. Instale as dependências
  • npm install
  1. Configure as variáveis de ambiente, é Obrigatório para funcionar corretamente:
  • Crie um arquivo .env na raiz do projeto e preencha com as variáveis de ambiente, como as exemplo do arquivo env.ts, lembre que é obrigatório algumas dessas váriaveis para conseguir rodar o servidor como PORT, eu utilizei a porta3333 mas pode ser qualquer uma que não esteja sendo usada na sua máquina, e DATABASE_URL, eu utilize um banco postgress que criei na vercel: postgres://default:4Mv6qsblwaJL@ep-twilight-morning-a4zygmwo.us-east-1.postgres.vercel-storage.com:5432/verceldb
  1. Dentro do diretório back-end-my-calendary, abra um terminal e inicie rode o projeto:
  • npm run dev

Rotas

Autenticação

São as rotas para logar ou registrar um novo usuário

Rota de Login
  • Método: POST
  • URL: API_BASE_URL/users/login
  • Descrição: Realiza o login de um usuário cadastrado.
  • Parâmetros de entrada:
    • email: String (obrigatório) - E-mail do usuário.
    • password: String (obrigatório) - Senha do usuário.
  • Resposta de sucesso:
    • Código: 200
    • Corpo: Objeto contendo o token de autenticação do usuário.

Rota de Registro
  • Método: POST
  • URL: API_BASE_URL/users
  • Descrição: Registra um novo usuário.
  • Parâmetros de entrada:
    • username: String (obrigatório) - Nome do usuário.
    • email: String (obrigatório) - E-mail do usuário.
    • password: String (obrigatório) - Senha do usuário.
    • confirmPassword: String (obrigatório) - Senha do usuário.
  • Resposta de sucesso:
    • Código: 201
    • Corpo: String com o email do usuário criado.


⚠️ Rotas Protegidas por Autenticação

User

As rotas a seguir exigem autenticação utilizando o token gerado no processo de login ou registro.

Rota listar usuários
  • Método: GET
  • URL: API_BASE_URL/users
  • Descrição: Retorna as informações dos usuários. Requer autenticação.
  • Resposta de sucesso:
    • Código: 200
    • Corpo: Objeto contendo as informações dos usuários.

Rota de atualização do usuário
  • Método: PATCH

  • URL: API_BASE_URL/users/id/:id

  • Descrição: Atualiza as informações do usuário autenticado. Requer autenticação.

  • Parâmetros de entrada:

    • username: String (opcional) - Novo nome do usuário.
    • email: String (opcional) - Novo e-mail do usuário.
    • password: String (obrigatório) - Senha do usuário.
    • confirmPassword: String (obrigatório) - Senha do usuário.
  • Resposta de sucesso:

    • Código: 200
    • Corpo: String com o email do usuário atualizado.

Rota de exclusão do usuário
  • Método: DELETE
  • URL: API_BASE_URL/users/id/:id
  • Descrição: Exclui um usuário. Requer autenticação.
  • Resposta de sucesso:
    • Código: 200
    • Corpo: String com o id do usuário excluído.

Rotas de Schedules

Rota de registro de evento
  • Método: POST
  • URL: API_BASE_URL/schedules
  • Descrição: Registra um novo evento. Requer autenticação.
  • Parâmetros de entrada:
    • title: String (obrigatório) - Sabor do suco.
    • start: String (obrigatório) - Descrição do suco.
    • end: Number (obrigatório) - Preço do suco.
  • Resposta de sucesso:
    • Código: 201
    • Corpo: String com o id do evento criado.

Rota de listagem de eventos
  • Método: GET
  • URL: API_BASE_URL/schedules
  • Descrição: Retorna a lista de eventos cadastrados. Requer autenticação.
  • Resposta de sucesso:
    • Código: 200
    • Corpo: Array contendo os objetos dos eventos cadastrados.

Rota de listar eventos de um usuário
  • Método: GET
  • URL: API_BASE_URL/schedules/user
  • Descrição: Retorna a lista de eventos cadastrados para determinado ususário. Requer autenticação.
  • Parâmetros de entrada:
    • id: String (obrigatório) - ID do suco.
  • Resposta de sucesso:
    • Código: 200
    • Corpo: Array contendo os objetos dos eventos cadastrados pelo usuário.

Rota de atualização de evento
  • Método: PATCH
  • URL: API_BASE_URL/schedules/id/:id
  • Descrição: Atualiza as informações de um evento específico pelo seu ID. Requer autenticação.
  • Parâmetros de entrada:
    • id: String (obrigatório) - ID do evento.
    • title: String (opcional) - Novo titulo do evento.
    • start: String (opcional) - Nova data e hora inicial.
    • end: Number (opcional) - Nova data e hora final.
  • Resposta de sucesso:
    • Código: 200
    • Corpo: String com o id do evento atualizado.

Rota de Exclusão de evento
  • Método: DELETE
  • URL: API_BASE_URL/schedules/id/:id
  • Descrição: Exclui um evento específico pelo seu ID. Requer autenticação.
  • Parâmetros de entrada:
    • id: String (obrigatório) - ID do evento.
  • Resposta de sucesso:
    • Código: 200
    • Corpo: String contendo uma mensagem de confirmação da exclusão.

About


Languages

Language:TypeScript 99.4%Language:JavaScript 0.6%