Folder Structure

The Final Tree

shopease-api/
├── prisma/
│   ├── schema.prisma
│   ├── migrations/
│   └── seed.ts
├── src/
│   ├── main.ts                      # helmet, CORS, versioning, ValidationPipe, Swagger, shutdown hooks
│   ├── app.module.ts                # imports + APP_GUARD/APP_FILTER/APP_INTERCEPTOR
│   ├── config/                      # env.validation.ts, database.config.ts, ...
│   ├── common/
│   │   ├── decorators/              # current-user, public, roles, auth (applyDecorators)
│   │   ├── dto/                     # pagination-query.dto.ts, page-meta.dto.ts
│   │   ├── filters/                 # all-exceptions.filter.ts, prisma-exception.filter.ts
│   │   ├── guards/                  # roles.guard.ts
│   │   ├── interceptors/            # transform, timing, timeout
│   │   ├── middleware/              # request-id, logger
│   │   └── pipes/                   # slug.pipe.ts
│   ├── prisma/                      # prisma.module.ts, prisma.service.ts
│   ├── auth/                        # strategies/, dto/, auth.service.ts, otp.service.ts
│   ├── users/
│   ├── categories/
│   ├── products/                    # dto/, products.controller.ts, products.service.ts, *.spec.ts
│   ├── cart/
│   ├── orders/                      # orders.gateway.ts, exceptions/, dto/
│   ├── payments/                    # razorpay.service.ts, webhooks.controller.ts
│   ├── notifications/               # emails.processor.ts, sms.module.ts
│   ├── tasks/                       # cron jobs
│   └── health/
├── test/                            # *.e2e-spec.ts, jest-e2e.json
├── Dockerfile
├── docker-compose.yml
├── ecosystem.config.js
└── .github/workflows/api.yml