{"id":15760107,"url":"https://github.com/padupe/desafio_softaliza-nodejs","last_synced_at":"2025-03-31T09:14:51.183Z","repository":{"id":48616888,"uuid":"386320811","full_name":"padupe/desafio_softaliza-nodejs","owner":"padupe","description":"API baseada Nodejs com base na proposta do Desafio para Contratação de Desenvolvedor Back-End Júnior na Sotftaliza.","archived":false,"fork":false,"pushed_at":"2021-07-19T20:48:09.000Z","size":13051,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-06T13:35:08.847Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/padupe.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}},"created_at":"2021-07-15T14:33:35.000Z","updated_at":"2023-06-28T21:29:39.000Z","dependencies_parsed_at":"2022-09-11T14:21:59.152Z","dependency_job_id":null,"html_url":"https://github.com/padupe/desafio_softaliza-nodejs","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/padupe%2Fdesafio_softaliza-nodejs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padupe%2Fdesafio_softaliza-nodejs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padupe%2Fdesafio_softaliza-nodejs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padupe%2Fdesafio_softaliza-nodejs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/padupe","download_url":"https://codeload.github.com/padupe/desafio_softaliza-nodejs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246443543,"owners_count":20778251,"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":[],"created_at":"2024-10-04T10:41:07.516Z","updated_at":"2025-03-31T09:14:51.162Z","avatar_url":"https://github.com/padupe.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![img](https://github.com/padupe/desafio_softaliza-nodejs/blob/Tests/readme/Desafio_Softaliza.png)\n\n# Desafio [Softaliza](https://softaliza.com.br/ 'Softaliza') Nodejs\n\nAPI baseada em **Nodejs** com base na proposta do Desafio para Contratação de **Desenvolvedor Back-End Júnior** na Sotftaliza.\n\n## Tecnologias Aplicadas\n\n---\n\n\u003e _Em ordem alfabética_\n\n- [Docker](https://www.docker.com/ 'Docker'): \"Contêinirização\"\n- [Express](https://expressjs.com/ 'Express'): Framework\n- [Nodejs](https://nodejs.org/en/ 'Nodejs'): Eventos voltados para o Backend\n- [Prisma](https://www.prisma.io/ 'Prisma'): ORM responsável pela Conexão com o Banco de Dados\n- [PostgreSQL](https://www.postgresql.org/ 'PostgreSQL'): Sistema Gerenciador do Banco de Dados\n\n## Dependências\n\n---\n\n\u003e _Em ordem alfabética_\n\n- [bcrypt](https://www.npmjs.com/package/bcrypt 'bcrypt'): Biblioteca para realizar _hash_ de senhas.\n- [cross-env](https://www.npmjs.com/package/cross-env 'cross-env'): Módulo que permite executar scripts que definem e usam variáveis de ambiente.\n- [ESLint](https://eslint.org/ 'ESLint'): \"Corretor\" de erros de Código/Sintaxe).\n- [Jest](https://jestjs.io/ 'Jest'): Estrutura de testes de JavaScript.\n- [jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken 'jsonwebtoken'): Módulo de Autenticação para Segurança da Aplicação.\n- [nodemon](https://www.npmjs.com/package/nodemon 'nodemon'): Ferramenta que reinicia automaticamente o servidor quando mudanças são detectadas.\n- [Prettier](https://prettier.io/ 'Prettier'): \"Formatador\" de Código\n- [SuperTest](https://www.npmjs.com/package/supertest 'SuperTest'): Módulo para testes de Integração.\n- [slugify](https://www.npmjs.com/package/slugify 'slugify'): Módulo para gerar _slugs_ automaticamente.\n- [uuidv4](https://www.npmjs.com/package/uuidv4 'uuidv4'): Módulo para criar UUID (_Universally Unique IDentifier_) conforme [RFC1422].\n- [winston](https://www.npmjs.com/package/winston 'winston'): Biblioteca para o registro de logging de Aplicações.\n\n## MER (Modelo Entidade Relacionamento)\n\n---\n\n![img](https://github.com/padupe/desafio_softaliza-nodejs/blob/Routes/readme/MER.png)\n\n## Modelos de JSON para uso na Aplicação\n\n---\n\n**DICA:** Para facilitar as os testes utilizando o [Insomnia](https://insomnia.rest/ 'Insomnia'), crie uma \"Enviroment\":\n\n```json\n{\n  \"baseurl\": \"localhost:2121/v1\"\n}\n```\n\n\u003e Para utilizar a \"Enviroment\", na barra de endereços utilize as teclas **Ctrl+Espaço**\n\n### Login na Aplicação\n\n#### Auth\n\n- Login\n\nUsuário Válido:\n\n```json\n{\n  \"username\": \"paulopeixoto\",\n  \"password\": \"softaliza@2021\"\n}\n```\n\n\u003e **ATENÇÃO:** Após logar na Aplicação, será necessário \"guardar\" o Token gerado para prosseguir nos demais endpoints\n\nTeste utilizando o Insomnia:\n\n![gif](https://github.com/padupe/desafio_softaliza-nodejs/blob/Tests/readme/Insomnia%20%5BTESTE%20-%20Endpoint_%20Auth%20_%20POST%5D.gif)\n\n---\n\n#### BlogPost\n\n- POST (_Para criar um BlogPost_)\n\nExemplo de \"Novo\" Post:\n\n\u003e Inserir na barra do Insomnia\n\n```\n    localhost:2121/v1/blogpost/\n```\n\nJSON de \"carga\":\n\n```json\n{\n  \"username\": \"paulopeixoto\",\n  \"title_post\": \"A New Post.\",\n  \"content_post\": \"Example\"\n}\n```\n\n\u003e **IMPORTANTE:** Os três campos são obrigatórios.\n\n**Retorno esperado:**\n\n```json\n{\n  \"post\": {\n    \"user\": {\n      \"username\": \"paulopeixoto\"\n    },\n    \"title\": \"A New Post.\",\n    \"content\": \"Example\"\n  },\n  \"msg\": \"New Post Created!\"\n}\n```\n\nTeste utilizando o Insomnia:\n\n![gif](https://github.com/padupe/desafio_softaliza-nodejs/blob/Tests/readme/Insomnia%20%5BTESTE%20-%20Endpoint_%20BlogPost%20_%20POST%5D.gif)\n\n---\n\n- GET (_Exibir um BlogPost pelo slug_)\n\nExemplo de consulta:\n\n\u003e Inserir na barra do Insomnia\n\n```\n    localhost:2121/v1/blogpost/the-history-of-my-life\n```\n\n**Retorno esperado:**\n\n```json\n{\n  \"post\": {\n    \"user\": {\n      \"username\": \"paulopeixoto\"\n    },\n    \"title\": \"The history of my life!\",\n    \"content\": \"Summary of my professional trajectory\",\n    \"slug\": \"the-history-of-my-life\"\n  },\n  \"msg\": \"Show Post Successful!\"\n}\n```\n\nTeste utilizando o Insomnia:\n\n![gif](https://github.com/padupe/desafio_softaliza-nodejs/blob/Tests/readme/Insomnia%20%5BTESTE%20-%20Endpoint_%20BlogPost%20_%20GET%5D.gif)\n\n---\n\n- PUT (_Para atualizar um BlogPost_)\n\nExemplo de Atualização de um Post:\n\n\u003e Inserir na barra do Insomnia\n\n```\n    localhost:2121/v1/blogpost/the-history-of-my-life\n```\n\nJSON de \"carga\":\n\n```json\n{\n  \"new_title\": \"Update Post\",\n  \"new_content\": \"Example\"\n}\n```\n\n\u003e **IMPORTANTE:** Os dois campos são obrigatórios.\n\n**Retorno esperado:**\n\n```json\n{\n  \"post\": {\n    \"user\": {\n      \"username\": \"paulopeixoto\"\n    },\n    \"title\": \"Update Post\",\n    \"content\": \"Example\"\n  },\n  \"msg\": \"Update Post Successful!\"\n}\n```\n\nTeste utilizando o Insomnia:\n\n![gif](https://github.com/padupe/desafio_softaliza-nodejs/blob/Tests/readme/Insomnia%20%5BTESTE%20-%20Endpoint_%20BlogPost%20_%20PUT%5D.gif)\n\n---\n\n- DELETE (_Para deletar um BlogPost_)\n\nExemplo de Exclusão de um Post:\n\n\u003e Inserir na barra do Insomnia\n\n```\n    localhost:2121/v1/blogpost/why-did-i-choose-to-be-back-end\n```\n\n**Retorno esperado:**\n\n```json\n{\n  \"user\": \"paulopeixoto\",\n  \"msg\": \"Delete Post Successful!\"\n}\n```\n\nTeste utilizando o Insomnia:\n\n![gif](https://github.com/padupe/desafio_softaliza-nodejs/blob/Tests/readme/Insomnia%20%5BTESTE%20-%20Endpoint_%20BlogPost%20_%20DELETE%5D.gif)\n\n---\n\n## Comandos úteis para uso da Aplicação\n\n---\n\n### Developmente Server\n\nIniciar o servidor da Aplicação:\n\n```\n    $ npx yarn dev\n```\n\n### Docker\n\nSubir as configurações do contêiner:\n\n```\n    $ docker-compose -f docker/docker-compose.yml up -d\n```\n\n### PostgreSQL (Banco de Dados) / ORM Prisma\n\nInterface Visual no navegador para acessar o Banco de Dados:\n\n```\n    $ npx prisma studio\n```\n\nIniciar Migration:\n\n```\n    $ npx yarn migrate\n```\n\nCarregar os dados de teste no Banco:\n\n```\n    $ npx yarn seed\n```\n\nRealizar o _reset_ das Migrations e limpar o Banco de Dados:\n\n```\n    $ npx yarn reset\n```\n\n\u003e _**Atenção:** Após utilizar o comando \"reset\" será necessário rodar o comando '$ npx yarn seed'._\n\n---\n\n## Testes\n\nComando para rodar todos os testes:\n\n```\n    $ npx yarn test\n```\n\n\u003e _**Atenção:** Após utilizar o comando '$ npx yarn test' a base do Banco de Dados será \"limpa\" e \"populada\" novamente de maneira automática._\n\n### Testes de Integração\n\nComando para testar o arquivo **auth.test.js** (_diretório routes_) :\n\n```\n    $ npx yarn test routes/auth.test.js\n```\n\nComando para testar o arquivo **blogpost.test.js** (_diretório routes_) :\n\n```\n    $ npx yarn test routes/blogpost.test.js\n```\n\n---\n\n### Testes Unitários\n\nComando para testar o arquivo **crypt.test.js** (_diretório utilities_) :\n\n```\n    $ npx yarn test utilities/crypt.test.js\n```\n\nComando para testar o arquivo **findPost.test.js** (_diretório controllers/blogPost_) :\n\n```\n    $ npx yarn test controllers/blogPost/findPost.test.js\n```\n\nComando para testar o arquivo **findUsername.test.js** (_diretório controllers_) :\n\n```\n    $ npx yarn test controllers/findUsername.test.js\n```\n\nComando para testar o arquivo **token.test.js** (_diretório auth_) :\n\n```\n    $ npx yarn test auth/token.test.js\n```\n\n---\n\n### Coverage\n\n![img](https://github.com/padupe/desafio_softaliza-nodejs/blob/Update-Tests/readme/Coverage_Alltests.png)\n\nComando para validar o coverage:\n\n```\n    $ npx yarn test --coverage\n```\n\n---\n\n## Logging\n\n| Level |         Observação         |\n| :---: | :------------------------: |\n| info  |           Teste            |\n| debug |      Dados do Usuário      |\n| error | Erros de Banco / Aplicação |\n\n---\n\n_Aplicação desenvolvida por [Paulo Eduardo Peixoto](https://www.linkedin.com/in/paulo-eduardo-peixoto-2155a866/ 'Paulo Eduardo Peixoto')_\n\n[//]: #\n[rfc1422]: https://www.ietf.org/rfc/rfc4122.txt\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpadupe%2Fdesafio_softaliza-nodejs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpadupe%2Fdesafio_softaliza-nodejs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpadupe%2Fdesafio_softaliza-nodejs/lists"}