NestJS + Prisma + MySQL backend with JWT auth, RBAC (ADMIN, TEACHER, STUDENT), and real-time chat via Socket.IO.
- NestJS (REST + WebSockets)
- Prisma ORM (MySQL)
- JWT auth (access + refresh)
- RBAC guards and decorators
- Validation with class-validator
- Swagger at
/api/docs
- Copy env and configure
cp .env.example .env
Edit .env:
- DATABASE_URL: mysql connection string
- JWT_ACCESS_SECRET / JWT_REFRESH_SECRET: strong secrets
- Install deps
npm install
- Prisma
npx prisma generate
npx prisma migrate dev --name init
- Seed demo data
npm run db:seed
Creates:
- admin@example.com / AdminPass123!
- teacher@example.com / TeacherPass123!
- student@example.com / StudentPass123! And an assignment + example group/messages.
- Run
npm run start:dev
Visit:
- POST
/api/auth/login-> { accessToken, refreshToken } - POST
/api/auth/refresh-> { accessToken } - POST
/api/auth/logout(JWT) -> { success: true }
- ADMIN endpoints under
/api/admin/** - TEACHER endpoints under
/api/teacher/** - STUDENT endpoints under
/api/student/**
- Private chat between assigned teacher/student (persisted)
- Group chat owned by teacher with members
- Read receipts via
readAtand WS events - REST history endpoints under
/api/chat/** - WebSocket events:
joinGroup,sendMessage,markPrivateRead,markGroupRead,receiveMessage
E2E tests (Supertest/Jest) are scaffolded under test/. They assume a reachable DB and optionally seeded data. Configure .env for test database or provide env vars to the test process. Run:
npm run test:e2e
npm run prisma:migrate– dev migrationsnpm run prisma:deploy– deploy migrationsnpm run prisma:generate– generate clientnpm run db:seed– run seed (uses ts-node)npm run test,npm run test:e2e
- Users are soft-deleted via
deletedAt. - Pagination supported with
pageandlimitquery params. - Swagger examples added for Auth endpoints; extend similarly for others as needed.