{"id":32663897,"url":"https://github.com/mgomez-dev-code/minimaltodos","last_synced_at":"2025-10-31T23:02:16.422Z","repository":{"id":321696121,"uuid":"1086825795","full_name":"mgomez-dev-code/MinimalTodos","owner":"mgomez-dev-code","description":"A clean and modern .NET 9 Minimal API showcasing CRUD endpoints, validation, pagination, and unit testing with xUnit + Moq, including automated CI with GitHub Actions.","archived":false,"fork":false,"pushed_at":"2025-10-31T01:32:27.000Z","size":11,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-31T03:15:16.229Z","etag":null,"topics":["ci-cd","clean-architecture","csharp","dependency-injection","dotnet","github-actions","minimal-api","moq","rest-api","swagger","todo-app","xunit"],"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/mgomez-dev-code.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-31T00:51:35.000Z","updated_at":"2025-10-31T01:50:45.000Z","dependencies_parsed_at":"2025-10-31T03:18:26.792Z","dependency_job_id":"f1ff13f0-e69c-408a-aa7a-548fb7c60083","html_url":"https://github.com/mgomez-dev-code/MinimalTodos","commit_stats":null,"previous_names":["mgomez-dev-code/minimaltodos"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/mgomez-dev-code/MinimalTodos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgomez-dev-code%2FMinimalTodos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgomez-dev-code%2FMinimalTodos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgomez-dev-code%2FMinimalTodos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgomez-dev-code%2FMinimalTodos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgomez-dev-code","download_url":"https://codeload.github.com/mgomez-dev-code/MinimalTodos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgomez-dev-code%2FMinimalTodos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282070789,"owners_count":26608933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-31T02:00:07.401Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ci-cd","clean-architecture","csharp","dependency-injection","dotnet","github-actions","minimal-api","moq","rest-api","swagger","todo-app","xunit"],"created_at":"2025-10-31T23:00:54.298Z","updated_at":"2025-10-31T23:02:16.398Z","avatar_url":"https://github.com/mgomez-dev-code.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MinimalTodos (.NET 9 + Minimal API)\n\n![.NET](https://img.shields.io/badge/.NET-9-512BD4?logo=dotnet\u0026logoColor=white)\n![Language: C#](https://img.shields.io/badge/Language-C%23-239120?logo=csharp\u0026logoColor=white)\n![Tests: xUnit](https://img.shields.io/badge/Tests-xUnit-6aa84f)\n![.NET CI](https://github.com/mgomez-dev-code/MinimalTodos/actions/workflows/dotnet.yml/badge.svg)\n![License: MIT](https://img.shields.io/badge/License-MIT-green)\n\nA small **Minimal API** built with **.NET 9** to manage a *Todo* list.\nDemonstrates a clean architecture using Dependency Injection, validation, pagination, and unit testing with xUnit \u0026 Moq.\nDesigned to show how Minimal APIs simplify setup compared to traditional MVC Controllers, while keeping strong typing and testability.\n\n## Features\n- ⚡ CRUD endpoints (`GET`, `POST`, `PUT`, `PATCH`, `DELETE`)\n- 🧠 In-memory repository with **Dependency Injection**\n- 🔎 **Search filter** (`?search=`) and **pagination** (`pageIndex`, `pageSize`)\n- 🧾 Validation: **Title required, 1–100 chars**\n- 🧪 Unit tests with **xUnit** and **Moq**\n- 💬 Proper HTTP responses (200, 201, 400, 404)\n- 🚀 Swagger UI ready out of the box\n\n## Project Structure\n```text\nMinimalTodos/\n├─ MinimalTodos.sln\n├─ MinimalTodos.API/\n│  ├─ Domain/          # Models \u0026 DTOs\n│  ├─ Endpoints/       # Minimal API routes\n│  ├─ Extensions/      # App extensions (endpoint registration, DI helpers, etc.)\n│  ├─ Repositories/    # ITodoRepository + InMemory repo\n│  ├─ Validation/      # Custom validation\n│  └─ Program.cs\n└─ MinimalTodos.Tests/\n   ├─ TodoRepositoryTests.cs\n   └─ TodoNotifierTests.cs\n```\n\n## Getting Started\n\n**1) Build \u0026 Test**\n```bash\ndotnet build\ndotnet test\n```\n\n**2) Run the API**\n```bash\ndotnet run --project MinimalTodos.API\n# Open https://localhost:7026/swagger\n```\n💡By default, the API runs on https://localhost:7026 (HTTPS) and http://localhost:5000 (HTTP).\nSwagger UI will open automatically at /swagger, allowing you to explore and test all endpoints interactively.\n\n## Example Endpoints\n| Method | Endpoint | Description |\n|-------:|----------|-------------|\n| `GET`  | `/todos` | List todos (with search \u0026 pagination) |\n| `GET`  | `/todos/{id}` | Get a single todo |\n| `POST` | `/todos` | Create new todo |\n| `PUT`  | `/todos/{id}` | Update todo |\n| `PATCH`| `/todos/{id}/toggle` | Toggle IsDone |\n| `DELETE`| `/todos/{id}` | Delete todo |\n\n## License\nThis project is licensed under the **MIT License**. See `LICENSE` for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgomez-dev-code%2Fminimaltodos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgomez-dev-code%2Fminimaltodos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgomez-dev-code%2Fminimaltodos/lists"}