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.
💻
- Tecnologias e ferramentas
- Primeiros passos
- Diagrama de Relacionamento
- Rotas clients e login
- Regras de negócio das rotas clients e login
- Rotas contacts
- Regras de negócio das rotas contacts
- Express
- TypeScript
- PostgreSQL
- TypeORM
- Insomnia
- Clone o repositório em sua máquina.
- Instale as dependências rodando o seguinte comando:
npm install
- Crie um arquivo .env, seguindo os exemplos de variáveis de ambiente contidas no arquivo .env.example.
- Gere as migrações com o seguinte comando:
npm run typeorm:generate
- Execute as migrações com o seguinte comando:
npm run typeorm:run
- Caso queira, você pode testar as rotas por meio da collection insomnia_m6_desafio_fullstack. Esse arquivo está localizado na raiz do projeto.
- A API está prontinha para ser consumida. 😄🚀
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 |
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.
{
"name": "Hayley Williams",
"email": "[email protected]",
"password": "1234",
"phoneNumber": "850"
}
{
"id": 1,
"name": "Hayley Williams",
"email": "[email protected]",
"phoneNumber": "850",
"admin": false,
"registeredAt": "2024-01-24",
"deletedAt": null
}
{
"name": "Taylor Swift",
"email": "[email protected]",
"password": "1234",
"phoneNumber": "850",
"admin": true
}
{
"id": 2,
"name": "Taylor Swift",
"email": "[email protected]",
"phoneNumber": "850",
"admin": true,
"registeredAt": "2024-01-24",
"deletedAt": null
}
{
"name": "James Taylor",
"email": "[email protected]",
"password": "1234",
"phoneNumber": "850"
}
{
"message": "Email already exists"
}
// sem corpo
{
"message": {
"name": ["Required"],
"email": ["Required"],
"password": ["Required"],
"phoneNumber": ["Required"]
}
}
Permite que o usuário faça o login, gerando um token de autenticação.
Qualquer usuário pode acessar a rota.
{
"email": "[email protected]",
"password": "1234"
}
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImhheWxleUBtYWlsLmNvbSIsImFkbWluIjpmYWxzZSwiaWF0IjoxNzA2MTE1MTE0LCJleHAiOjE3MDYyODc5MTQsInN1YiI6IjEifQ.pDssBE2cmhLqg_Q1Q5tCUkdXrv9vIhPACowMfpNVcPE"
}
{
"email": "[email protected]",
"password": "12"
}
{
"message": "Invalid email or password"
}
Lista todos os clientes cadastrados na aplicação.
Apenas usuários administradores podem acessar essa rota.
[
{
"id": 1,
"name": "Hayley Williams",
"email": "[email protected]",
"phoneNumber": "850",
"admin": false,
"registeredAt": "2024-01-24",
"deletedAt": null
},
{
"id": 2,
"name": "Taylor Swift",
"email": "[email protected]",
"phoneNumber": "850",
"admin": true,
"registeredAt": "2024-01-24",
"deletedAt": null
},
{
"id": 3,
"name": "teste",
"email": "[email protected]",
"phoneNumber": "850",
"admin": false,
"registeredAt": "2024-01-24",
"deletedAt": null
}
]
{
"message": "Insufficient permission"
}
{
"message": "Missing bearer token"
}
Retorna informações do usuário logado.
Podem acessar essa rota usuários logados.
// sem corpo
{
"id": 2,
"name": "Taylor Swift",
"email": "[email protected]",
"phoneNumber": "850",
"admin": true,
"registeredAt": "2024-01-24",
"deletedAt": null,
"contacts": [
{
"id": 1,
"name": "Olivia Rodrigo",
"email": "[email protected]",
"phoneNumber": "900",
"registeredAt": "2024-01-24",
"deletedAt": null
},
{
"id": 4,
"name": "Olivia Rodrigo",
"email": "[email protected]",
"phoneNumber": "900",
"registeredAt": "2024-01-24",
"deletedAt": null
}
]
}
Lista um determinado cliente pelo seu id.
Podem acessar essa rota usuários administradores ou o cliente logado detentor do referido id.
{
"id": 1,
"name": "Hayley Williams",
"email": "[email protected]",
"phoneNumber": "850",
"admin": false,
"registeredAt": "2024-01-24",
"deletedAt": null
}
{
"message": "Insufficient permission"
}
{
"message": "Missing bearer token"
}
{
"message": "Client not found"
}
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.
{
"name": "Usuário de teste"
}
{
"id": 3,
"name": "Usuário de teste",
"email": "[email protected]",
"phoneNumber": "850",
"admin": false,
"registeredAt": "2024-01-24",
"deletedAt": null
}
{
"message": "Insufficient permission"
}
{
"message": "Missing bearer token"
}
{
"message": "Client not found"
}
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.
// No body returned for response
{
"message": "Missing bearer token"
}
{
"message": "Client not found"
}
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 |
Lista todos os contatos cadastrados na aplicação, de todos os clientes.
Apenas usuários administradores podem acessar essa rota.
[
{
"id": 1,
"name": "Olivia Rodrigo",
"email": "[email protected]",
"phoneNumber": "900",
"registeredAt": "2024-01-24",
"deletedAt": null
},
{
"id": 2,
"name": "Zac Farro",
"email": "[email protected]",
"phoneNumber": "900123",
"registeredAt": "2024-01-24",
"deletedAt": null
}
]
{
"message": "Insufficient permission"
}
{
"message": "Missing bearer token"
}
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.
{
{
"name": "Olivia Rodrigo",
"email": "[email protected]",
"phoneNumber": "900"
}
}
{
"message": "Contact created"
}
{
"message": "Missing bearer token"
}
// sem corpo
{
"message": {
"name": ["Required"],
"email": ["Required"],
"phoneNumber": ["Required"]
}
}
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.
[
{
"id": 2,
"name": "Zacccccc",
"email": "[email protected]",
"phoneNumber": "12345678",
"registeredAt": "2024-01-24",
"deletedAt": null
},
{
"id": 3,
"name": "Taylor York",
"email": "[email protected]",
"phoneNumber": "900123",
"registeredAt": "2024-01-24",
"deletedAt": null
}
]
{
"message": "Insufficient permission"
}
{
"message": "Missing bearer token"
}
{
"message": "Client not found"
}
Lista um contato por id.
Podem acessar essa rota usuários administradores ou o cliente logado que criou o contato.
{
"id": 1,
"name": "Olivia Rodrigo",
"email": "[email protected]",
"phoneNumber": "900",
"registeredAt": "2024-01-24",
"deletedAt": null
}
{
"message": "Contact not found"
}
{
"message": "Insufficient permission"
}
{
"message": "Missing bearer token"
}
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.
{
"name": "Zach W. Farro",
"email": "[email protected]",
"phoneNumber": "12345678"
}
{
"id": 2,
"name": "Zach W. Farro",
"email": "[email protected]",
"phoneNumber": "12345678",
"registeredAt": "2024-01-24",
"deletedAt": null
}
{
"message": "Insufficient permission"
}
{
"message": "Missing bearer token"
}
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.
// No body returned for response
{
"message": "Missing bearer token"
}
{
"message": "Contact not found"
}
{
"message": "Insufficient permission"
}