{"id":16976701,"url":"https://github.com/viniciuscestarii/gympassback","last_synced_at":"2026-04-07T07:46:47.196Z","repository":{"id":189936984,"uuid":"681320594","full_name":"ViniciusCestarii/GymPassBack","owner":"ViniciusCestarii","description":"🏋️‍♂️ Gym Pass is an application that enables users to conveniently check in to registered gyms.  Made with Node.js, Fastify, Prisma, Docker, Vite and more!","archived":false,"fork":false,"pushed_at":"2024-01-03T20:38:24.000Z","size":592,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-10T03:38:40.367Z","etag":null,"topics":["api-rest","automated-testing","best-practices","docker","nodejs","postgresql","prisma","solid","tdd"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ViniciusCestarii.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-08-21T18:52:59.000Z","updated_at":"2024-06-17T16:38:09.000Z","dependencies_parsed_at":"2025-01-31T17:02:13.977Z","dependency_job_id":null,"html_url":"https://github.com/ViniciusCestarii/GymPassBack","commit_stats":null,"previous_names":["viniciuscestarii/gympassback"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ViniciusCestarii/GymPassBack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViniciusCestarii%2FGymPassBack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViniciusCestarii%2FGymPassBack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViniciusCestarii%2FGymPassBack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViniciusCestarii%2FGymPassBack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ViniciusCestarii","download_url":"https://codeload.github.com/ViniciusCestarii/GymPassBack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViniciusCestarii%2FGymPassBack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31504897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["api-rest","automated-testing","best-practices","docker","nodejs","postgresql","prisma","solid","tdd"],"created_at":"2024-10-14T01:26:59.896Z","updated_at":"2026-04-07T07:46:47.163Z","avatar_url":"https://github.com/ViniciusCestarii.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gym Pass 🏋️\n\n## ❓ What's Gym Pass\n\n Gym Pass is an application that enables users to conveniently check in to registered gyms using their mobile phones. The check-in process is validated by the respective gym to ensure accuracy and security. Furthermore, users have the option to search for nearby gyms, view the number of check-ins to stay motivated. Gyms interested in joining the platform simply need to sign up.\n\nThis project is the Server Side of Gym Pass containing:\n\n- API for all the entities of the application\n- End to end and unitary tests\n- Auth using JWT token\n- SOLID principles\n- Business rules\n\n## 👨‍💻 What makes up Gym Pass\n\nFindAFriend Back was made using:\n\n- **Node.js:** JavaScript runtime for server-side execution.\n- **Fastify:** Lightweight web framework for efficient API development.\n- **Vite:** Used for end-to-end (e2e) and unit testing in the project.\n- **Prisma:** Node.js and TypeScript ORM for simplified database interaction.\n- **Docker:** Container platform for streamlined application packaging and deployment.\n\n## 💻 How to install in your machine\n\nRequired to install and setup:\n- Git\n- Node.js\n- Docker\n\n1. install the above dependecies\n2. clone this repository in your machine using: `git clone https://github.com/ViniciusCestarii/GymPassBack.git`\n3. in root of the project run: `npm i`\n4. in root of the project create a .env file and add this:\n   ```\n   DATABASE_URL=\"postgresql://docker:docker@localhost:5432/apisolid?schema=public\"\n   NODE_ENV=dev\n   JWT_SECRET=supersecret\n   ```\n5. install bitnami/postgresql image and create new container using:\n   ```\n   docker run --name apisolid -e POSTGRESQL_USERNAME=docker -e POSTGRESQL_PASSWORD=docker -e POSTGRESQL_DATABASE=apisolid -p 5432:5432 bitnami/postgresql\n   ```\n   or using:\n   ```\n   docker compose up -d\n   ```\n7. in root of the project run: `npm run prisma migrate dev`\n8. in root of the project run: `npm run dev`\n9. now your server is running on default port 3333, just acess localhost: http://localhost:3333 and enjoy!\n\n### For development i made some extra commands:\n- test end to end\n`npm run test:e2e`\n\n- unitary test\n`npm run test`\n\n5123r52we3rfwq \n## ✅ Requirements and Business Rules met\n\n- [x] Able to register\n\n- [x] Able to authenticate\n\n- [x] Able to get user perfil\n\n- [x] Able to get the number of check-ins of the user\n\n- [x] Able to user get user check-ins historic\n\n- [x] Able to user search for near gyms\n\n- [x] Able to user search gyms for name\n\n- [x] Able to user check-in in a gym\n\n- [x] Able to validate user gym check-in\n\n- [x] Able to register gyms\n\n## Business rules RNs (Regras de negócio) (condições ao requisito funcional)\n\n- [x] User can't be hable to register with a duplicated e-mail\n\n- [x] User can't be able to check-in twice in the same day\n\n- [x] User can't be able to check-in if they aren't near a gym (100m)\n\n- [x] User check-in can only be validated until 20 minutes after it had been created\n\n- [x] User check-in can only be validated by admin\n\n- [x] Gyms can only be registered in by admin\n\n## Non-functional requirement RNFs (Requisitos não-funcionais) (técnico)\n\n- [x] User password needs to be encrypted\n\n- [x] Application data needs to be in a PostgreSQL bank\n\n- [x] All the data lists need to be paginated with 20 itens per page\n\n- [x] User needs to be indentified by a JWT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviniciuscestarii%2Fgympassback","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fviniciuscestarii%2Fgympassback","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviniciuscestarii%2Fgympassback/lists"}