{"id":18311364,"url":"https://github.com/t0malexander/nodejs-basics","last_synced_at":"2025-04-09T12:12:21.663Z","repository":{"id":153977090,"uuid":"619858976","full_name":"T0mAlexander/Nodejs-Basics","owner":"T0mAlexander","description":"Três projetos de aplicações Node.js e API RESTful, com desafios técnicos indo do básico ao avançado","archived":false,"fork":false,"pushed_at":"2023-05-20T20:20:33.000Z","size":1358,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"project-01","last_synced_at":"2025-02-15T06:16:58.408Z","etag":null,"topics":["design-patterns","docker","dotenv","e2e-tests","eslint","fastify","jwt","nodejs","postgresql","prisma","rbac","solid","typescript","unit-tests","vitest"],"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/T0mAlexander.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":"2023-03-27T14:57:35.000Z","updated_at":"2023-08-13T01:56:21.000Z","dependencies_parsed_at":"2024-06-02T07:34:55.490Z","dependency_job_id":null,"html_url":"https://github.com/T0mAlexander/Nodejs-Basics","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/T0mAlexander%2FNodejs-Basics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/T0mAlexander%2FNodejs-Basics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/T0mAlexander%2FNodejs-Basics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/T0mAlexander%2FNodejs-Basics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/T0mAlexander","download_url":"https://codeload.github.com/T0mAlexander/Nodejs-Basics/tar.gz/refs/heads/project-01","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248036065,"owners_count":21037092,"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":["design-patterns","docker","dotenv","e2e-tests","eslint","fastify","jwt","nodejs","postgresql","prisma","rbac","solid","typescript","unit-tests","vitest"],"created_at":"2024-11-05T16:17:28.208Z","updated_at":"2025-04-09T12:12:21.616Z","avatar_url":"https://github.com/T0mAlexander.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projeto básico de Node.js\n\n\u003e Olá visitante, existem outros 2 projetos nas branches [`project-02`](https://github.com/T0mAlexander/Nodejs-Basics/tree/project-02) e [`project-03`](https://github.com/T0mAlexander/Nodejs-Basics/tree/project-03)\n\nEste projeto consiste em uma aplicação Node.js para gerenciamento de usuários utilizando uma base de dados no formato JSON. A aplicação conta com rotas para consultar, adicionar, atualizar e deletar usuários.\n\n## Uso\n\nPara rodar a aplicação, é necessário ter o Node.js instalado. Na pasta raiz do projeto, execute o seguinte comando:\n\n```bash\nnpm run server\n```\n\nApós a execução do comando, o servidor ficará disponível em `http://localhost:3000`.\n\n## Dependências\n\nO projeto depende das seguintes bibliotecas:\n\n- `node:fs/promises`: biblioteca para leitura e escrita de arquivos no formato JSON\n- `node:crypto`: biblioteca para geração de IDs únicos\n- `http`: biblioteca para criação de servidor HTTP\n\n## Estrutura do Projeto\n\nA estrutura de pastas e arquivos do projeto é a seguinte:\n\n- `src`: pasta com o código fonte da aplicação\n  - `middlewares`: pasta com middlewares utilizados pela aplicação\n    - `json.js`: middleware para tratar o corpo da requisição como JSON\n  - `utils`: pasta com utilitários utilizados pela aplicação\n    - `build-route-path.js`: utilitário para construção de rotas\n    - `extract-query-params.js`: utilitário para extrair parâmetros de consulta da URL\n  - `database.js`: arquivo que define a classe `Database`, responsável por realizar operações na base de dados\n  - `routes.js`: arquivo que define as rotas da aplicação\n  - `server.js`: arquivo que cria o servidor HTTP e define suas rotas\n- `streams`: O diretório streams contém quatro arquivos que demonstram o uso de streams em Node.js\n  - **basics.js:** O arquivo basics.js define três classes de stream:\n    - `onetohundred`: uma implementação de um stream legível que gera números de 1 a 100 em intervalos de 1 segundo.\n    - `inv`: uma implementação de um stream transformável que inverte o sinal dos números recebidos.\n    - `multi`: uma implementação de um stream gravável que multiplica os números recebidos por 10 e os exibe no console.\n  - **buffers.js:** O arquivo buffers.js define uma variável buffer que contém a string 'ok' em um buffer e exibe o resultado da conversão do buffer em JSON.\n  - **fake-upload.js:** O arquivo fake-upload.js define uma variável buffer que contém a string 'ok' em um buffer e exibe o resultado da conversão do buffer em JSON.\n  - **http-server.js:** O arquivo http-server.js define uma classe inv que inverte o sinal dos números recebidos em um stream. O arquivo também define um servidor HTTP que recebe dados de entrada do cliente, inverte o sinal dos números recebidos usando a classe inv e retorna o resultado invertido para o cliente.\n\n- `package.json`: arquivo que define as informações do projeto, incluindo suas dependências\n- `package-lock.json`: arquivo gerado automaticamente pelo npm para controle de versão das dependências\n\n## Modelagem de Dados\n\nA base de dados da aplicação está armazenada no arquivo `db.json` na pasta `stream`. A base de dados consiste em uma lista de usuários, onde cada usuário é representado por um objeto com os seguintes campos:\n\n- `id`: identificador único do usuário, gerado automaticamente pela aplicação\n- `name`: nome do usuário\n- `email`: endereço de e-mail do usuário\n\n## Rotas HTTP\n\nA aplicação conta com as seguintes rotas:\n\n- `GET /users`: retorna uma lista de usuários da base de dados. Aceita um parâmetro de consulta `search`, que pode ser utilizado para buscar usuários pelo nome ou pelo e-mail.\n- `POST /users`: adiciona um novo usuário à base de dados. O corpo da requisição deve conter os campos `name` e `email` do novo usuário.\n- `PUT /users/:id`: atualiza um usuário existente na base de dados. O ID do usuário deve ser informado na URL da requisição. O corpo da requisição deve conter os campos `name` e `email` atualizados.\n- `DELETE /users/:id`: deleta um usuário existente na base de dados. O ID do usuário deve ser informado na URL da requisição.\n\n## Observações\n\n- Ao executar o servidor pela primeira vez, será criado automaticamente o arquivo `db.json` na pasta `stream`, caso ele não exista.\n- A classe `Database` utiliza a biblioteca `node:fs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ft0malexander%2Fnodejs-basics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ft0malexander%2Fnodejs-basics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ft0malexander%2Fnodejs-basics/lists"}