SoftClient Logo

Plataforma para atendimento a outras empresas que necessitam de atendimento técnico. É possível que os usuarios de empresas parceiras registrem solicitações para atendimento de seus equipamentos, tais como: computador, impressora, nobreak e notebook. E os técnicos poderão posicionar para atendimento e ir até o local para fazer a manutenção do mesmo.

Rodando a aplicação:

Após clonar do Git, digite no terminal:

  • python -m venv venv
  • source venv/bin/activate
  • pip install -r requirements.txt
  • flask run

Para criar um usuário do tipo “super”, digite o seguinte comando no terminal:

heroku run --app softclient flask super create name username password

Exemplo:

heroku run --app softclient flask super create kelvin kallissin 123456

Para ativar a empresa que irá cadastrar, digite o seguinte comando no terminal:

heroku run --app softclient flask super active cnpj

Exemplo:

heroku run --app softclient flask super active 20232212232343

Deploy da aplicação:

https://softclient.herokuapp.com/api

Endpoints

  1. Owners
  2. Company
    • Login Company
  3. User
    • Login User
  4. Orders
  5. Technicians

Owners

Endpoint referente aos donos da empresa, onde podemos fazer fazer login e listar todos os donos.

Login Owner

Rota responsável pelo login do usuário “owner”. Retorna um token de acesso, para que o método GET seja liberado.

url method status
/owner/login POST 200 - 404

BODY

{
  "username": "odaairlopes",
  "password": "123456"
}

RESPONSE

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTYzOTU5MTA2MywianRpIjoiNTU3MTczNDktOGRkZS00ZmM5LWI1NzktYzE3OGQ5NTI4ZTE1IiwidHlwZSI6ImFjY2VzcyIsInN1YiI6eyJpZCI6MSwibmFtZSI6Ik9kYWlyIiwidXNlcm5hbWUiOiJvZGFhaXJsb3BlcyIsInJvbGUiOiJzdXBlciIsImFjdGl2ZSI6dHJ1ZX0sIm5iZiI6MTYzOTU5MTA2MywiZXhwIjoxNjM5NTkxOTYzfQ.q7nCO3NVPcSOdIZalcQNKOLtVw7u-JdbeJAoUqa5dcQ"
}

GET Owner

Rota responsável por mostrar todos os usuários “owner” cadastrados.

url method status
/owner GET 200

RESPONSE

[
  {
    "id": 1,
    "name": "Odair",
    "username": "odaairlopes",
    "role": "super",
    "active": true
  }
]

Company

Endpoint referente à própria empresa. Aqui, podemos fazer o login, criação de novas empresas, obtenção de todas empresas cadastradas, obtenção de apenas uma empresa (pelo id), obtenção de todos os usuários de determinada empresa e remoção de uma empresa cadastrada. Para a empresa cadastrar uma empresa, é necessário de um super usuário.

Login Company

Rota responsável pelo login da empresa. Retorna um token de acesso para que os outros métodos sejam liberados. Essa empresa precisa estar ativada (ativação feita pelo super usuário).

url method status
/company/login POST 200 - 404

BODY

{
  "username": "sofclient",
  "password": "softclient1234"
}

RESPONSE

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTYzOTU5MTg1NywianRpIjoiZmJkNWYzMDEtZjJlMS00MDhkLWE5YjUtNzg3M2U4YmFiZjE4IiwidHlwZSI6ImFjY2VzcyIsInN1YiI6eyJpZCI6MSwiYWN0aXZlIjpmYWxzZSwiY25waiI6IjIwMjMyMjEyMjMyMzQyIiwidHJhZGluZ19uYW1lIjoiU29mdCBDbGllbnQgSW5jLiIsImNvbXBhbnlfbmFtZSI6IlNvZnRjbGllbnQiLCJ1c2VybmFtZSI6InNvZmNsaWVudCIsInJvbGUiOiJhZG1pbiJ9LCJuYmYiOjE2Mzk1OTE4NTcsImV4cCI6MTYzOTU5Mjc1N30.TyrNl7sgcVeeI4RjJehpUU_Ln-zD2BLD3M7tAuXCPP4"
}

POST Company

Rota para cadastrar uma empresa.

url method status
/company POST 201 - 400

Formato dos campos:

  • “cnpj”: deve ser colocado todos os 14 dígitos, sem pontuação;

BODY

{
  "cnpj": "20232212232342",
  "trading_name": "Soft Client Inc.",
  "company_name": "SoftClient",
  "username": "sofclient",
  "password": "softclient1234"
}

RESPONSE

{
  "id": 1,
  "active": false,
  "cnpj": "20.232.212/2323-42",
  "trading_name": "Soft Client Inc.",
  "company_name": "Softclient"
}

GET Company

Rota para obter todas as empresas cadastradas.

url method status
/company GET 201

RESPONSE

[
  {
    "id": 1,
    "cnpj": "20.232.212/2323-42",
    "trading_name": "Soft Client Inc.",
    "company_name": "Softclient",
    "users": []
  },
  {
    "id": 2,
    "cnpj": "10.123.286/0001-56",
    "trading_name": "Wal-Mart Inc.",
    "company_name": "Walmart",
    "users": []
  },
  {
    "id": 3,
    "cnpj": "08.522.687/0001-37",
    "trading_name": "Microsoft Inc.",
    "company_name": "Microsoft",
    "users": []
  }
]

GET One Company

Rota que pega uma única empresa, pelo seu id.

url method status
company/company_id GET 200 - 404

RESPONSE

{
  "id": 1,
  "cnpj": "20.232.212/2323-42",
  "trading_name": "Soft Client Inc.",
  "company_name": "Softclient",
  "users": []
}

GET Company Users

Rota que pega os usuários cadastrados referentes à empresa.

url method status
/company/company_id/users GET 200 - 400

1 – Caso não haja nenhum usuário cadastrado

RESPONSE

[]

2 – Caso tenha algum usuário cadastrado

RESPONSE

[
  {
    "id": 1,
    "name": "Marcelo",
    "email": "[email protected]",
    "birthdate": "Fri, 22 Nov 1996 00:00:00 GMT",
    "active": true,
    "role": "tech"
  }
]

PATCH Company

Rota responsável pela atualização de uma empresa.

url method status
/company/company_id PATCH 200 - 400

BODY

{
  "trading_name": "Soft Client Enterprise"
}

RESPONSE

{
  "id": 1,
  "cnpj": "20.232.212/2323-42",
  "trading_name": "Soft Client Enterprise",
  "company_name": "Softclient"
}

PATCH Company active

Rota responsável por desativar uma empresa.

url method status
/company/company_id PATCH 200 - 400

BODY

{
  "active": False
}

RESPONSE – status

{
  "id": 1,
  "cnpj": "20.232.212/2323-42",
  "trading_name": "Soft Client Enterprise",
  "company_name": "Softclient",
  "active": false
}

User

Endpoint referente aos usuários que fazem parte da empresa. Aqui podemos fazer a criação de usuário, alteração de usuários, obtenção de todos os usuários, obtenção de usuário por filtragem (email e nome), remoção de um usuário, pesquisa de usuários que solicitaram um serviço e pesquisa de um usuário de certa empresa.

Login User

Rota responsável pelo login do usuário. Retorna um token de acesso para que os outros métodos sejam liberados.

BODY

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

RESPONSE

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTYzOTU5MzI0NywianRpIjoiYzUwMThhNmEtYWI2Mi00NWI2LTkyM2UtNTA5MzZlNWU0NTBjIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6eyJpZCI6MSwibmFtZSI6IktlbHZpbiIsImVtYWlsIjoia2VsdmluQGdtYWlsLmNvbSIsInBvc2l0aW9uIjoiQ1RPIiwiYWN0aXZlIjp0cnVlLCJiaXJ0aGRhdGUiOiIyMi8wNS8xOTkzIiwicm9sZSI6ImFkbWluIiwiY29tcGFueV9uYW1lIjoiU29mdGNsaWVudCJ9LCJuYmYiOjE2Mzk1OTMyNDcsImV4cCI6MTYzOTU5NDE0N30.UpfscEuF4p-BpO1NJtJb4RkKII-GvDxA-pfJyu4OjC4"
}

POST User

Rota referente a criação de um usuário. Necessário utilizar o token da empresa, para fazer a criação do seu usuário.

url method status
/user POST 201 - 400 - 409

Formato dos campos:

  • “name”: string com 150 caracteres;
  • “email”: string;
  • “password”: string;
  • “birthdate”: data no formato XX/XX/XXXX;
  • “position”: cargo na empresa, string;
  • “role”: permissões que são concedidas ao usuário (user/tech);

BODY

{
  "name": "Kelvin",
  "email": "[email protected]",
  "password": "kelvin1234",
  "birthdate": "22/05/1993",
  "position": "CTO",
  "role": "admin",
  "company_id": 1
}

RESPONSE

{
  "id": 1,
  "name": "Kelvin",
  "email": "[email protected]",
  "position": "CTO",
  "birthdate": "22/05/1993",
  "active": true,
  "role": "admin",
  "company_name": "Softclient"
}

GET Users

Rota para obter todos os usuários cadastrados.

url method status
/user GET 200

RESPONSE

[
  {
    "id": 1,
    "name": "Kelvin",
    "email": "[email protected]",
    "position": "CTO",
    "active": true,
    "birthdate": "22/05/1993",
    "role": "admin",
    "company": {
      "id": 1,
      "trading_name": "Soft Client Inc.",
      "cnpj": "20232212232342"
    }
  }
]

GET One user by id

Rota referente a pesquisa de um usuário, passando o id dele.

url method status
/user/user_id GET 200 - 404

RESPONSE

{
  "id": 1,
  "name": "Kelvin",
  "email": "[email protected]",
  "position": "CTO",
  "active": true,
  "birthdate": "22/05/1993",
  "role": "admin",
  "company": {
    "id": 1,
    "trading_name": "Soft Client Inc.",
    "cnpj": "20232212232342"
  }
}

GET One user by name

Rota referente a pesquisa de um usuário, passando o nome dele.

url method status
/user/user_name GET 200 - 404

RESPONSE

{
  "id": 1,
  "name": "Kelvin",
  "email": "[email protected]",
  "position": "CTO",
  "active": true,
  "birthdate": "22/05/1993",
  "role": "admin",
  "company": {
    "id": 1,
    "trading_name": "Soft Client Inc.",
    "cnpj": "20232212232342"
  }
}

GET Company by user id

Rota responsável pela pesquisa de uma empresa utilizando o id do usuário.

url method status
/user/user_id/company GET 200 - 404

RESPONSE

{
  "company": {
    "id": 1,
    "cnpj": "20232212232342",
    "trading_name": "Soft Client Inc.",
    "company_name": "Softclient"
  }
}

GET Order by user id

Rota responsável pela pesquisa de um chamado utilizando o id do usuário. Para essa pesquisa, é necessário passar o token do usuário com a role ‘user’.

url method status
/user/user_id/order GET 200 - 404

RESPONSE

[
  {
    "id": 1,
    "type": "computador",
    "status": "fechado",
    "description": "O computador apresenta falhas contínuas",
    "release_date": "Wed, 15 Dec 2021 18:45:47 GMT",
    "update_date": "Wed, 15 Dec 2021 19:02:15 GMT",
    "solution": "Troca de algumas peças do computador, que estavam falhando. Todas elas foram verificadas."
  }
]

PATCH User

Rota referente a atualização de um usuário, passando o id desse usuário.

url method status
/user/user_id PATCH 200 - 404

BODY

{
  "name": "Kelvin Alisson"
}

RESPONSE

{
  "id": 1,
  "name": "Kelvin",
  "email": "[email protected]",
  "position": "CTO",
  "active": true,
  "birthdate": "22/05/1993",
  "role": "admin",
  "company_name": "Softclient"
}

Order

Endpoint referente a criação de um chamado, alteração de usuários, obtenção de todos os chamados, remoção de um chamado, pesquisa do usuário que fez um chamado e pesquisa de um técnico de pelo chamado. O chamado só pode ser criado por um usuário que tenha a role de ‘user’, sendo necessário o token desse usuário.

POST Order

Rota referente à criação de um chamado.

url method status
/orders POST 200

BODY

{
  "type": "nobreak",
  "description": "No break apitando todo momento",
  "release_date": "22/10/2021",
  "update_date": "16/12/2021",
  "user_id": 1
}

RESPONSE

{
  "id": 1,
  "type": "nobreak",
  "status": "aberto",
  "description": "No break apitando todo momento",
  "release_date": "Thu, 16 Dec 2021 17:05:31 GMT",
  "update_date": "Thu, 16 Dec 2021 17:05:31 GMT",
  "solution": "",
  "user": {
    "id": 1,
    "name": "Kelvin",
    "email": "[email protected]",
    "position": "CTO",
    "role": "admin"
  },
  "technician": null
}

GET Order

Rota responsável por obter todos os chamados.

url method status
/orders GET 200

RESPONSE

[
  {
    "id": 1,
    "type": "nobreak",
    "status": "aberto",
    "description": "No break apitando todo momento",
    "release_date": "Thu, 16 Dec 2021 17:05:31 GMT",
    "update_date": "Thu, 16 Dec 2021 17:05:31 GMT",
    "solution": "",
    "user": {
      "id": 1,
      "name": "Kelvin",
      "email": "[email protected]",
      "position": "CTO",
      "role": "admin"
    },
    "technician": null
  }
]

GET Order by id

Rota responsável pela pesquisa do chamado, passando o id dele na requisição.

url method status
/orders/order_id GET 200 - 404

RESPONSE

{
  "id": 1,
  "type": "Nobreak",
  "status": "aberto",
  "description": "No break apitando todo momento",
  "release_date": "Thu, 16 Dec 2021 17:05:31 GMT",
  "update_date": "Thu, 16 Dec 2021 17:05:31 GMT",
  "solution": "",
  "user": {
    "id": 1,
    "name": "Kelvin",
    "email": "[email protected]",
    "position": "CTO",
    "role": "admin"
  },
  "technician": null
}

GET User by order id

Rota responsável pela pesquisa do usuário que solicitou o chamado, passando o id do chamado na rota.

url method status
/orders/order_id/user GET 200 - 404

RESPONSE

{
  "user": {
    "id": 2,
    "name": "João Guilherme Filho",
    "email": "[email protected]",
    "birthdate": "22/05/1993",
    "role": "user"
  }
}

GET Technician by order id

Rota responsável pela pesquisa do técnico que realizará a manutenção, passando o id do chamado na rota.

url method status
/orders/order_id/technician GET 200 - 404

RESPONSE

{
  "technician": {
    "id": 1,
    "name": "Gustavo Martins",
    "email": "[email protected]",
    "birthdate": "22/11/1996"
  }
}

GET Order by status

Rota responsável por obter os chamados, passando na rota os status disponíveis (aberto, em_atendimento, fechado) e o token do usuário que criou esse chamado.

url method status
/orders/order_status GET 200 - 404

RESPONSE

[
  {
    "id": 1,
    "type": "Nobreak",
    "status": "aberto",
    "description": "No break apitando todo momento",
    "release_date": "Thu, 16 Dec 2021 17:05:31 GMT",
    "update_date": "Thu, 16 Dec 2021 17:05:31 GMT",
    "solution": "",
    "user": {
      "id": 1,
      "name": "Kelvin",
      "email": "[email protected]",
      "position": "CTO",
      "role": "admin"
    },
    "technician": null
  }
]

GET Orders Relatory

Rota responsável para download de relatório de ordens com status igual a aberto e em_atendimento

url method status
/orders/relatory GET 200 - 404

PATCH Order by id

Rota responsável pela atualização de um chamado, passando o id dele na rota.

url method status
/orders/order_id PATCH 200 - 400 - 401 - 404

BODY

{
  "description": "Apresenta falhas contínuas."
}

RESPONSE

{
  "id": 1,
  "type": "Nobreak",
  "status": "aberto",
  "description": "Apresenta falhas contínuas.",
  "release_date": "Thu, 16 Dec 2021 17:05:31 GMT",
  "update_date": "Thu, 16 Dec 2021 17:05:31 GMT",
  "solution": "",
  "user": {
    "id": 1,
    "name": "João",
    "email": "[email protected]",
    "position": "CTO",
    "role": "admin"
  },
  "technician": null
}

DELETE Order

Rota responsável por fazer a remoção de um chamado, passando o id dele na rota.

url method status
/orders/order_id DELETE 200 - 404

RESPONSE – status

204

Technician

Endpoint referente ao técnicos responsáveis por responderem aos chamados. Aqui podemso fazer o login do técnico, inserção de um técnico, alteração de dados do técnico, obtenção de todos os técnicos, obtenção de um técnico apenas, obtenção dos chamados que estão relacionados à um técnico e exclusão de um técnico. Para a criação de um técnico, é necessário o token da empresa. Para as outras rotas, necessário o token do próprio técnico, obtido no login.

LOGIN Technician

Rota responsável pelo login do técnico. Retorna um token de acesso para que os outros métodos sejam liberados.

url method status
/technicians/login POST 200 - 404

BODY

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

RESPONSE

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTYzOTU5NDQzMywianRpIjoiYjJiNDMyZWUtMzlhMC00MTNmLTlhOWYtYTQ5Y2QwYjM4NWQzIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6eyJpZCI6MSwibmFtZSI6Ikd1c3Rhdm8gTWFydGlucyIsImVtYWlsIjoiZ3VzdGF2b21hcnRpbnNAZ21haWwuY29tIiwiYmlydGhkYXRlIjoiRnJpLCAyNyBEZWMgMTk4NSAwMDowMDowMCBHTVQifSwibmJmIjoxNjM5NTk0NDMzLCJleHAiOjE2Mzk1OTUzMzN9.snEqX5nCWlItBDEcOEVXFZHOKYgwrgrFdPgeNGyEwAs"
}

POST Technician

url method status
/technicians POST 200

{
  "name": "Erick Lander",
  "email": "[email protected]",
  "password": "123456",
  "birthdate": "03/05/1989"
}

RESPONSE

{
  "id": 1,
  "name": "Erick Lander",
  "email": "[email protected]",
  "birthdate": "03/05/1989",
  "role": "tech"
}

GET Technician

Rota responsável pela pesquisa de todos os técnicos registrados na API.

url method status
/technicians GET 200

[
  {
    "id": 1,
    "name": "Erick Lander",
    "email": "[email protected]",
    "birthdate": "03/05/1989",
    "role": "tech"
  }
]

GET Technician by id

Rota responsável por trazer os dados de um técnico, passando o id dele na rota.

url method status
/technicians/technician_id GET 200 - 404

{
  "id": 1,
  "name": "Erick Lander",
  "email": "[email protected]",
  "birthdate": "03/05/1989",
  "role": "tech"
}

GET Order by technician id

Rota responsável por obter à qua(is)l chamado(s) aquele técnico foi relacionado, passando o id do técnico na rota.

url method status
/technicians/technician_id/orders GET 200 - 404

[
  {
    "id": 1,
    "type": "nobreak",
    "status": "em_atendimento",
    "description": "Apresenta falhas contínuas.",
    "release_date": "Thu, 16 Dec 2021 17:05:31 GMT",
    "update_date": "Thu, 16 Dec 2021 17:32:12 GMT",
    "solution": "",
    "user": {
      "id": 1,
      "name": "João",
      "email": "[email protected]",
      "position": "CTO",
      "company": {
        "id": 1,
        "cnpj": "52.468.355/0001-03",
        "trading_name": "Microsoft Enterprise"
      }
    }
  }
]

PATCH Technician

Rota responsável pela atualização dos dados do técnico, passando o id do técnico na rota. Para poder fazer as alterações, é necessário estar logado na aplicação.

url method status
/technicians/technician_id PATCH 200 - 400 - 404 - 409

BODY

{
  "name": "Erick"
}

RESPONSE

{
  "id": 1,
  "name": "Erick",
  "email": "[email protected]",
  "birthdate": "03/05/1989",
  "role": "tech"
}

PATCH Take order

Rota responsável pelo técnico assumir um chamado em aberto. Para isso, é necessário apenas passar o id do chamado na rota e o token do técnico que ficará com aquele chamado.

url method status
/technicians/take_order/order_id PATCH 200 - 400 - 404

RESPONSE

{
  "order": {
    "id": 1,
    "status": "em_atendimento",
    "type": "nobreak",
    "description": "Apresenta falhas contínuas.",
    "release_date": "Thu, 16 Dec 2021 17:05:31 GMT",
    "update_date": "Thu, 16 Dec 2021 17:32:12 GMT",
    "user": {
      "id": 1,
      "name": "João",
      "email": "[email protected]",
      "position": "CTO",
      "birthdate": "01/01/2001"
    }
  }
}

PATCH Finalize order

Rota responsável pelo técnico finalizar aquele chamado. Para isso, é necessário apenas passar id do chamado na rota e o token do técnico que havia assumido aquele chamado.

url method status
/technicians/finalize_order/order_id PATCH 200 - 400 - 401 - 404

BODY

{
  "solution": "COMPRA DE UM NOVO NOBREAK."
}

RESPONSE

{
  "order": {
    "id": 1,
    "status": "fechado",
    "type": "nobreak",
    "description": "Apresenta falhas contínuas.",
    "release_date": "Thu, 16 Dec 2021 17:05:31 GMT",
    "update_date": "Thu, 16 Dec 2021 17:34:30 GMT",
    "solution": "COMPRA DE UM NOVO NOBREAK.",
    "user": {
      "id": 1,
      "name": "João",
      "email": "[email protected]",
      "position": "CTO",
      "birthdate": "01/01/2001"
    }
  }
}

GitHub

View Github