{"id":30766611,"url":"https://github.com/maxcharm093/planwear-backend","last_synced_at":"2026-04-09T01:32:07.345Z","repository":{"id":311504252,"uuid":"1043845572","full_name":"maxcharm093/planwear-backend","owner":"maxcharm093","description":"Manage appointments \u0026 organize schedules application. NestJS / PostgreSQL / TypeORM / GraphQL / Identity \u0026 Access Management","archived":false,"fork":false,"pushed_at":"2025-08-24T18:45:30.000Z","size":1796,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-04T19:41:34.359Z","etag":null,"topics":["graphql","jest","jwt","nestjs","passport","postgres","typeorm"],"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/maxcharm093.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":"2025-08-24T18:31:34.000Z","updated_at":"2025-08-24T18:53:29.000Z","dependencies_parsed_at":"2025-08-25T00:33:31.545Z","dependency_job_id":null,"html_url":"https://github.com/maxcharm093/planwear-backend","commit_stats":null,"previous_names":["maxcharm093/planwear-backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maxcharm093/planwear-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxcharm093%2Fplanwear-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxcharm093%2Fplanwear-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxcharm093%2Fplanwear-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxcharm093%2Fplanwear-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxcharm093","download_url":"https://codeload.github.com/maxcharm093/planwear-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxcharm093%2Fplanwear-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31581864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"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":["graphql","jest","jwt","nestjs","passport","postgres","typeorm"],"created_at":"2025-09-04T19:30:34.628Z","updated_at":"2026-04-09T01:32:07.325Z","avatar_url":"https://github.com/maxcharm093.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://nestjs.com/\" target=\"blank\"\u003e\u003cimg src=\"https://nestjs.com/img/logo-small.svg\" width=\"120\" alt=\"Nest Logo\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Current status\n\n**Work in progress** - pre-alpha stage!!! Last days was very effective, let's dive in:\n\n- [x] Identity and Access Management\n\nEnterprise-grade IAM module was created. Build up entirely using JWT identity \u0026 access management module offers guards for protecting routes, user and roles decorators, refresh tokens, invalidating tokens using REDIS, nad Role-Based Access Control. Future DLC will include:\n\n- [ ] Policy-Based Authorization, which will replace RBAC\n- [ ] API Keys for additional features\n- [ ] 2FA\n- [ ] Sessions with Passport, and again using REDIS\n\nAdditional work done in march:\n\n- [x] GraphQL implementation (almost everywhere, but not final yet)\n\nInstead of classic REST API, were was problems like under \u0026 over-fetching. GraphQL also is strongly typed, so this is an another win for application.\n\n- [x] Swagger was removed\n\nIt's not needed with GraphQL.\n\n- [x] Transition from NestJS version 7.x to 11.x\n\nSmooth AF.\n\n## Description\n\nRest API application for PlanWEAR (Manage appointments \u0026 organize schedules), build in [Nest](https://github.com/nestjs/nest) framework.\n\n## Deployment\n\nCheck out [Mau](https://mau.nestjs.com), official platform for deploying NestJS applications on AWS.\n\n## Database Structure\n\n**Work in progress** - nothing final yet, nightly tweaks are made!!! Diagram may not represent current entities model.\n\n![PostgreSQL Database Structure](public/db-diagram.png)\n\n## Project Graph [Modules]\n\n![Modules Graph](public/modules-graph.png)\n\n## External services\n\nPlanWEAR application will be used [Twilio](https://www.twilio.com/) external communication API as SMS provider. The following environmental variables are required:\n\n- TWILIO_ACCOUNT_SID\n- TWILIO_AUTH_TOKEN\n\nIf you don't want register Twilio account right now, you may want to remove/comment following block of code in src/app.module.ts:\n\n```typescript\n    TwilioModule.forRootAsync({\n      useFactory: (configService: ConfigService) =\u003e ({\n        accountSid: configService.get('TWILIO_ACCOUNT_SID'),\n        authToken: configService.get('TWILIO_AUTH_TOKEN'),\n      }),\n      inject: [ConfigService],\n    }),\n```\n\nImportant: Twilio credentials, while not neccessary needed at the moment, **will be required** in near future.\n\n## Entities\n\n- [x] Abstract (extends other entities with id [uuid], createdAt \u0026 updatedAt fields)\n- [x] Appointment\n- [x] Article\n- [x] BillingAddress\n- [x] Comment\n- [x] Company\n- [x] Country\n- [x] Event\n- [x] Photo\n- [x] ProductCategory\n- [x] Product\n- [x] Schedule\n- [x] ServiceCategory\n- [x] ServicesBooked\n- [x] ServicesProvided\n- [x] Service\n- [x] Tag\n- [x] Token\n- [x] User\n\n## Migrations\n\nNot set-up yet, work in progress. TypeORM synchronize option is set to true - development mode ONLY, not suited for production!!!\n\n## Installation\n\n```bash\n$ pnpm install\n```\n\n## Docker\n\n```bash\n$ docker-compose up -d\n```\n\n## Stay in touch\n\nAuthor - lukasz [dot] skowron [at] gmail.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxcharm093%2Fplanwear-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxcharm093%2Fplanwear-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxcharm093%2Fplanwear-backend/lists"}