nicegrrrl / meus-contatos-api

Gerenciador de contatos.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Clients & Contacts

Esta API consiste em um cadastro de clientes que poderá conter muitos contatos associados.

É possível realizar operações de criação, leitura, edição e deleção de clientes e contatos.

💻

Índice


1. Tecnologias e ferramentas

voltar para o índice

  • Express
  • TypeScript
  • PostgreSQL
  • TypeORM
  • Insomnia

2. Primeiros passos

voltar para o índice

  1. Clone o repositório em sua máquina.
  2. Instale as dependências rodando o seguinte comando:
npm install
  1. Crie um arquivo .env, seguindo os exemplos de variáveis de ambiente contidas no arquivo .env.example.
  2. Gere as migrações com o seguinte comando:
npm run typeorm:generate
  1. Execute as migrações com o seguinte comando:
npm run typeorm:run
  1. Caso queira, você pode testar as rotas por meio da collection insomnia_m6_desafio_fullstack. Esse arquivo está localizado na raiz do projeto.
  2. A API está prontinha para ser consumida. 😄🚀

3. Diagrama de Relacionamento

voltar para o índice

der


4. Rotas clients e login

voltar para o índice

Método Endpoint Responsabilidade Autenticação
POST /clients Cria um cliente Não necessita token
POST /login Gera o token de autenticação Não necessita token
GET /clients Lista todos os clientes Apenas administradores
GET /clients/logged Lista dados do cliente logado Usuário logado
GET /clients/:clientId Lista um cliente por id Usuário dono do contato ou administradores
PATCH /clients/:clientId Atualiza um cliente Usuário dono do contato ou administradores
DELETE /clients/:clientId Realiza um soft delete no cliente Usuário dono do contato ou administradores

5. Regras de negócio das rotas clients e login

voltar para o índice

POST /clients

Permite a criação de um novo cliente.

Qualquer usuário pode acessar a rota.

A chave admin não é obrigatória, sendo false por padrão.

Corpo da requisição (Json)
{
  "name": "Hayley Williams",
  "email": "hayley@mail.com",
  "password": "1234",
  "phoneNumber": "850"
}
Exemplo de resposta: status 201 Created
{
  "id": 1,
  "name": "Hayley Williams",
  "email": "hayley@mail.com",
  "phoneNumber": "850",
  "admin": false,
  "registeredAt": "2024-01-24",
  "deletedAt": null
}
Corpo da requisição (Json)
{
  "name": "Taylor Swift",
  "email": "taylor@mail.com",
  "password": "1234",
  "phoneNumber": "850",
  "admin": true
}
Exemplo de resposta: status 201 Created
{
  "id": 2,
  "name": "Taylor Swift",
  "email": "taylor@mail.com",
  "phoneNumber": "850",
  "admin": true,
  "registeredAt": "2024-01-24",
  "deletedAt": null
}
Corpo da requisição (Json)
{
  "name": "James Taylor",
  "email": "taylor@mail.com",
  "password": "1234",
  "phoneNumber": "850"
}
Exemplo de resposta (email existente): status 409 Conflict
{
  "message": "Email already exists"
}
Corpo da requisição (Json)
// sem corpo
Exemplo de resposta (requisição sem corpo): status 400 Bad Request
{
  "message": {
    "name": ["Required"],
    "email": ["Required"],
    "password": ["Required"],
    "phoneNumber": ["Required"]
  }
}

POST /login

Permite que o usuário faça o login, gerando um token de autenticação.

Qualquer usuário pode acessar a rota.

Corpo da requisição (Json)
{
  "email": "hayley@mail.com",
  "password": "1234"
}
Exemplo de resposta: status 200 OK
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImhheWxleUBtYWlsLmNvbSIsImFkbWluIjpmYWxzZSwiaWF0IjoxNzA2MTE1MTE0LCJleHAiOjE3MDYyODc5MTQsInN1YiI6IjEifQ.pDssBE2cmhLqg_Q1Q5tCUkdXrv9vIhPACowMfpNVcPE"
}
Corpo da requisição (Json)
{
  "email": "taylor@mail.com",
  "password": "12"
}
Exemplo de resposta (credenciais incorretas): status 401 Unauthorized
{
  "message": "Invalid email or password"
}

GET /clients

Lista todos os clientes cadastrados na aplicação.

Apenas usuários administradores podem acessar essa rota.

Exemplo de resposta (administrador): status 200 OK
[
  {
    "id": 1,
    "name": "Hayley Williams",
    "email": "hayley@mail.com",
    "phoneNumber": "850",
    "admin": false,
    "registeredAt": "2024-01-24",
    "deletedAt": null
  },
  {
    "id": 2,
    "name": "Taylor Swift",
    "email": "taylor@mail.com",
    "phoneNumber": "850",
    "admin": true,
    "registeredAt": "2024-01-24",
    "deletedAt": null
  },
  {
    "id": 3,
    "name": "teste",
    "email": "teste@mail.com",
    "phoneNumber": "850",
    "admin": false,
    "registeredAt": "2024-01-24",
    "deletedAt": null
  }
]
Exemplo de resposta (usuário não administrador): status 403 Forbidden
{
  "message": "Insufficient permission"
}
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}

GET /clients/logged

Retorna informações do usuário logado.

Podem acessar essa rota usuários logados.

Corpo da requisição (Json)
// sem corpo
Exemplo de resposta (requisição sem corpo): status 400 Bad Request
{
  "id": 2,
  "name": "Taylor Swift",
  "email": "taylor@mail.com",
  "phoneNumber": "850",
  "admin": true,
  "registeredAt": "2024-01-24",
  "deletedAt": null,
  "contacts": [
    {
      "id": 1,
      "name": "Olivia Rodrigo",
      "email": "olivia@mail.com",
      "phoneNumber": "900",
      "registeredAt": "2024-01-24",
      "deletedAt": null
    },
    {
      "id": 4,
      "name": "Olivia Rodrigo",
      "email": "olivia@mail.com",
      "phoneNumber": "900",
      "registeredAt": "2024-01-24",
      "deletedAt": null
    }
  ]
}

GET /clients/:clientId

Lista um determinado cliente pelo seu id.

Podem acessar essa rota usuários administradores ou o cliente logado detentor do referido id.

Exemplo de resposta: status 200 OK
{
  "id": 1,
  "name": "Hayley Williams",
  "email": "hayley@mail.com",
  "phoneNumber": "850",
  "admin": false,
  "registeredAt": "2024-01-24",
  "deletedAt": null
}
Exemplo de resposta (usuário sem permissão): status 403 Forbidden
{
  "message": "Insufficient permission"
}
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}
Exemplo de resposta (cliente não encontrado): status 404 Not Found
{
  "message": "Client not found"
}

PATCH /clients/:clientId

Permite atualizar de forma parcial ou integral um determinado cliente pelo seu id.

Podem acessar essa rota usuários administradores ou o cliente logado detentor do referido id.

Corpo da requisição (Json)
{
  "name": "Usuário de teste"
}
Exemplo de resposta: status 200 OK
{
  "id": 3,
  "name": "Usuário de teste",
  "email": "teste@mail.com",
  "phoneNumber": "850",
  "admin": false,
  "registeredAt": "2024-01-24",
  "deletedAt": null
}
Exemplo de resposta (usuário sem permissão): status 403 Forbidden
{
  "message": "Insufficient permission"
}
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}
Exemplo de resposta (cliente não encontrado): status 404 Not Found
{
  "message": "Client not found"
}

DELETE /clients/:clientId

Permite realizar um soft delete de um determinado cliente pelo seu id.

Podem acessar essa rota usuários administradores ou o cliente logado detentor do referido id.

Não há corpo de requisição nem de resposta.

Exemplo de resposta: status 204 No Content
// No body returned for response
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}
Exemplo de resposta (cliente não encontrado): status 404 Not Found
{
  "message": "Client not found"
}

6. Rotas contacts

voltar para o índice

Método Endpoint Responsabilidade Autenticação
GET /contacts Lista todos os contatos Apenas administradores
POST /contacts Cria um contato Usuário logado ou administradores
GET /contacts/clients/:clientId Lista todas os contatos do usuário logado Usuário logado ou administradores
GET /contacts/:contactId Lista um contato por id Usuário dono do contato ou administradores
PATCH /contacts/:contactId Atualiza o contato do usuário logado Usuário dono do contato ou administradores
DELETE /contacts/:contactId Realiza um soft delete no contato do usuário logado Usuário logado ou administradores

7. Regras de negócio das rotas contacts

voltar para o índice

GET /contacts

Lista todos os contatos cadastrados na aplicação, de todos os clientes.

Apenas usuários administradores podem acessar essa rota.

Exemplo de resposta: status 200 OK
[
  {
    "id": 1,
    "name": "Olivia Rodrigo",
    "email": "olivia@mail.com",
    "phoneNumber": "900",
    "registeredAt": "2024-01-24",
    "deletedAt": null
  },
  {
    "id": 2,
    "name": "Zac Farro",
    "email": "zac@mail.com",
    "phoneNumber": "900123",
    "registeredAt": "2024-01-24",
    "deletedAt": null
  }
]
Exemplo de resposta (usuário não administrador): status 403 Forbidden
{
  "message": "Insufficient permission"
}
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}

POST /contacts

Permite criar um contato atrelado ao usuário logado, seja ele um cliente comum ou um administrador.

Podem acessar essa rota usuários administradores ou cliente logado.

Corpo da requisição (Json)
{
	{
	"name": "Olivia Rodrigo",
	"email": "olivia@mail.com",
	"phoneNumber": "900"
}
}
Exemplo de resposta: status 201 Created
{
  "message": "Contact created"
}
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}
Corpo da requisição (Json)
// sem corpo
Exemplo de resposta (requisição sem corpo): status 400 Bad Request
{
  "message": {
    "name": ["Required"],
    "email": ["Required"],
    "phoneNumber": ["Required"]
  }
}

GET /contacts/clients/:clientId

Lista todos os contatos criados pelo cliente logado detentor do id.

Podem acessar essa rota usuários administradores ou o cliente logado detentor do referido id.

Exemplo de resposta: status 200 OK
[
  {
    "id": 2,
    "name": "Zacccccc",
    "email": "zachw@email.com",
    "phoneNumber": "12345678",
    "registeredAt": "2024-01-24",
    "deletedAt": null
  },
  {
    "id": 3,
    "name": "Taylor York",
    "email": "tayloryork@mail.com",
    "phoneNumber": "900123",
    "registeredAt": "2024-01-24",
    "deletedAt": null
  }
]
Exemplo de resposta (usuário sem permissão): status 403 Forbidden
{
  "message": "Insufficient permission"
}
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}
Exemplo de resposta (cliente não encontrado): status 404 Not Found
{
  "message": "Client not found"
}

GET /contacts/:contactId

Lista um contato por id.

Podem acessar essa rota usuários administradores ou o cliente logado que criou o contato.

Exemplo de resposta: status 200 OK
{
  "id": 1,
  "name": "Olivia Rodrigo",
  "email": "olivia@mail.com",
  "phoneNumber": "900",
  "registeredAt": "2024-01-24",
  "deletedAt": null
}
Exemplo de resposta (contato não encontrado): status 404 Not Found
{
  "message": "Contact not found"
}
Exemplo de resposta (usuário sem permissão): status 403 Forbidden
{
  "message": "Insufficient permission"
}
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}

PATCH /contacts/:contactId

Atualiza de forma parcial ou integral o contato detentor do id que foi criado pelo usuário logado.

Podem acessar essa rota usuários administradores ou o cliente logado que criou o contato.

Corpo da requisição (Json)
{
  "name": "Zach W. Farro",
  "email": "zachw@email.com",
  "phoneNumber": "12345678"
}
Exemplo de resposta: status 200 OK
{
  "id": 2,
  "name": "Zach W. Farro",
  "email": "zachw@email.com",
  "phoneNumber": "12345678",
  "registeredAt": "2024-01-24",
  "deletedAt": null
}
Exemplo de resposta (usuário sem permissão): status 403 Forbidden
{
  "message": "Insufficient permission"
}
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}

DELETE /contacts/:contactId

Permite realizar um soft delete de um determinado contato criado pelo usuário logado.

Podem acessar essa rota usuários administradores ou o cliente logado que criou o contato.

Não há corpo de requisição nem de resposta.

Exemplo de resposta: status 204 No Content
// No body returned for response
Exemplo de resposta (usuário não logado): status 401 Unauthorized
{
  "message": "Missing bearer token"
}
Exemplo de resposta (contato não encontrado): status 404 Not Found
{
  "message": "Contact not found"
}
Exemplo de resposta (usuário sem permissão): status 403 Forbidden
{
  "message": "Insufficient permission"
}

About

Gerenciador de contatos.


Languages

Language:TypeScript 100.0%