This project is a TypeScript-based Express.js application that follows the Hexagonal Architecture, Domain-Driven Design (DDD), and Test-Driven Development (TDD) principles. The goal of this project was to explore and implement clean architectural patterns while ensuring maintainability and scalability. It was developed during a one-week course as part of an evaluation to assess various competencies.
├── src/
│ ├── conferences/ # Conference-related domain logic
│ ├── core/ # Core application logic
│ ├── infrastructure/ # Database, External APIs, Configurations
│ │ ├── express_api/ # Express API implementation
│ ├── tests/ # Unit and Integration tests
│ ├── user/ # User-related domain logic
│
├── .gitignore # Git ignore file
├── docker-compose.yml # Docker configuration for MongoDB
├── jest.config.e2e.ts # Jest config for end-to-end tests
├── jest.config.int.ts # Jest config for integration tests
├── jest.config.ts # Jest main configuration file
├── package-lock.json # Lock file for package dependencies
├── package.json # Project dependencies and scripts
├── request.http # Sample HTTP request file
├── tests.md # Documentation on testing strategies
├── tsconfig.json # TypeScript compiler settings
├── README.md # Documentation
✅ Hexagonal Architecture with clear separation of concerns ✅ Domain-Driven Design principles applied ✅ Full coverage with Test-Driven Development (TDD) ✅ MongoDB database integration with Mongoose ✅ REST API implementation following best practices ✅ Dependency Injection for better testability ✅ Docker integration for managing the database
- Node.js (LTS version recommended)
- MongoDB installed and running locally or via Docker
- Yarn or npm installed
# Clone the repository
git clone https://github.com/your-username/project-name.git
cd project-name
# Install dependencies
yarn install # or npm install
# Start the development server
yarn dev # or npm run dev
# Run unit tests
yarn test # or npm run test
# Start the MongoDB container
docker-compose up -d
# Run the application
yarn dev
🚫 No contributions are accepted, as this is a school project meant to serve as a reference.
This project is licensed under the MIT License – feel free to use, modify, and distribute it.
Made with ❤️ by Pierre 🚀