A modern, enterprise-grade event management platform built with Clean Architecture and Domain-Driven Design principles. MeetMe enables seamless event creation, attendee management, and real-time collaboration for meetups and gatherings. This project showcases best practices in software architecture, testing, and API design using .NET 9. The platform is rewritten from an old legacy school project to a new, robust architecture that emphasizes maintainability, scalability, and performance.
- Create & Schedule Events: Rich event creation with location, datetime, and capacity management
- Attendance Management: Join/leave events with status tracking (Confirmed, Maybe, Not Attending)
- Smart Capacity Control: Automatic capacity validation and attendee limits
- Event Discovery: Advanced filtering and search capabilities
- Real-time Updates: Domain events for immediate system responsiveness
- Role-based Access: Creator and attendee permissions
- Profile Management: Comprehensive user profiles with bio and contact info
- Event Dashboard: Personalized views for created and joined events
- Activity Tracking: Complete audit trail for all user actions
- Clean Architecture: Separation of concerns with Domain, Application, Infrastructure, and API layers
- CQRS Pattern: Command Query Responsibility Segregation for optimal performance
- Domain Events: Event-driven architecture for loose coupling
- Comprehensive Testing: Unit, integration, and domain tests with 95%+ coverage
- API-First Design: RESTful APIs with OpenAPI/Swagger documentation
src/
βββ MeetMe.API/ # Web API Layer (Controllers, Configuration)
βββ MeetMe.Application/ # Application Layer (CQRS, DTOs, Validation)
βββ MeetMe.Domain/ # Domain Layer (Entities, Value Objects, Events)
βββ MeetMe.Infrastructure/ # Infrastructure Layer (Data Access, External Services)
tests/
βββ MeetMe.Domain.Tests/ # Domain Logic Unit Tests
βββ MeetMe.Application.Tests/# Application Layer Tests
βββ MeetMe.API.Tests/ # API Integration Tests
- Meeting: Core aggregate with location, datetime, and capacity
- User: Identity management with roles and profiles
- Attendance: Join/leave tracking with status management
- Value Objects: Email, Location, MeetingDateTime for data integrity
- Domain Events: MeetingCreated, UserJoined, UserLeft events
- ASP.NET Core Web API - RESTful API endpoints
- Entity Framework Core - Data access and migrations
- MediatR - CQRS and request/response pipeline
- FluentValidation - Input validation and business rules
- AutoMapper - Object-to-object mapping
- JWT Authentication - Secure token-based auth
- Serilog - Structured logging and diagnostics
- SQL Server - Primary data store
- Entity Framework Migrations - Database versioning
- Domain-Driven Design - Rich domain models with business logic
- xUnit - Unit and integration testing framework
- FluentAssertions - Expressive test assertions
- Moq - Mocking framework for dependencies
- Test Coverage - Comprehensive test suite with high coverage
GET /api/meetings # Get all meetings (with filtering)
POST /api/meetings # Create new meeting
GET /api/meetings/{id} # Get meeting details
PUT /api/meetings/{id} # Update meeting
DELETE /api/meetings/{id} # Cancel meetingPOST /api/attendances/join # Join a meeting
POST /api/attendances/leave # Leave a meeting
GET /api/attendances/my-meetings # Get user's meetingsPOST /api/auth/login # User authentication
POST /api/auth/register # User registration
GET /api/users/profile # Get user profile
PUT /api/users/profile # Update user profile- .NET 9 SDK
- SQL Server (LocalDB or full instance)
- Visual Studio 2022 or VS Code
- Clone the repository
git clone https://github.com/lhajoosten/MeetMe-2.0.git
cd MeetMe-2.0- Configure Database
# Update connection string in appsettings.json
# Run database migrations
dotnet ef database update --project src/MeetMe.Infrastructure- Configure JWT Settings
{
"JwtSettings": {
"SecretKey": "your-super-secret-key-here",
"Issuer": "MeetMe.API",
"Audience": "MeetMe.Client",
"ExpirationInHours": 24
}
}- Run the Application
# Start the API
dotnet run --project src/MeetMe.API
# API will be available at https://localhost:5001
# Swagger UI at https://localhost:5001/index.html- Run Tests
# Run all tests
dotnet test
# Run with coverage
dotnet test --collect:"XPlat Code Coverage"- Entity behavior and business rules
- Value object validation
- Domain event verification
- Aggregate consistency checks
- Command and query handlers
- Validation logic
- Service integrations
- Repository patterns
- Controller endpoints
- Authentication flows
- Request/response validation
- Error handling scenarios
- Domain Layer: Business entities and rules
- Application Layer: Use cases and orchestration
- Infrastructure Layer: External concerns and persistence
- API Layer: Controllers and HTTP concerns
- Commands: Write operations (Create, Update, Delete)
- Queries: Read operations with optimized DTOs
- Handlers: Dedicated handlers for each operation
- Validation: FluentValidation for input validation
- Aggregates: Consistency boundaries (Meeting, User)
- Value Objects: Immutable data containers
- Domain Events: Decoupled communication
- Repository Pattern: Data access abstraction
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Clean Architecture principles
- Write comprehensive tests for new features
- Use domain events for cross-aggregate communication
- Maintain high code coverage (>90%)
- Follow SOLID principles and DDD patterns
This project is licensed under the MIT License - see the LICENSE file for details.
- Clean Architecture by Robert C. Martin
- Domain-Driven Design by Eric Evans
- .NET Community for excellent tooling and frameworks