{"id":26877211,"url":"https://github.com/patrickmoraisn/valoriza-server","last_synced_at":"2026-04-13T04:45:41.071Z","repository":{"id":154931538,"uuid":"435586264","full_name":"PatrickMoraisN/valoriza-server","owner":"PatrickMoraisN","description":"Sistema de elogio para equipes","archived":false,"fork":false,"pushed_at":"2021-12-07T23:07:40.000Z","size":305,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-04T18:49:15.779Z","etag":null,"topics":["express","jwt-auth","nodejs","postgresql","prettier-eslint","typeorm","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/PatrickMoraisN.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,"zenodo":null}},"created_at":"2021-12-06T17:26:59.000Z","updated_at":"2021-12-10T12:11:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"bf1cdbd6-7a6a-4337-a8c8-7d3997064afa","html_url":"https://github.com/PatrickMoraisN/valoriza-server","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PatrickMoraisN/valoriza-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PatrickMoraisN%2Fvaloriza-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PatrickMoraisN%2Fvaloriza-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PatrickMoraisN%2Fvaloriza-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PatrickMoraisN%2Fvaloriza-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PatrickMoraisN","download_url":"https://codeload.github.com/PatrickMoraisN/valoriza-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PatrickMoraisN%2Fvaloriza-server/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269727220,"owners_count":24465407,"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","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["express","jwt-auth","nodejs","postgresql","prettier-eslint","typeorm","typescript"],"created_at":"2025-03-31T11:19:04.418Z","updated_at":"2026-04-13T04:45:36.040Z","avatar_url":"https://github.com/PatrickMoraisN.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![banner](src/assets/valoriza_banner.png)\n\u003cbr /\u003e\n\n# :pushpin: Índice\n- [Banco de Dados](#package-banco-de-dados)\n- [Regras da Aplicação](#scroll-regras-da-aplicação)\n- [Rotas](#mailbox_closed-Rotas)\n- [Mídia](#camera_flash-mídia)\n- [Sobre](#monocle_face-sobre)\n- [Tecnologias](#rocket-tecnologias)\n- [Instalação](#hammer_and_wrench-instalação)\n- [Autor](#closed_book-autor)\n\u003cbr /\u003e\n\n---\n\n# :package: Banco de Dados\n\nO Banco de dados utilizado foi o PostgreSQL com TypeORM.\nPara monitoramento foi utilizado o Beekeeper.\n\nA estrutura dos dados ficou desenhada dessa forma:\n\n![Imagem do projeto](src/assets/bd.png)\n\n---\n\n# :scroll: Regras da Aplicação\n\n- ### Cadastro de Usuário\n  - Não é permitido cadastrar mais de um usuário com o mesmo email.\n  - Não é permitido cadastrar um usuário sem email.\n\n- ### Cadastro de Tags\n  - Não é permitido cadastrar mais de uma tag com o mesmo nome.\n  - Não é permitido cadastrar uma tag sem nome.\n  - Não é permitido o cadastro de uma tag por usuários que não sejam administradores.\n  - O usuário precisa estar autenticado na aplicação.\n\n- ### Cadastro de Elogios\n  - Não é permitido um usuário cadastrar um elogio para si.\n  - Não é permitido um usuário cadastrar um elogio para usuário inválidos.\n  - O usuário precisa estar autenticado na aplicação.\n\n---\n\n# :mailbox_closed: Rotas\n\n  - ### Post\n    `/users` Registra um novo usuário. \u003cbr\u003e\u003cbr\u003e\n    `/tags` Registra uma nova tag (Precisa ser administrador. \u003cbr\u003e\u003cbr\u003e\n    `/login` Loga na aplicação e gera um token JWT. \u003cbr\u003e\u003cbr\u003e\n    `/compliments` Registra um novo elogio para um usuário. (Precisa estar autenticado.)\u003cbr\u003e\u003cbr\u003e\n\n  - ### Get\n    `/users/compliments/send` Lista elogios que o usuário logado enviou (Precisa estar autenticado).\u003cbr\u003e\u003cbr\u003e\n    `/users/compliments/received` Lista elogios que o usuário logado recebeu (Precisa estar autenticado).\u003cbr\u003e\u003cbr\u003e\n    `/tags` Lista todas as tags (Precisa estar autenticado).\u003cbr\u003e\u003cbr\u003e\n    `/users` Lista todos os usuários (Precisa estar autenticado).\u003cbr\u003e\u003cbr\u003e\n\n---\n\n# :camera_flash: Mídia\n\nAqui alguns exemplos de respostas das requisições que podem ser feitas: \u003cbr\u003e\n\n- Criar uma tag \u003cbr\u003e\n![Imagem do projeto](src/assets/tag.png)\n\n- Listar todos os usuários \u003cbr\u003e\n***OBS*** _Nessa resposta da requisição foi utilizado o decorator Exclude() da biblioteca `class-transformer` para retirar o campo `password` da resposta. Legal né!?_ \u003cbr\u003e\n![Imagem do projeto](src/assets/list-users.png)\n\n- Criar um usuário \u003cbr\u003e\n***OBS*** _O campo `id` foi gerado pela biblioteca `uuid` usando o tipo de hash aleatória `v4`_ \u003cbr\u003e\n![Imagem do projeto](src/assets/user.png)\n\n---\n\n# :monocle_face: Sobre\nEsse projeto foi feito com a intenção de praticar Node utilizando Typescript com PostgreSQL e TypeORM.\n\nPara tratar a senha recebida na criação de um usuário, foi utilizado a biblioteca `bcryptjs`.\n\nUm middleware para confirmar se o usuário logado é administrador foi criado. \u003cbr\u003e\u003cbr\u003e\nA verificação do token JWT também é feita pelo middleware, sendo o `id` do usuário logado resgatado do próprio payload do token.\n\nEspero que tenha gostado :)\n\u003cbr /\u003e\n\n---\n\n# :rocket: Tecnologias\nEsse projeto foi feito utilizando as seguintes tecnologias: \u003cbr\u003e\n- :heavy_check_mark: **Node**\n- :heavy_check_mark: **Express**\n- :heavy_check_mark: **Typescript**\n- :heavy_check_mark: **TypeORM**\n- :heavy_check_mark: **PostgreSQL**\n- :heavy_check_mark: **JWT Auth**\n- :heavy_check_mark: **bcryptjs / class-transformer**\n- :heavy_check_mark: **ESLint**\n- :heavy_check_mark: **Prettier**\n\u003cbr\u003e\u003cbr\u003e\n\u003cbr /\u003e\n\n---\n\n# :hammer_and_wrench: Instalação\n**Esse projeto envolve variáveis ambientes, tenha certeza de que você as possui antes de tentar executar!**\n\n1. Clone o repositório\n\n```bash\ngit clone git@github.com:PatrickMoraisN/valoriza-server.git\n```\n\n2. Mude para o diretório do repositório\n\n```bash\ncd valoriza-server\n```\n\n3. Instale as dependências\n\n```bash\nnpm install\n```\n\n4. Crie um arquivo `.env` na raíz do seu projeto e adicione as variáveis ambientes\n\n***OBS*** Necessário ter instalado o PostgreSQL na máquina!\n\n```bash\n### JWT\nJWT_SECRET=b09879245dc798a8f22f44d77f78861fae9e39b9\n\n### PostgreSQL\nPOSTGRE_USER=seu-usuario-postgre\nPOSTGRE_PASS=sua-senha-postgre\nPOSTGRE_DATABASE=nome-do-seu-banco-de-dados\nPOSTGRE_PORT=porta-do-banco-de-dados\n\n```\n\n5. Rode as Migrations\n\n```bash\nnpx -p typeorm ts-node-dev ./node_modules/typeorm/cli.js migration:run\n```\n\n6. Inicie o app\n\n```bash\nnpm run dev\n```\n\nTá tudo pronto! O servidor está online em [localhost:3000](http://localhost:3000/)!\n\n---\n\n# :closed_book: Autor\nPatrick Morais \u003cbr\u003e\n[![Linkedin Badge](https://img.shields.io/badge/-Linkedin-6633cc?style=flat-square\u0026logo=Linkedin\u0026logoColor=white\u0026link=https://www.linkedin.com/in/patrick-morais/)](https://www.linkedin.com/in/patrick-morais/)\u003cbr\u003e\n[![Gmail Badge](https://img.shields.io/badge/-ppternunes@gmail.com-6633cc?style=flat-square\u0026logo=Gmail\u0026logoColor=white\u0026link=mailto:ppternunes@gmail.com)](mailto:ppternunes@gmail.com)\u003cbr\u003e\n[![GitHub Badge](https://img.shields.io/badge/-Patrick%20Morais-6633cc?style=flat-square\u0026logo=github\u0026logoColor=white)](https://www.github.com/patrickmoraisn/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickmoraisn%2Fvaloriza-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatrickmoraisn%2Fvaloriza-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickmoraisn%2Fvaloriza-server/lists"}