GoldenGate is a full-stack application developed as an educational project to demonstrate the implementation of clean architecture principles in both frontend and backend development. The project consists of a backend API built with .NET 9.0 and a frontend application developed using Angular 18.
- Introduction
- Tech Stack
- Backend (GoldenBack)
- Frontend (GoldenFront)
- Project Structure
- Getting Started
- Changelog
- Notes
GoldenGate aims to provide a robust and scalable application by leveraging modern technologies and best practices in software development. The project emphasizes clean architecture to ensure separation of concerns, maintainability, and testability across the application layers.
- C# with .NET 9.0
- Clean Architecture
- ASP.NET Core API Versioning (currently v1.0)
- MongoDB
- Entity Framework Core with MongoDB provider
- Redis and HTTP sessions
- Microsoft.Extensions.Logging
- Asp.Versioning.Mvc for API versioning
- Microsoft.EntityFrameworkCore for ORM capabilities
- MongoDB.Driver and MongoDB.EntityFrameworkCore for MongoDB integration
- AutoMapper for object-object mapping
- Microsoft.Extensions.Caching.StackExchangeRedis for Redis caching
- Microsoft.Web.RedisSessionStateProvider for session state management
- Angular 18
- NgRx
- Storybook
- @angular/localize
- Custom Node.js server for serving multiple builds locally
- Angular CLI for project scaffolding and development
- @ngrx/store for reactive state management
- @storybook/angular for isolated component development
- Additional packages for localization and environment management
The backend solution is organized into separate projects to enforce clean architecture principles:
- Entry point of the backend application
- Contains API configurations and controllers
- Manages endpoint routing and middleware setup
- Defines core business entities and domain models
- Contains repository interfaces for data access abstraction
- Implements business logic and application services
- Contains DTOs (Data Transfer Objects) and mappings
- Utilizes AutoMapper for object transformations
- Provides implementations for repository interfaces
- Contains the database context (ApplicationDbContext)
- Manages external services and integrations
The frontend application follows a modular structure for scalability and maintainability:
- Contains feature modules, components, services, and routing configurations
- Implements the main application logic and UI components
- Houses localization files for internationalization support
- Includes translation files such as messages.en.xlf, messages.fr.xlf, and messages.nl.xlf
- Custom development server script (server.js) for serving multiple builds
- Facilitates testing of different localization configurations locally
- .NET 9.0 SDK
- MongoDB server
- Redis server (for caching and session management)
- Node.js (version compatible with Angular 18)
- Yarn package manager
- Angular CLI
git clone https://github.com/nikoden-io/GoldenGate.git
cd GoldenGate/GoldenBack
dotnet restore
- Modify appsettings.json with your MongoDB and Redis connection strings.
- Ensure the MongoSettings section includes your database configuration.
dotnet run
- The API will be accessible at http://localhost:5166/v1.0/
cd GoldenGate/GoldenFront
yarn install
yarn start
- The frontend application will be running at http://localhost:4200
- To extract translation files, use:
yarn extract-i18n
- Translations can be managed in the src/locale directory.
- To start Storybook for component development:
yarn storybook
- For detailed information about updates and changes, please refer to the CHANGELOG.md file.
- Educational Purpose: This project is developed for educational purposes to demonstrate full-stack application development using modern technologies and architectural patterns.
- No External Contributions: As this is a school project, external contributions are not being accepted.
- Clean Architecture with pragmatic choices: Emphasis has been placed on clean architecture to ensure the separation of concerns, making the codebase maintainable and scalable, pragmatic choices are made to scale principles to the project size.
- By following the instructions in this README, you should be able to set up and run both the backend and frontend applications successfully. The project showcases the integration of various technologies and serves as a practical example of implementing clean architecture in a full-stack application.