Skip to content

A Restful API made with Express and TypeORM for Contact Simplifier project

Notifications You must be signed in to change notification settings

Igorttdp/Contact-Simplifier-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Contact Simplifier API

Esta é a documentação da API Contact Simplifier, que permite aos usuários gerenciar contatos.

Como Rodar o APP


No terminal, digite:
git clone git@github.com:Igorttdp/Contact-Simplifier-API.git
cd Contact-Simplifier-API

Instale as dependências

npm install

ou

yarn install

Configure o arquivo .env com suas credenciais:

PGHOST=localhost
PGPORT=5432
PGUSER=seuUsuário
PGPASSWORD=suaSenha
PGDATABASE=suaDatabase
SECRET_KEY=suaSecretKey

Rode as migrações:

npx typeorm migration:run -d src/data-source.ts

ou

yarn typeorm migration:run -d src/data-source.ts

Inicialize a aplicação:

npm run dev

ou

yarn dev

Se tudo ocorrer bem você verá algo assim no seu terminal:

$ yarn dev
yarn run v1.22.19
$ ts-node-dev --ignore-watch node_modules src/server.ts
[INFO] 05:04:13 ts-node-dev ver. 2.0.0 (using ts-node ver. 10.9.1, typescript ver. 5.0.2)
query: SELECT * FROM current_schema()
query: CREATE EXTENSION IF NOT EXISTS "uuid-ossp"
query: SELECT version();
Server running on port 3000

Autenticação

Todos os endpoints da API, com exceção do endpoint /users que é utilizado para criar novos usuários, requerem autenticação através do token JWT.

Para obter o token JWT, envie uma requisição POST para /auth com as credenciais de um usuário existente.

Exemplo de requisição:

POST /login HTTP/1.1
Content-Type: application/json

{
  "email": "exemplo@exemplo.com",
  "password": "senha123"
}

Exemplo de resposta:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}

Inclua o token JWT retornado na resposta em todas as requisições subsequentes no header Authorization, como no exemplo abaixo:

Authorization: {
    "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}

Endpoints

A API possui os seguintes endpoints:



POST /users

Este endpoint cria um novo usuário.

Parâmetros da requisição:

  • name
  • email
  • password
  • confirmPassword
  • phone

Retorno

  • status 201 - Usuário criado com sucesso
  • status 400 - Erro de validação nos dados de entrada
  • status 500 - Erro interno do servidor

Exemplo de requisição:

POST /users HTTP/1.1
Content-Type: application/json

{
  "name": "Exemplo",
  "email": "exemplo@exemplo.com",
  "password": "senha123"
  "confirmPassword": "senha123"
  "phone": "11222223333"
}

Exemplo de resposta:

{
  "id": "8ae4fa1d-eb7c-44c5-8e8e-a749140e76ef",
  "name": "Exemplo",
  "email": "exemplo@exemplo.com",
  "phone": 11222223333,
  "created_at": "2022-03-29T20:40:00.000Z",
  "updated_at": "2022-03-29T20:40:00.000Z"
}



POST /login

Parâmetros da requisição:

  • email
  • password

Retorno

  • status 200 - Login feito com sucesso
  • status 400 - Erro de validação nos dados de entrada
  • status 500 - Erro interno do servidor

Exemplo de requisição:

POST /login HTTP/1.1
Content-Type: application/json

{
  "email": "exemplo@exemplo.com",
  "password": "senha123"
}

Exemplo de resposta:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}



GET /profile

Endpoint para obter informações do perfil do usuário autenticado. Requer um token de autenticação válido para acessar.

Parâmetros

Nenhum.

Retorno

  • status 200 - Requisição feita com sucesso
  • status 401 - Retorna um erro de autenticação se o token fornecido não for válido.
  • status 500 - Erro interno do servidor

Exemplo de resposta:

{
  "id": "8ae4fa1d-eb7c-44c5-8e8e-a749140e76ef",
  "name": "Exemplo",
  "email": "exemplo@exemplo.com",
  "phone": 11222223333,
  "created_at": "2022-03-29T20:40:00.000Z",
  "updated_at": "2022-03-29T20:40:00.000Z"
}

PATCH /profile

Endpoint para atualizar as informações do perfil do usuário autenticado. Requer um token de autenticação válido para acessar.

Parâmetros da requisição:

  • name
  • email
  • password
  • phone

Retorno

  • status 200 - Atualização feita com sucesso
  • status 400 - Erro de validação nos dados de entrada
  • status 401 - Erro de autenticação se o token fornecido não for válido.
  • status 500 - Erro interno do servidor

Exemplo de resposta:

{
  "id": "8ae4fa1d-eb7c-44c5-8e8e-a749140e76ef",
  "name": "Atualizado",
  "email": "atualizado@exemplo.com",
  "phone": "99888887777",
  "created_at": "2022-03-29T20:40:00.000Z",
  "updated_at": "2022-03-29T22:00:00.000Z"
}



DELETE /profile

Endpoint para excluir a conta do usuário autenticado. Requer um token de autenticação válido para acessar.

Parâmetros
Nenhum.

Retorno

  • status 204 - Retorna uma resposta vazia se a conta foi excluída com sucesso.
  • status 401 - Erro de autenticação se o token fornecido não for válido.
  • status 500 - Erro interno do servidor

Exemplo de resposta:

DELETE /profile HTTP/1.1 204 No Content



POST /contacts

Cria um novo contato para o usuário autenticado.

Parâmetros da requisição:

  • name
  • email
  • secundary_email
  • phone

Retorno

  • status 200 - Atualização feita com sucesso
  • status 400 - Erro de validação nos dados de entrada
  • status 401 - Erro de autenticação se o token fornecido não for válido.
  • status 500 - Erro interno do servidor

Exemplo de resposta:

POST /contacts HTTP/1.1
Content-Type: application/json

{
  "name": "Fulano de Tal",
  "email": "fulano@example.com",
  "secundary_email": "fulano@example.com"
  "phone": "11999999999",
  "user_id": "8ae4fa1d-eb7c-44c5-8e8e-a749140e76ef",
  "created_at": "2022-04-01T13:45:30.000Z",
  "updated_at": "2022-04-01T13:45:30.000Z"
}



GET /contacts

Retorna uma lista de contatos do usuário autenticado.

Parâmetros
Nenhum.

Retorno

  • status 200 - Listagem feita com sucesso
  • status 401 - Erro de autenticação se o token fornecido não for válido.
  • status 500 - Erro interno do servidor

Exemplo de respota:

[
	{
		"id": "65d243f3-502b-4c75-be35-3bd058dd96d6",
		"name": "John Doe",
		"email": "johndoe@gmail.com",
		"secundary_email": "doejohn@mail.com",
		"phone": "82999990001",
		"created_at": "2023-03-27T05:23:47.275Z",
		"updated_at": "2023-03-27T05:49:29.864Z"
	}
    	{
		"id": "5efa380b-0c79-4d83-963b-832913efaab8",
		"name": "Robert Lennon",
		"email": "robertlennon@gmail.com",
		"secundary_email": "lennonrobert@mail.com",
		"phone": "32987650121",
		"created_at": "2023-03-27T15:00:00.275Z",
		"updated_at": "2023-03-27T16:00:00.864Z"
	}
    ...
]



PATCH /contacts/:contactId

Atualiza um contato existente de um usuário autenticado.

Parâmetros de URL:

  • `contactId` (string): ID do contato a ser atualizado.

Parâmetros de requisição:

  • name
  • email
  • secundary_email
  • phone

Corpo da requisição:

{
  "name": "Novo nome do contato",
  "phone": "(11) 91234-5678"
}

Exemplo de resposta:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": "b3d4a0be-fb16-482f-a41f-22ad29de1110",
  "name": "Novo nome do contato",
  "phone": "11912345678",
  "createdAt": "2022-04-01T18:30:00.000Z",
  "updatedAt": "2022-04-01T18:35:00.000Z"
}



DELETE /contacts/:contactId

Deleta um contato existente de um usuário autenticado.

Parâmetros de URL:

  • `contactId` (string): ID do contato a ser deletado.

Retorno

  • status 204 - Deleção feita com sucesso
  • status 404 - O contato com o ID especificado não foi encontrado.
  • status 401 - Não há um token válido de autenticação ou o usuário autenticado não tem permissão para deletar o contato.
  • status 500 - Erro interno do servidor

Exemplo de resposta:

HTTP/1.1 204 No Content