{"id":20931379,"url":"https://github.com/phucngo2/prn231-dotnet-cleanarchitecture","last_synced_at":"2026-03-07T06:02:29.398Z","repository":{"id":246893799,"uuid":"822627618","full_name":"phucngo2/PRN231-DotNet-CleanArchitecture","owner":"phucngo2","description":"Just a simple .Net API with CRUD features.","archived":false,"fork":false,"pushed_at":"2025-06-04T10:08:26.000Z","size":163,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-04T10:59:11.495Z","etag":null,"topics":["c-hashtag","csharp","dotnet"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phucngo2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-01T13:53:46.000Z","updated_at":"2025-06-04T10:08:29.000Z","dependencies_parsed_at":"2024-07-05T19:50:14.249Z","dependency_job_id":"17000086-4e81-491b-9eb3-eeb528da38c9","html_url":"https://github.com/phucngo2/PRN231-DotNet-CleanArchitecture","commit_stats":null,"previous_names":["phucngo2/prn231-dotnet-cleanarchitecture"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phucngo2/PRN231-DotNet-CleanArchitecture","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phucngo2%2FPRN231-DotNet-CleanArchitecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phucngo2%2FPRN231-DotNet-CleanArchitecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phucngo2%2FPRN231-DotNet-CleanArchitecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phucngo2%2FPRN231-DotNet-CleanArchitecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phucngo2","download_url":"https://codeload.github.com/phucngo2/PRN231-DotNet-CleanArchitecture/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phucngo2%2FPRN231-DotNet-CleanArchitecture/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30208801,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T05:23:27.321Z","status":"ssl_error","status_checked_at":"2026-03-07T05:00:17.256Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-hashtag","csharp","dotnet"],"created_at":"2024-11-18T21:41:50.750Z","updated_at":"2026-03-07T06:02:29.378Z","avatar_url":"https://github.com/phucngo2.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📚 PRN231-DotNet-CleanArchitecture 🚀\nJust a simple .Net API with CRUD features, following Domain-Driven Design (DDD) principles 🥲! Powered by ~~`.NET 8`~~ `.NET 9` and `C hashtag version 12`.\n## 🛠️ Built With\n![.Net](https://img.shields.io/badge/.NET-5C2D91?style=for-the-badge\u0026logo=.net\u0026logoColor=white)\n![C#](https://img.shields.io/badge/c%23-%23239120.svg?style=for-the-badge\u0026logo=csharp\u0026logoColor=white)\n![Postgres](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)\n![Redis](https://img.shields.io/badge/redis-%23DD0031.svg?style=for-the-badge\u0026logo=redis\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white)\n![JWT](https://img.shields.io/badge/JWT-black?style=for-the-badge\u0026logo=JSON%20web%20tokens)\n## 🚧 Development Setup\n### Prerequisites\nBefore starting, ensure you have the following tools and environments set up on your machine:\n- .NET 9.0 SDK\n- PostgreSQL\n- Redis\n- Docker (optional)\n### ⭐ Local Development Setup\n#### 1. Clone the Repository\n```bash\ngit clone \u003crepository_url\u003e\ncd \u003cproject_directory\u003e\n```\n#### 2. Configure Application Settings\nUpdate the configuration files located at `PRN231.API/appsettings.json` and `PRN231.API/appsettings.Development.json` with appropriate database connection strings, Redis configurations, and other settings.\n#### 3. Restore Dependencies\nAt the root directory, restore the required NuGet packages by running:\n```bash\ndotnet restore\n```\n#### 4. Run the Application\nLaunch the application locally using the following command:\n```bash\ndotnet run --project PRN231.API\n```\n\n__🚀 The application will listen on:__\n- HTTP: **http://localhost:5184**\n- HTTPS: **https://localhost:7100**\n\n(You can change these ports in the launchSettings.json file located at PRN231.API/Properties/launchSettings.json)\n### 🐳 Dockerized Development Setup (Optional)\n#### 1. Configure Application Settings\nUpdate the same configuration files (`PRN231.API/appsettings.json` and `PRN231.API/appsettings.Development.json`) with appropriate database connection strings, Redis configurations, and other settings.\n#### 2. Build and Run Docker Containers\nAt the project root directory, use Docker Compose to build and run the containers:\n```bash\ndocker compose up\n```\n## 🎯 To-Dos\n- [x] Develop CRUD operations.\n- [x] Develop \"hand-made\" authentication operations.\n- [x] Integrate soft delete functionality.\n- [x] Implement DTOs and AutoMapper for object mapping.\n- [x] Implement DbFactory, Unit of Work, and Repository patterns.\n- [x] Implement exception handling middleware / .NET 8 exception handler.\n- [x] Implement Result Monad.\n- [x] Implement Minimal APIs.\n- [x] Enable authentication using JWT tokens.\n- [x] Automatically log AuditLogs to the database.\n- [x] Automatically track Entities' CreatedAt and ModifiedAt timestamps.\n- [x] Integrate SignalR for real-time notifications.\n- [x] Implement Redis Cache for efficient data caching.\n- [x] Implement SMTP Email sender.\n- [ ] Refactor: Use email templates instead of hard-coding.\n- [x] Set up Hangfire for background jobs.\n- [ ] ~~Replace AutoMapper by Mapperly to improve performance.~~\n- [ ] Implement ASP.NET Core Identity.\n- [ ] Implement RabbitMQ for messaging services.\n- [ ] Implement gRPC.\n- [ ] Implement ElasticSearch.\n- [ ] Apply CQRS Pattern (Command and Query Responsibility Segregation).\n- [x] Integrate DotNet Aspire.\n- [x] Dockerize the application for easy deployment 🐳.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphucngo2%2Fprn231-dotnet-cleanarchitecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphucngo2%2Fprn231-dotnet-cleanarchitecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphucngo2%2Fprn231-dotnet-cleanarchitecture/lists"}