{"id":42273098,"url":"https://github.com/coder7475/school_management_apis","last_synced_at":"2026-01-27T07:30:42.427Z","repository":{"id":311708296,"uuid":"1044671107","full_name":"coder7475/school_management_apis","owner":"coder7475","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-26T05:06:12.000Z","size":132,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-26T05:36:29.160Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/coder7475.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-26T03:32:32.000Z","updated_at":"2025-08-26T04:30:47.000Z","dependencies_parsed_at":"2025-08-26T05:48:02.926Z","dependency_job_id":null,"html_url":"https://github.com/coder7475/school_management_apis","commit_stats":null,"previous_names":["coder7475/school_management_apis"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/coder7475/school_management_apis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fschool_management_apis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fschool_management_apis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fschool_management_apis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fschool_management_apis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coder7475","download_url":"https://codeload.github.com/coder7475/school_management_apis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fschool_management_apis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28808012,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T07:14:39.408Z","status":"ssl_error","status_checked_at":"2026-01-27T07:14:39.098Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2026-01-27T07:30:41.856Z","updated_at":"2026-01-27T07:30:42.423Z","avatar_url":"https://github.com/coder7475.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://nestjs.com/\" target=\"blank\"\u003e\n    \u003cimg src=\"https://nestjs.com/img/logo-small.svg\" width=\"120\" alt=\"Nest Logo\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch2 align=\"center\"\u003e📘 School Management API\u003c/h2\u003e\n\n\u003cp align=\"center\"\u003e\n  A modular \u003ca href=\"http://nodejs.org\" target=\"_blank\"\u003eNode.js\u003c/a\u003e REST API built with \u003ca href=\"http://nestjs.com/\"\u003eNestJS\u003c/a\u003e, \n  \u003ca href=\"https://orm.drizzle.team/\"\u003eDrizzle ORM\u003c/a\u003e, and \u003ca href=\"https://www.postgresql.org/\"\u003ePostgreSQL\u003c/a\u003e.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@nestjs/core\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@nestjs/core.svg\" alt=\"NPM Version\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@nestjs/core\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/@nestjs/core.svg\" alt=\"License\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/G7Qnnhy\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/discord-online-brightgreen.svg\" alt=\"Discord\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://twitter.com/nestframework\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/nestframework.svg?style=social\u0026label=Follow\" alt=\"Follow NestJS on Twitter\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 📖 Description\n\nThis project implements a **Mini School Management API** with:\n\n- ✅ **Authentication \u0026 Authorization** using JWT + role-based guards (`admin`, `teacher`, `student`)\n- ✅ **Students \u0026 Classes Management** with enrollments\n- ✅ **PostgreSQL + Drizzle ORM** for schema \u0026 migrations\n- ✅ **Validation** using `class-validator` DTOs\n- ✅ **Secure Cookies** for access/refresh tokens\n- ✅ **Optional Docker setup** for database\n\n---\n\n## 🚀 Getting Started\n\n### 1. Clone \u0026 Install\n\n```bash\ngit clone https://github.com/\u003cyour-repo\u003e/school-management-api.git\ncd school-management-api\npnpm install\n```\n\n### 2. Run Database (Postgres with Docker)\n\n```bash\ndocker compose up -d\n```\n\n### 3. Database Management (Drizzle ORM)\n\nGenerate schema \u0026 migrations:\n\n```bash\npnpm drizzle-kit generate\npnpm drizzle-kit migrate\npnpm drizzle-kit studio\n```\n\nSeed database with dummy data:\n\n```bash\npnpm run db:seed\n```\n\n### 4. Start Server\n\n```bash\n# development\npnpm run start:dev\n\n# production\npnpm run start:prod\n```\n\nAPI will be available at:\n👉 `http://localhost:3000/api`\n\n---\n\n## 🏗️ Database\n\n### ER Diagram\n\n![ER_diagram](./er_diagram.png)\n\n- `users` – Authentication + roles (admin, teacher, student)\n- `students` – Student records\n- `classes` – Class records\n\n---\n\n## ⚡ API Endpoints (Highlights)\n\n### Auth Module\n\n- `POST /auth/signup` – Register user (admin/teacher/student)\n- `POST /auth/login` – Login and receive JWT tokens\n- `POST /auth/refresh` – Refresh access token\n- `POST /auth/logout` – Logout and clear cookies\n- `GET /auth/me` – Get logged-in user\n\n### Student Module\n\n- `POST /students` – Create student (admin only)\n- `GET /students` – List students (admin/teacher)\n- `GET /students/:id` – Get student details\n\n### Class Module\n\n- `POST /classes` – Create class (admin only)\n- `POST /classes/:id/enroll` – Enroll student in class (admin/teacher)\n- `GET /classes/:id/students` – List students in a class (admin/teacher)\n\n---\n\n## 🔒 Authentication \u0026 Security\n\n- **JWT Access Token** (15 min expiry) stored in `httpOnly` cookie\n- **Refresh Token** (7 days expiry) stored in `httpOnly` cookie\n- **Role-based guards** restrict endpoints to `admin`, `teacher`, or `student`\n- **Password hashing** with bcrypt (saltRounds = 10)\n\n---\n\n## 🛠️ Development Tools\n\n### Generate Module/Resource (no tests)\n\n```bash\nnest g res \u003cmodule_name\u003e --no-spec\n```\n\nExample:\n\n```bash\nnest g res auth --no-spec\n```\n\n### 🧪 API Testing\n\n- Download and import the [Postman Collection](./Mini%20School%20Management%20API.postman_collection.json) to try out all endpoints quickly.\n- Make sure to set the `baseUrl` environment variable in Postman to `http://localhost:3000/api` (or your deployed [URL](https://school-management-apis.vercel.app/)).\n- Auth endpoints require no token, but most others require a valid JWT (see Auth section above).\n\n### 📖 API Documentation\n\n- Interactive Swagger UI available at: [http://localhost:3000/api/docs](http://localhost:3000/api/docs)\n- Explore all endpoints, schemas, and try requests directly from the browser.\n\n---\n\n## 📚 Resources\n\n- [NestJS Docs](https://docs.nestjs.com)\n- [Drizzle ORM Docs](https://orm.drizzle.team/)\n- [PostgreSQL Docs](https://www.postgresql.org/docs/)\n\n---\n\n## 📜 License\n\nThis project is [MIT licensed](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoder7475%2Fschool_management_apis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoder7475%2Fschool_management_apis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoder7475%2Fschool_management_apis/lists"}