How bharath3312/crowdfunding_backend works
Purpose and runtime
This is a Node.js backend API organized around authentication, users, and MongoDB-backed domain models. The runtime bootstraps application configuration, logging, database connectivity, middleware, and HTTP server startup through src/server.js, src/app.js, and src/config/mongo.database.js.
Application composition and entry points
src/server.js is the process entry point and delegates HTTP application setup to src/app.js. The app layer is responsible for assembling route modules and cross-cutting middleware. Environment-derived configuration is centralized in src/config/env.js; logging configuration and output streams are defined in src/config/logger.js and src/config/logger.streams.js.
HTTP routing and controller boundary
Route modules expose the public API surface: authentication endpoints are defined in src/routes/auth.route.js, while user endpoints are defined in src/routes/user.route.js. Controllers translate HTTP request/response concerns into service calls, with authentication handling located in src/controllers/auth.controller.js. This separates transport behavior from business logic.
Authentication and user workflow
Authentication logic is implemented in src/services/auth.service.js, supported by password/encryption and JWT utilities in src/utils/encryption.js and src/utils/jwt.js. Protected routes pass through src/middlewares/auth.middleware.js, which forms the security boundary between externally supplied credentials and trusted application context. User-oriented business operations belong in src/services/user.service.js.
Persistence layer and domain models
MongoDB is the persistence infrastructure, configured via src/config/mongo.database.js. Mongoose-style domain entities include users and campaigns in src/models/user.js and src/models/campaign.js, with aggregation/export wiring in src/models/index.js. src/repositories/base.repo.js establishes a reusable persistence abstraction, intended to keep data-access concerns outside services and controllers.
Request lifecycle, validation, and errors
Incoming requests are logged by src/middlewares/requestLogger.middleware.js, validated through src/middlewares/validate.middleware.js using rules in src/validations/model.validation.js, then routed to controllers/services. Async failures are normalized through src/utils/asyncHandler.js, while unknown routes and application errors terminate in src/middlewares/notFound.middleware.js and src/middlewares/errorHandler.middleware.js. Responses and failures use shared contracts from src/utils/apiResponse.js and src/utils/apiError.js.
Main entry points: app.js App composition · auth.service.js Auth service · server.js Server entry · auth.route.js Auth routes
Components 18
Runtime & config
- Server entry
src/server.js - App composition · Assembles middleware and route modules.
src/app.js - Environment config
src/config/env.js - Logging
src/config/logger.js
HTTP API
- Request logger
src/middlewares/requestLogger.middleware.js - Request validation
src/middlewares/validate.middleware.js - Auth routes
src/routes/auth.route.js - User routes
src/routes/user.route.js - Auth guard · Establishes trusted context for protected routes.
src/middlewares/auth.middleware.js - Auth controller
src/controllers/auth.controller.js - Error handling · Handles unknown routes and application failures.
src/middlewares/errorHandler.middleware.js
Domain & security
- Auth service
src/services/auth.service.js - User service
src/services/user.service.js - Encryption
src/utils/encryption.js - JWT utility
src/utils/jwt.js
Persistence
- MongoDB connection
src/config/mongo.database.js - Base repository · Keeps data access outside services.
src/repositories/base.repo.js - Domain models · Exports user and campaign entities.
src/models/index.js
Connections 21
- Server entry → App composition: starts
- Server entry → MongoDB connection: connects
- Environment config → Server entry: configures
- Environment config → MongoDB connection: configures
- Logging → Request logger: writes request logs
- App composition → Request logger: registers
- App composition → Request validation: registers
- App composition → Auth routes: mounts
- App composition → User routes: mounts
- App composition → Error handling: terminates failures
- Auth routes → Auth controller: dispatches
- User routes → Auth guard: protects
- Auth controller → Auth service: calls
- Auth service → Encryption: hashes passwords
- Auth service → JWT utility: issues tokens
- Auth guard → JWT utility: verifies token
- Auth service → Base repository: persists through
- User service → Base repository: persists through
- Base repository → Domain models: uses
- Domain models → MongoDB connection: stores in
- Request validation → Auth routes: validates requests