{"id":31741202,"url":"https://github.com/isaquedasilva/expense-tracker-api","last_synced_at":"2026-05-08T14:02:10.824Z","repository":{"id":315469081,"uuid":"1058911015","full_name":"isaqueDaSilva/Expense-Tracker-API","owner":"isaqueDaSilva","description":"API designed to simplify expense tracking, offering categorization, filtering and secure authentication.","archived":false,"fork":false,"pushed_at":"2025-10-06T17:59:53.000Z","size":118,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-06T19:28:46.899Z","etag":null,"topics":["expense-tracker","jwt-authentication","neon-postgres","node-js","postgresql","refresh-token","typescript"],"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/isaqueDaSilva.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-17T18:04:41.000Z","updated_at":"2025-10-06T17:59:56.000Z","dependencies_parsed_at":"2025-10-06T19:20:00.420Z","dependency_job_id":"992ef16c-10b5-4450-9d04-bc5529dd3718","html_url":"https://github.com/isaqueDaSilva/Expense-Tracker-API","commit_stats":null,"previous_names":["isaquedasilva/expense-tracker-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/isaqueDaSilva/Expense-Tracker-API","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaqueDaSilva%2FExpense-Tracker-API","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaqueDaSilva%2FExpense-Tracker-API/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaqueDaSilva%2FExpense-Tracker-API/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaqueDaSilva%2FExpense-Tracker-API/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isaqueDaSilva","download_url":"https://codeload.github.com/isaqueDaSilva/Expense-Tracker-API/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaqueDaSilva%2FExpense-Tracker-API/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001275,"owners_count":26083040,"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-10-09T02:00:07.460Z","response_time":59,"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":["expense-tracker","jwt-authentication","neon-postgres","node-js","postgresql","refresh-token","typescript"],"created_at":"2025-10-09T10:49:14.111Z","updated_at":"2026-05-08T14:02:10.787Z","avatar_url":"https://github.com/isaqueDaSilva.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Expense Tracker API 💰\n\n![typescript][TYPESCRIPT__BADGE]\n![node][NODE__BADGE]\n![postgres][POSTGRES__BADGE]\n\n[TYPESCRIPT__BADGE]: https://img.shields.io/badge/typescript-D4FAFF?style=for-the-badge\u0026logo=typescript\n[NODE__BADGE]: https://img.shields.io/badge/Node.js-43853D?style=for-the-badge\u0026logo=node.js\u0026logoColor=white\n[POSTGRES__BADGE]: https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white\n\n\u003cp align=\"center\"\u003e\n \u003ca href=\"#about\"\u003eAbout\u003c/a\u003e • \n \u003ca href=\"#started\"\u003eStarting\u003c/a\u003e • \n \u003ca href=\"#routes\"\u003e API Routes\u003c/a\u003e •\n \u003ca href=\"#tech\"\u003eTechnologies\u003c/a\u003e •\n \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch2 id=\"about\"\u003e📌 About\u003c/h2\u003e\n\nThe Expense Tracker API is a RESTful service designed to help users efficiently manage and monitor their personal or business finances. It offers features for tracking expenses and categorizing spending.\n\nThis project is my solution for [Expense tracker](https://roadmap.sh/projects/expense-tracker-api) from roadmap.sh website.\n\n\u003ch2 id=\"started\"\u003e🚀 Starting\u003c/h2\u003e\n\n### Pre-requirements\n\n- [Node.js](https://nodejs.org/) (v22 or above)\n- [Neon Database](https://neon.com)\n- [TypeScript](https://www.typescriptlang.org/)\n\n### Instalação\n\n1. Clone the repository\n```bash\ngit clone https://github.com/isaqueDaSilva/Expense-Tracker-API.git\ncd Expense-Tracker-API\n```\n\n2. Install Dependencies\n```bash\nnpm install\n```\n\n3. Configure environment variables\nCreate a \\`.env\\` file on root of the project based on \\`.env.example\\`:\n\n```env\nDATABASE_URL=postgres://your_user:your_password@localhost:5432/expense_tracker\nPORT=3000\nHOSTNAME='127.0.0.1'\nJWT_ACCESS_SECRET=secret_for_access_jwt_token\nJWT_REFRESH_SECRET=secret_for_refresh_jwt_token\nJWT_ISSUER=secret_for_jwt_issuer_identifier\n```\n\n4. Perform database migrations\n```bash\nnpm run migrate\n```\n\n5. Start server\n```bash\nnpm run build\n```\n\n\u003ch2 id=\"routes\"\u003e📍 API Routes\u003c/h2\u003e\n\n### Authentication\n\n| Route | Method | Description |\n|------|--------|-----------|\n| /auth/signup | POST | Create a new account |\n| /auth/signin | POST | Log in |\n| /token/verify | GET | Verify access token |\n| /token/refresh | PUT | Refresh access token |\n| /auth/signout | DELETE | Log out |\n| /auth/delete-account | DELETE | Deletes user account\n\n### Categories\n\n| Route | Method | Description |\n|------|--------|-----------|\n| /category/create | POST | Create a new category |\n| /category/all/:page | GET | List categories (paginated) |\n| /category/get/:id | GET | Get a category by ID |\n| /category/:id/update | PATCH | Updates a category |\n| /category/:id/delete | DELETE | Deletes a category |\n\n### Expenses\n\n| Route | Method | Description |\n|------|--------|-----------|\n| /task/create | POST | Creates a new expense |\n| /task/all/:page | GET | List expenses (paginated) |\n| /task/all/:category/:page | GET | List expenses by categories (paginated) |\n| /task/byDate/:page | GET | List expenses by date range (paginated) |\n| /task/get/:id | GET | Gets an expense by ID |\n| /task/update/:id | PATCH | updates an expense |\n| /task/:id/delete | DELETE | deletes an expense |\n\n\u003ch3\u003eRequest Examples\u003c/h3\u003e\n\n#### Creates a new expense\n```json\nPOST /task/create\n{\n    \"title\": \"Monthly Purchases\",\n    \"description\": \"Monthly market\",\n    \"value\": 500.00,\n    \"date\": \"2025-10-06\",\n    \"category\": \"category-uuid\"\n}\n```\n\n#### Creates a new Category\n```json\nPOST /category/create\n{\n    \"title\": \"Food\"\n}\n```\n\n\u003ch2 id=\"tech\"\u003e🛠 Technologies\u003c/h2\u003e\n\n- TypeScript\n- Node.js\n- PostgreSQL (via Neon Serverless)\n- Zod (Validations)\n- JSON Web Token (Authentication)\n- bcrypt (password hash)\n\n\u003ch2 id=\"features\"\u003e⭐ Features\u003c/h2\u003e\n\n- ✅ Secure authentication with JWT\n- ✅ Complete expense and category CRUD\n- ✅ Expense categorization\n- ✅ Date and category filters\n- ✅ Results pagination\n- ✅ Standard category system\n- ✅ Robust data validation\n- ✅ Route protection\n- ✅ Token refresh\n\n### Security\n\n- Passwords stored with bcrypt hash\n- JWT tokens with expiration\n- Token refresh system\n- Data validation with Zod\n- SQL injection protection\n- Token deactivation system\n\n### Data Model\n\n- **Users**: Account Management\n- **Categories**: Expense Management\n- **Expenses**: Expense Tracking\n- **Tokens**: Session Control\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisaquedasilva%2Fexpense-tracker-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisaquedasilva%2Fexpense-tracker-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisaquedasilva%2Fexpense-tracker-api/lists"}