Giter Site home page Giter Site logo

steinertruthy / api-myclients Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 71 KB

Um CRUD onde um usuário pode cadastrar, listar, atualizar e deletar seus clientes.

License: MIT License

TypeScript 100.00%
bcrypt express nodejs postgresql sql typeorm typescript api backend cors dotenv insomnia json jsonwebtoken pg yup myclients

api-myclients's Introduction

api-myClients

GitHub


api-myClients

Api desenvolvida para a aplicação myClientes


🛠️ Algumas tecnologias

Esta api foi desenvolvida com as principais tecnologias

  • Node.js
  • Express.js
  • TypeScript
  • Typeorm
  • PostgreSQL
  • Bcrypt
  • Jsonwebtoken
  • Yup

📌 Features

  • Usuário
    • Cadastro de usuários
    • Login
    • Editar informações
    • Excluir cadastro
    • Adicionar clientes
    • Listar clientes
    • Atualizar informaões de clientes
    • Excluir cliente

🚀 Executando o projeto localmente

💻 Pré-requisitos

Para rodar o projeto é necessário que você tenha instalado na sua máquina as seguintes ferramentas:

  • Git
  • Node.js
  • VSCode
  • Postgresql
  • Yarn

💿 Rodando

# Clone este repositório através do terminal
$ git clone [email protected]:steinerstt/api-myClients.git

# Acesse a pasta do projeto
$ cd api-myClients

Crie um arquivo chamado .env na raiz do projeto e copies as informações que estão no .env.example e preencha as informações de acordo com o seu ambiente

# Instale as dependências do projeto
$ yarn install

# Persistindo as migrations no banco de dados
$ yarn typeorm migration:run -d src/data-source.ts

# Rode o projeto
$ yarn dev

📋 Documentação

Na raiz do projeto existe um arquivo chamado Insomnia_my_clients.json, ele pode ser importado e usado como documentação no Insomnia

Cadastro de usuário

POST/users

body

{
  "firstName": "Diogo",
  "lastName": "Steiner",
  "email": "[email protected]",
  "password": "123456",
  "mobileNumber": "21971281708"
}

Retorno esperado - 201

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2ODAwMzg0NDEsImV4cCI6MTY4MDA2MDA0MSwic3ViIjoiZmE0NWEzN2QtOWQ3Ni00ZTY4LTgxYzgtYmNmZWMzNTMzNTA3In0.bpsz8WWDPOzq5jD2uaiEEd-uzxZT8mf89VsT8Sxla9o",
  "user": {
    "id": "fa45a37d-9d76-4e68-81c8-bcfec3533507",
    "firstName": "Diogo",
    "lastName": "Steiner",
    "email": "[email protected]",
    "mobileNumber": "21971281708",
    "clients": [],
    "updatedAt": "2023-03-28T21:20:40.893Z",
    "createdAt": "2023-03-28T21:20:40.893Z"
  }
}

firstName and lastName min(3) letras max(12) letras

email and password min (6) caracteres max (72) caracteres

mobileNumber deve ter 11 números

Pissíveis erros

400

{
  "message": "firstName is a required field | lastName is a required field | email is a required field | password is a required field | mobileNumber is a required field"
}

409

{
  "message": "Email already registered"
}
{
  "message": "Mobile number already registered"
}

Login de usuário

POST/sessions

body

{
  "email": "[email protected]",
  "password": "123456"
}

Retorno esperado - 200

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2ODAxMjY4NTksImV4cCI6MTY4MDE0ODQ1OSwic3ViIjoiNzRlMGRjNzAtZmI3OS00NTJhLTkyMDEtNmZhNjBhY2U1ZjYwIn0.Gkxo9Mu_pFLJf02S9C3qRNv_KX_dEcrUxxN54rapqn4",
  "user": {
    "id": "74e0dc70-fb79-452a-9201-6fa60ace5f60",
    "firstName": "Diogo",
    "lastName": "Steiner",
    "email": "[email protected]",
    "mobileNumber": "21332123132",
    "clients": [
      {
        "id": "2844b4b7-dd62-4421-817e-9afab29b1bb5",
        "firstName": "Diogo",
        "lastName": "Steiner",
        "email": "[email protected]",
        "mobileNumber": "21971281708",
        "updatedAt": "2023-03-29T18:27:04.827Z",
        "createdAt": "2023-03-29T18:27:04.827Z"
      },
      {
        "id": "3c076fbe-81e9-4456-a0e7-70eecb1cc474",
        "firstName": "Amanda",
        "lastName": "Souza",
        "email": "[email protected]",
        "mobileNumber": "21999999999",
        "updatedAt": "2023-03-29T18:27:21.961Z",
        "createdAt": "2023-03-29T18:27:21.961Z"
      },
      {
        "id": "35dc0d48-7992-4bf0-9d88-e59db1b724e6",
        "firstName": "Carlos",
        "lastName": "Souza",
        "email": "[email protected]",
        "mobileNumber": "21999999991",
        "updatedAt": "2023-03-29T18:27:37.202Z",
        "createdAt": "2023-03-29T18:27:37.202Z"
      },
      {
        "id": "75489941-c6a0-4863-8d31-be6d655e4200",
        "firstName": "Kell",
        "lastName": "Show",
        "email": "[email protected]",
        "mobileNumber": "21999999992",
        "updatedAt": "2023-03-29T18:28:00.790Z",
        "createdAt": "2023-03-29T18:28:00.790Z"
      }
      ],
    "updatedAt": "2023-03-29T18:26:06.152Z",
    "createdAt": "2023-03-29T18:26:06.152Z"
  }
}

Possíveis erros

400

{
  "message": "email is a required field | password is a required field"
}

401

{
  "message": "Email or password invalid"
}

Buscar sessão (auto login)

GET/sessions

Requer autenticação Bearer

{
  headers: {
    "Authorization": `Bearer ${token}`
  }
}

Retorno esperado - 200

{
  "id": "74e0dc70-fb79-452a-9201-6fa60ace5f60",
  "firstName": "Diogo",
  "lastName": "Steiner",
  "email": "[email protected]",
  "mobileNumber": "21332123132",
  "clients": [
    {
      "id": "2844b4b7-dd62-4421-817e-9afab29b1bb5",
      "firstName": "Diogo",
      "lastName": "Steiner",
      "email": "[email protected]",
      "mobileNumber": "21971281708",
      "updatedAt": "2023-03-29T18:27:04.827Z",
      "createdAt": "2023-03-29T18:27:04.827Z"
    },
    {
      "id": "3c076fbe-81e9-4456-a0e7-70eecb1cc474",
      "firstName": "Amanda",
      "lastName": "Souza",
      "email": "[email protected]",
      "mobileNumber": "21999999999",
      "updatedAt": "2023-03-29T18:27:21.961Z",
      "createdAt": "2023-03-29T18:27:21.961Z"
    },
    {
      "id": "35dc0d48-7992-4bf0-9d88-e59db1b724e6",
      "firstName": "Carlos",
      "lastName": "Souza",
      "email": "[email protected]",
      "mobileNumber": "21999999991",
      "updatedAt": "2023-03-29T18:27:37.202Z",
      "createdAt": "2023-03-29T18:27:37.202Z"
    },
    {
      "id": "75489941-c6a0-4863-8d31-be6d655e4200",
      "firstName": "Kell",
      "lastName": "Show",
      "email": "[email protected]",
      "mobileNumber": "21999999992",
      "updatedAt": "2023-03-29T18:28:00.790Z",
      "createdAt": "2023-03-29T18:28:00.790Z"
    }
  ],
  "updatedAt": "2023-03-29T18:26:06.152Z",
  "createdAt": "2023-03-29T18:26:06.152Z"
}

Possíves erros

401

{
  "message": "Missing headers authorization"
}

Atualizar dados do usuário

PATCH/users

Requer autenticação Bearer

{
  headers: {
    "Authorization": `Bearer ${token}`
  }
}

body

{
  "firstName": "Diogo Alt",
  "lastName": "Steiner Alt",
  "email": "[email protected]",
  "mobileNumber": "21900001100",
  "password": "123456"
}

firstName e lastName min(3) letras max (12) letras

password e email min (6) caracteres max (72) caracteres

mobileNumber deve ter 11 números

Pode atualizar qualquer dado, não precisa enviar todos

Retorno esperado - 200

{
  "id": "fa45a37d-9d76-4e68-81c8-bcfec3533507",
  "firstName": "Diogo Alt",
  "lastName": "Steiner Alt",
  "email": "[email protected]",
  "mobileNumber": "21900001100",
  "updatedAt": "2023-03-28T21:40:14.214Z",
  "createdAt": "2023-03-28T21:20:40.893Z"
}

Possíveis erros

401

{
  "message": "Missing headers authorization"
}

Deletar conta de usuário

DELETE/users

Requer autenticação Bearer

{
  headers: {
    "Authorization": `Bearer ${token}`
  }
}

Retorno esperado - 204

Possíveis erros

401

{
  "message": "Missing headers authorization"
}

Cadastrar cliente

POST/clients

Requer autenticação Bearer

{
  headers: {
    "Authorization": `Bearer ${token}`
  }
}

body

{
  "firstName": "Amanda",
  "lastName": "Silva",
  "email": "[email protected]",
  "mobileNumber": "97982612341"
}

firstName e lastName min(3) letras max (12) letras

email e password min (6) caracteres max (72) caracteres

mobileNumber deve ter 11 números

Retorno esperado - 201

{
  "id": "63738cf7-500b-4298-9c1f-335d27b2f3e6",
  "firstName": "Amanda",
  "lastName": "Silva",
  "email": "[email protected]",
  "mobileNumber": "97981612341",
  "updatedAt": "2023-03-28T21:56:28.025Z",
  "createdAt": "2023-03-28T21:56:28.025Z"
}

Possíves erros

400

{
  "message": "firstName is a required field | lastName is a required field | email is a required field | mobileNumber is a required field"
}

401

{
  "message": "Missing headers authorization"
}

409

{
  "message": "Email already registered"
}
{
	"message": "Mobile number already registered"
}

Atualizar dados do cliente

PATCH/clients/{clientId}

Requer autenticação Bearer

{
  headers: {
    "Authorization": `Bearer ${token}`
  }
}

body

{
  "firstName": "Amanda Alt",
  "lastName": "Silva Alt",
  "email": "[email protected]",
  "mobileNumber": "97981612311"
}

firstName e lastName min(3) letras max (12) letras

email min (6) caracteres max (72) caracteres

mobileNumber deve ter 11 números

Pode atualizar qualquer dado, não precisa enviar todos

Retorno esperado - 200

{
  "id": "715c11cc-22ea-41ca-94c9-7153d678495f",
  "firstName": "Amanda Alt",
  "lastName": "Silva Alt",
  "email": "[email protected]",
  "mobileNumber": "97981612311",
  "updatedAt": "2023-03-28T22:43:54.078Z",
  "createdAt": "2023-03-28T21:57:39.411Z"
}

firstName and lastName min(3) letters max (12) letters

email and password min (6) chars max (72) chars

mobileNumber length 11 numbers

Possíveis erros

401

{
  "message": "Missing headers authorization"
}

404

{
  "message": "Client not found"
}

Excluir clinte

DELETE/clients/{clientId}

Requer autenticação Bearer

{
  headers: {
    "Authorization": `Bearer ${token}`
  }
}

Retorno esperado - 204

Possíveis erros

401

{
  "message": "Missing headers authorization"
}

404

{
  "message": "Client not found"
}

📄 Licença

Este projeto está sob a licença do MIT - veja o arquivo LICENSE para detalhes.

Feito com ❤ por Steiner

api-myclients's People

Contributors

steinertruthy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.