{"id":20375587,"url":"https://github.com/juliolmuller/ufpr-delivery-api","last_synced_at":"2025-05-08T09:32:12.381Z","repository":{"id":110658010,"uuid":"381206034","full_name":"juliolmuller/ufpr-delivery-api","owner":"juliolmuller","description":"REST API para gestão de entregas","archived":true,"fork":false,"pushed_at":"2021-07-20T00:30:22.000Z","size":644,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-04T21:33:46.876Z","etag":null,"topics":["javascript","node","postgresql","rest-api"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juliolmuller.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-29T01:35:58.000Z","updated_at":"2023-04-12T01:44:11.000Z","dependencies_parsed_at":"2023-04-18T20:17:23.303Z","dependency_job_id":null,"html_url":"https://github.com/juliolmuller/ufpr-delivery-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliolmuller%2Fufpr-delivery-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliolmuller%2Fufpr-delivery-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliolmuller%2Fufpr-delivery-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliolmuller%2Fufpr-delivery-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juliolmuller","download_url":"https://codeload.github.com/juliolmuller/ufpr-delivery-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253036626,"owners_count":21844251,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","node","postgresql","rest-api"],"created_at":"2024-11-15T01:31:50.859Z","updated_at":"2025-05-08T09:32:12.365Z","avatar_url":"https://github.com/juliolmuller.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gestor de Entregas ACP\n\nAplicação construída como atividades avaliativas da disciplina de *Tópicos Especiais em Algorítmos* do curso de *Tecnologia em Análise e Desenvolvimento de Sistemas*, com o objetivo de servir como API REST para um sistema de gestão de consultas médicas, utilizando a plataforma **Node.js**.\n\n## Diagrama de Classes\n\n![Diagrama de classes da aplicação](./.github/diagram-class.jpg)\n\n## Diagrama Relacional\n\n![Diagrama relacional da aplicação](./.github/diagram-relational.jpg)\n\n## Executar o Projeto\n\nPara executar o projeto é necessário ter a versõa 10 ou superior do [Node.js](https://nodejs.org/en/) e o gerenciador de pacotes NPM (geralmente incluso na instalação do *Node*) ou o [Yarn (v1)](https://yarnpkg.com/) para configuração dos pacotes de terceiros. Certifique-se também de que o gerenciador de pacote escolhido está disponível através da linha de comando, executando `npm -v` ou `yarn -v`.\n\nCom os *Node.js* configurado, você poderá instalar as dependências a partir do comando:\n\n```bash\n# usando o Npm\n$ npm install\n\n# usando o Yarn\n$ yarn\n```\n\nAntes de executar a aplicação, você também deve configurar as variáveis de ambiente, que serão responsáveis por configurações gerais do servidor e pela conexão com banco de dados. Altere então o arquivo `.env`, na raíz do projeto (se após a instalação não houver um arquivo `.env`, crie-o utilizando como base o arquivo `.env.example`). O SGBD utilizado no desenvolvimento foi o [MySQL (v5.7)](https://www.mysql.com/), COntudo, se preferir utilizar uma instância de banco de dados em conteiner, crie uma através do comando `docker-compose up`.\n\nPara saber se o banco foi configurado com sucesso, execute as rotinas de *migrations* e *seeds*:\n\n```bash\n# usando o NPX (acompanha o NPM)\n$ npx sequelize db:create    # cria o banco de dados no SGBD\n$ npm run migrate            # executa as migrações dos esquemas\n$ npm run seed:all           # (opcional) adiciona dados fakes nas tabelas\n\n# usando o Yarn\n$ yarn sequelize db:create   # cria o banco de dados no SGBD\n$ yarn migrate               # executa as migrações dos esquemas\n$ yarn seed:all              # (opcional) adiciona dados fakes nas tabelas\n```\n\nPor fim, para executar o servidor em modo de desenvolvimento (executado pelo pacote *nodemon*), utilize o comando `npm run dev` ou `yarn dev`.\n\n## Endpoints\n\nOs seguintes *endpoints* foram criados para atender aos requisitos:\n\n| Path                      | Método |    Perfil Autoriazado     | Recurso                                                                  |\n| :------------------------ | :----: | :-----------------------: | :----------------------------------------------------------------------- |\n| `/signin/{role}`          |  POST  |             -             | Autentica um usuário de perfil `{role}` com base em *login* e *password* |\n| `/associates`             |  GET   |          `admin`          | Listar dados de todos os associados                                      |\n| `/associates/{cnpj}`      |  GET   |      `admin`/`assoc`      | Acessar dados de associado com CNPJ `{cnpj}`                             |\n| `/associates`             |  POST  |          `admin`          | Cadastrar novo associado                                                 |\n| `/associates/{id}`        |  PUT   |      `admin`/`assoc`      | Atualizar dados de associado com ID `{id}`                               |\n| `/associates/{id}`        | DELETE |          `admin`          | Excluir cadastro de associado com ID `{id}`                              |\n| `/customers`              |  GET   |      `admin`/`assoc`      | Listar dados de todos os clientes                                        |\n| `/customers/{cnpj}`       |  GET   |      `admin`/`assoc`      | Acessar dados de cliente com CNPJ `{cnpj}`                               |\n| `/customers`              |  POST  |          `assoc`          | Cadastrar novo cliente                                                   |\n| `/customers/{id}`         |  PUT   |          `assoc`          | Atualizar dados de cliente com ID `{id}`                                 |\n| `/customers/{id}`         | DELETE |          `assoc`          | Excluir cadastro de cliente com ID `{id}`                                |\n| `/motoboys`               |  GET   |      `admin`/`assoc`      | Listar dados de todos os motoboys                                        |\n| `/motoboys/{cpf}`         |  GET   | `admin`/`assoc`/`motoboy` | Acessar dados de motoboy com CPF `{cpf}`                                 |\n| `/motoboys`               |  POST  |          `assoc`          | Cadastrar novo motoboy                                                   |\n| `/motoboys/{id}`          |  PUT   |     `assoc`/`motoboy`     | Atualizar dados de motoboy com ID `{id}`                                 |\n| `/motoboys/{id}`          | DELETE |          `assoc`          | Excluir cadastro de motoboy com ID `{id}`                                |\n| `/orders`                 |  GET   | `admin`/`assoc`/`motoboy` | Listar dados de todas as entregas                                        |\n| `/orders?status={status}` |  GET   | `admin`/`assoc`/`motoboy` | Listar dados de todas as entregas com status `{status}`                  |\n| `/orders?motoboy={id}`    |  GET   | `admin`/`assoc`/`motoboy` | Listar dados de todas as entregas do motoboy com ID `{id}`               |\n| `/orders/{id}`            |  GET   | `admin`/`assoc`/`motoboy` | Acessar dados de entrega com ID `{id}`                                   |\n| `/orders`                 |  POST  |          `assoc`          | Cadastrar nova entrega                                                   |\n| `/orders/{id}`            |  PUT   |     `assoc`/`motoboy`     | Atualizar dados de entrega pendente com ID `{id}`                        |\n| `/orders/{id}`            | DELETE |          `assoc`          | Excluir cadastro de entrega pendente com ID `{id}`                       |\n| `/reports/admin`          |  GET   |          `assoc`          | ??? Dados para relatório administrativo                                  |\n| `/reports/fin`            |  GET   |     `assoc`/`motoboy`     | ??? Dados para relatório financeiro                                      |\n\nOBS: Apenas os dados pertinentes ao usuário autenticado são acessíveis a ele\n\n### Obter token para acesso aos endpoints\n\nPara autenticar como administrador (perfil `admin`), pastar submeter uma requisição **POST**: para o endpoint específico. O token do admin está definido nas variáveis de ambiente.\n\n```http\nPOST http://localhost:8081/signin/admin\nContent-Type: application/json\n\n{}\n```\n\nPara autenticar como **associado** ou **motoboy**, inclua o perfil (*role*) na url e passe as credenciais de um item do banco (a senha padrão gerada pelos seeders é `qwerty123`). Use CNPJ para **associados** e CPF para **motoboy**:\n\n```http\nPOST http://localhost:8081/signin/assoc\nContent-Type: application/json\n\n{\n  \"login\": \"11222333000144\",\n  \"password\": \"qwerty123\"\n}\n```\n\n```http\nPOST http://localhost:8081/signin/motoboy\nContent-Type: application/json\n\n{\n  \"login\": \"11122233344\",\n  \"password\": \"qwerty123\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliolmuller%2Fufpr-delivery-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliolmuller%2Fufpr-delivery-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliolmuller%2Fufpr-delivery-api/lists"}