myex-cli
Version:
Opinionated Express.js framework with CLI tools
100 lines (81 loc) • 4.89 kB
Markdown
# Project Folder Structure
This document outlines the purpose and contents of each folder in the project.
## Root Structure
```
/project-root
├── /src # Source code
├── /deploy # Containerization and orchestration files
├── /test # Automated tests
├── /docs # Project documentation
├── .env # Environment variable configurations
├── package.json # Project dependencies and scripts
└── pm2.config.js # PM2 ecosystem configuration
```
## Source Code (`/src`)
```
/src
├── /config # Environment configurations, passport strategies, DB settings
├── /controllers # Handle incoming HTTP requests and responses
├── /middlewares # Custom middleware for authentication, logging, error handling
├── /models # MongoDB schema definitions (using Mongoose)
├── /routes # Express route definitions mapped to controllers
├── /security # Security configurations (Helmet, CORS, and related settings)
├── /services # Business logic that interacts with models and external APIs
├── /db # Database connection and initialization logic
├── /utils # Utility modules (e.g., logger setup with Winston)
└── app.js # Main Express app setup and middleware registration
```
### Key Components in `/src`:
- **config**: Contains environment-specific configurations, authentication strategies, and database settings.
- **controllers**: Contains logic for handling HTTP requests, validating inputs, and sending responses.
- **middlewares**: Contains custom Express middleware for authentication, request logging, error handling, etc.
- **models**: Contains Mongoose schema definitions for MongoDB documents.
- **routes**: Contains Express route definitions that map URLs to controller functions.
- **security**: Contains security-related configurations like Helmet (HTTP headers) and CORS.
- **services**: Contains business logic that interacts with models and external APIs.
- **db**: Contains database connection and initialization logic.
- **utils**: Contains utility functions and modules like the logger setup.
- **app.js**: Main application entry point that initializes Express and configures middleware.
## Deployment (`/deploy`)
```
/deploy
├── Dockerfile # Docker image configuration
├── docker-compose.yml # Multi-container configuration
└── /k8s # Kubernetes manifests
├── deployment.yaml # Kubernetes Deployment configuration
├── service.yaml # Kubernetes Service configuration
├── ingress.yaml # Kubernetes Ingress configuration
└── mongodb.yaml # MongoDB StatefulSet configuration
```
The `/deploy` folder contains all files related to containerization and deployment:
- **Dockerfile**: Defines how to build the Docker image for the application.
- **docker-compose.yml**: Defines multi-container setup for local development or simple deployments.
- **k8s**: Contains Kubernetes manifests for orchestrated deployment:
- **deployment.yaml**: Defines how the application should be deployed in Kubernetes.
- **service.yaml**: Defines how the application is exposed within the Kubernetes cluster.
- **ingress.yaml**: Defines how the application is exposed outside the Kubernetes cluster.
- **mongodb.yaml**: Defines the MongoDB deployment as a StatefulSet in Kubernetes.
## Tests (`/test`)
```
/test
├── /unit # Unit tests for individual functions and modules
├── /integration # Integration tests for API endpoints and database interactions
└── /e2e # End-to-end tests simulating real user scenarios
```
The `/test` folder contains automated tests for various parts of the application:
- **unit**: Contains tests for individual functions, modules, and components.
- **integration**: Contains tests for API endpoints and database interactions.
- **e2e**: Contains end-to-end tests that simulate real user scenarios.
## Documentation (`/docs`)
```
/docs
├── folder-structure.md # Explains the project's folder structure
├── application-flow.md # Documents the request handling process
├── prd.md # Product Requirements Document
└── tech-stack.md # Describes the technologies used in the project
```
The `/docs` folder contains project documentation:
- **folder-structure.md**: This document, explaining the project's folder structure.
- **application-flow.md**: Documents the request handling process from entry to response.
- **prd.md**: Product Requirements Document defining the project's purpose, features, and requirements.
- **tech-stack.md**: Documents the technologies used in the project.