{"id":21933915,"url":"https://github.com/pabloxt14/nlw-journey-node","last_synced_at":"2026-03-15T09:09:13.116Z","repository":{"id":247510384,"uuid":"826000102","full_name":"PabloXT14/nlw-journey-node","owner":"PabloXT14","description":"Esta é a API da aplicação de nome Plann.er, a qual consiste em um sistema de planejamento de viagens, na qual você pode montar planos de viagens com amigos, registrar atividades, adicionar links úteis sobre a viagem, entre diversas outras funcionalidades.","archived":false,"fork":false,"pushed_at":"2024-07-11T07:35:54.000Z","size":1426,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-12T23:51:11.210Z","etag":null,"topics":["dayjs","fastify","nodejs","nodemailer","prisma","typescript","zod"],"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/PabloXT14.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":"2024-07-08T23:20:43.000Z","updated_at":"2024-07-31T07:00:51.000Z","dependencies_parsed_at":"2024-07-09T06:08:38.455Z","dependency_job_id":null,"html_url":"https://github.com/PabloXT14/nlw-journey-node","commit_stats":null,"previous_names":["pabloxt14/nlw-journey-node"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PabloXT14/nlw-journey-node","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloXT14%2Fnlw-journey-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloXT14%2Fnlw-journey-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloXT14%2Fnlw-journey-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloXT14%2Fnlw-journey-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PabloXT14","download_url":"https://codeload.github.com/PabloXT14/nlw-journey-node/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloXT14%2Fnlw-journey-node/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266409443,"owners_count":23924284,"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-07-21T11:47:31.412Z","response_time":64,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["dayjs","fastify","nodejs","nodemailer","prisma","typescript","zod"],"created_at":"2024-11-29T00:13:58.426Z","updated_at":"2025-12-25T09:43:09.794Z","avatar_url":"https://github.com/PabloXT14.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg\n    src=\".github/nlw-journey-logo.png\"\n    title=\"Logo NLW Journey\"\n    alt=\"Logo NLW Journey\"\n    width=\"64px\"\n  /\u003e\n  NLW Journey (Node)\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"GitHub language count\" src=\"https://img.shields.io/github/languages/count/pabloxt14/nlw-journey-node\"\u003e\n\n  \u003cimg alt=\"GitHub Top Language\" src=\"https://img.shields.io/github/languages/top/pabloxt14/nlw-journey-node\" /\u003e\n\n  \u003cimg alt=\"Repository size\" src=\"https://img.shields.io/github/repo-size/pabloxt14/nlw-journey-node\"\u003e\n  \n  \u003ca href=\"https://github.com/pabloxt14/nlw-journey-node/commits/master\"\u003e\n    \u003cimg alt=\"GitHub last commit\" src=\"https://img.shields.io/github/last-commit/pabloxt14/nlw-journey-node\"\u003e\n  \u003c/a\u003e\n    \n   \u003cimg alt=\"License\" src=\"https://img.shields.io/badge/license-MIT-blue\"\u003e\n\n   \u003ca href=\"https://github.com/pabloxt14/nlw-journey-node/stargazers\"\u003e\n    \u003cimg alt=\"Stargazers\" src=\"https://img.shields.io/github/stars/pabloxt14/nlw-journey-node?style=social\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003cimg src=\".github/cover.png\" alt=\"Capa do projeto\" /\u003e\n\u003c/p\u003e\n\n\u003ch4 align=\"center\"\u003e \n\t🚀 Aplicação finalizada 🚀\n\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n \u003ca href=\"#-about\"\u003eAbout\u003c/a\u003e | \n \u003ca href=\"#-routes\"\u003eRoutes\u003c/a\u003e | \n \u003ca href=\"#-setup\"\u003eSetup\u003c/a\u003e | \n \u003ca href=\"#-technologies\"\u003eTechnologies\u003c/a\u003e | \n \u003ca href=\"#-license\"\u003eLicense\u003c/a\u003e\n\u003c/p\u003e\n\n\n## 💻 About\n\nEsta é a API da aplicação de nome **Plann.er**, a qual consiste em um sistema de planejamento de viagens, na qual você pode montar planos de viagens com amigos, registrar atividades, adicionar links úteis sobre a viagem, entre diversas outras funcionalidades.\n\nEssa aplicação foi desenvolvida durante o evento **NLW Journey** da [Rocketseat](https://www.rocketseat.com.br/) utilizando principalmente tecnologias como `Node`, `TypeScript` e `Fastify`.\n\n\n\u003c!-- ## 🔗 Deploy\n\nO deploy da aplicação pode ser acessada através da seguinte URL base: https://pabloxt14-nlw-expert-notes.vercel.app/ --\u003e\n\n\n## ⛕ Routes\n\n### Trips Routes\n\n#### POST `/trips`\n\nCria uma nova viagem.\n\n##### Request body\n\n```json\n{\n  \"destination\": \"São Paulo\",\n  \"starts_at\": \"2024-08-01 18:00:00\",\n  \"ends_at\": \"2024-08-04 18:00:0\",\n  \"owner_name\": \"John Doe\",\n  \"owner_email\": \"johndoe@gmail.com\",\n  \"emails_to_invite\": [\n    \"pedrodoe@gmail.com\",\n    \"marydoe@gmail.com\",\n    \"sarahdoe@gmail.com\"\n  ]\n}\n```\n\n##### Response body\n\n```json\n{\n  \"tripId\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\"\n}\n```\n\n#### GET `/trips/:tripId`\n\nRetorna os detalhes de uma viagem.\n\n##### Response body\n\n```json\n{\n  \"trip\": {\n    \"id\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\",\n    \"destination\": \"Rio de Janeiro\",\n    \"starts_at\": \"2024-08-01T21:00:00.000Z\",\n    \"ends_at\": \"2024-08-04T21:00:00.000Z\",\n    \"is_confirmed\": true\n  }\n}\n```\n\n#### PUT `/trips/:tripId`\n\nAltera uma viagem.\n\n##### Request body\n\n```json\n{\n  \"destination\": \"Rio de Janeiro\",\n  \"starts_at\": \"2024-08-01 18:00:00\",\n  \"ends_at\": \"2024-08-04 18:00:0\"\n}\n```\n\n##### Response body\n\n```json\n{\n  \"tripId\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\"\n}\n```\n\n\n\n#### GET `/trips/:tripId/confirm`\n\nConfirma uma viagem.\n\n### Participants Routes\n\n#### POST `/trips/:tripId/invites`\n\nEnvia um convite a um participante para uma viagem.\n\n##### Request body\n\n```json\n{\n  \"email\": \"johndoe3@gmail.com\"\n}\n```\n\n##### Response body\n\n```json\n{\n  \"participantId\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\"\n}\n```\n\n#### GET `/trips/:tripId/participants`\n\nRetorna os participantes de uma viagem.\n\n##### Response body\n\n```json\n{\n  \"participants\": [\n    {\n      \"id\": \"a91c91e1-8cca-4649-88e8-91cdf143df22\",\n      \"name\": \"John Doe\",\n      \"email\": \"johndoe@gmail.com\",\n      \"is_confirmed\": true\n    },\n    {\n      \"id\": \"dce0de32-421a-4512-9580-21c75648350d\",\n      \"name\": null,\n      \"email\": \"marydoe@gmail.com\",\n      \"is_confirmed\": false\n    },\n    {\n      \"id\": \"d673c4eb-f39a-4de4-8617-ef23b3707693\",\n      \"name\": null,\n      \"email\": \"pedro@gmail.com\",\n      \"is_confirmed\": true\n    }\n  ]\n}\n```\n\n#### GET `/participants/:participantId`\n\nRetorna os detalhes de um participante.\n\n##### Response body\n\n```json\n{\n  \"participant\": {\n    \"id\": \"a91c91e1-8cca-4649-88e8-91cdf143df22\",\n    \"name\": \"John Doe\",\n    \"email\": \"johndoe@gmail.com\",\n    \"is_confirmed\": true\n  }\n}\n```\n\n#### GET `/participants/:participantId/confirm`\n\nConfirma um participante na viagem.\n\n### Activities Routes\n\n#### POST `/trips/:tripId/activities`\n\nCria uma atividade em uma viagem.\n\n##### Request body\n\n```json\n{\n  \"title\": \"Play\",\n  \"occurs_at\": \"2024-08-01 18:00:00\"\n}\n```\n\n##### Response body\n\n```json\n{\n  \"activityId\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\"\n}\n```\n\n#### GET `/trips/:tripId/activities`\n\nRetorna as atividades de uma viagem.\n\n##### Response body\n\n```json\n{\n  \"activities\": [\n    {\n      \"date\": \"2024-08-01T21:00:00.000Z\",\n      \"activities\": [\n        {\n          \"id\": \"6e444c9e-11b8-4b95-b5ff-73288f3c0b5e\",\n          \"title\": \"Play\",\n          \"occurs_at\": \"2024-08-01T22:00:00.000Z\",\n          \"trip_id\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\"\n        }\n      ]\n    },\n    {\n      \"date\": \"2024-08-02T21:00:00.000Z\",\n      \"activities\": [\n        {\n          \"id\": \"6e444c9e-11b8-4b95-b5ff-73288f3c0b5e\",\n          \"title\": \"Play\",\n          \"occurs_at\": \"2024-08-02T22:00:00.000Z\",\n          \"trip_id\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\"\n        }\n      ]\n    }\n  ]\n}\n```\n\n### Links Routes\n\n#### POST `/trips/:tripId/links`\n\nCria um link em uma viagem.\n\n##### Request body\n\n```json\n{\n  \"title\": \"Website\",\n  \"url\": \"https://www.rocketseat.com.br\"\n}\n```\n\n##### Response body\n\n```json\n{\n  \"linkId\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\"\n}\n```\n\n#### GET `/trips/:tripId/links`\n\nRetorna os links de uma viagem.\n\n##### Response body\n\n```json\n{\n  \"links\": [\n    {\n      \"id\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\",\n      \"title\": \"Website\",\n      \"url\": \"https://www.rocketseat.com.br\",\n      \"trip_id\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\"\n    },\n    {\n      \"id\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\",\n      \"title\": \"Website 2\",\n      \"url\": \"https://www.rocketseat2.com.br\",\n      \"trip_id\": \"f944daf7-e7e6-47a2-b050-1556d6a9e963\"\n    }\n  ]\n}\n```\n\n## ⚙ Setup\n\n### 📝 Requisites\n\nAntes de baixar o projeto você vai precisar ter instalado na sua máquina as seguintes ferramentas:\n\n* [Git](https://git-scm.com)\n* [NodeJS](https://nodejs.org/en/)\n* [NPM](https://www.npmjs.com/), [PNPM](https://pnpm.io/pt/) ou [Yarn](https://yarnpkg.com/) \n\nAlém disto é bom ter um editor para trabalhar com o código como [VSCode](https://code.visualstudio.com/)\n\nPara testar as rotas da aplicação você pode usar o cliente HTTP [Postman](https://www.postman.com/)\n\n### Cloning and Running\n\nPasso a passo para clonar e executar a aplicação na sua máquina:\n\n```bash\n# Clone este repositório\n$ git clone git@github.com:pabloxt14/nlw-journey-node.git\n\n# Acesse a pasta do projeto no terminal\n$ cd nlw-journey-node\n\n# Instale as dependências\n$ npm install\n\n# Crie o arquivo '.env' e preencha as variáveis conforme o arquivo '.env.example' \n\n# Execute as migrations para criar as tabelas necessários no banco\n$ npx prisma migrate-dev\n\n# Execute a aplicação em modo de desenvolvimento\n$ npm run dev\n\n# A aplicação inciará na porta que você configurou no arquivo '.env' \n```\n\n\n## 🛠 Technologies\n\nAs seguintes principais ferramentas foram usadas na construção do projeto:\n\n- **[TypeScript](https://www.typescriptlang.org/)**\n- **[Fastify](https://fastify.dev/)**\n- **[Prisma](https://www.prisma.io/)**\n- **[Zod](https://zod.dev/)**\n- **[Nodemailer](https://nodemailer.com/)**\n- **[DayJS](https://day.js.org/)**\n\n\u003e Para mais detalhes das dependências gerais da aplicação veja o arquivo [package.json](./package.json)\n\n\n## 📝 License\n\nEste projeto está sob a licença MIT. Consulte o arquivo [LICENSE](./LICENSE) para mais informações\n\n\u003cp align=\"center\"\u003e\n  Feito com 💜 por Pablo Alan 👋🏽 \u003ca href=\"https://www.linkedin.com/in/pabloalan/\" target=\"_blank\"\u003eEntre em contato!\u003c/a\u003e  \n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpabloxt14%2Fnlw-journey-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpabloxt14%2Fnlw-journey-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpabloxt14%2Fnlw-journey-node/lists"}