{"id":33242371,"url":"https://github.com/soufian-khennousse/tool2go","last_synced_at":"2026-05-15T17:03:03.880Z","repository":{"id":324551302,"uuid":"1097625927","full_name":"soufian-khennousse/Tool2Go","owner":"soufian-khennousse","description":"Rental system focusing on validation, error handling, and clean service architecture.","archived":false,"fork":false,"pushed_at":"2025-11-16T14:56:53.000Z","size":251,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-16T16:13:44.988Z","etag":null,"topics":["booking-system","clean-architecture","cli-tool","console-application","csharp","design-patterns","dotnet","object-oriented-programming","validation","xml-serialization"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soufian-khennousse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-11-16T14:39:54.000Z","updated_at":"2025-11-16T15:01:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/soufian-khennousse/Tool2Go","commit_stats":null,"previous_names":["soufian-khennousse/tool2go"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/soufian-khennousse/Tool2Go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soufian-khennousse%2FTool2Go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soufian-khennousse%2FTool2Go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soufian-khennousse%2FTool2Go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soufian-khennousse%2FTool2Go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soufian-khennousse","download_url":"https://codeload.github.com/soufian-khennousse/Tool2Go/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soufian-khennousse%2FTool2Go/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33072970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["booking-system","clean-architecture","cli-tool","console-application","csharp","design-patterns","dotnet","object-oriented-programming","validation","xml-serialization"],"created_at":"2025-11-16T20:01:07.568Z","updated_at":"2026-05-15T17:03:03.852Z","avatar_url":"https://github.com/soufian-khennousse.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 Tool2Go – A Modular Tool Rental System (C#/.NET 8)\n**Enterprise-style CLI application with XML persistence, booking logic, validation rules, and a clean service-oriented architecture.**\n\nTool2Go is a fully functional **tool rental management system** developed in **C#/.NET 8**, focusing on clean architecture, robust input handling, domain-driven design, and real-world business logic.  \nIt simulates the full lifecycle of renting professional tools — including customers, bookings, categories, availability logic, validation, and cost calculations.\n\nThis project demonstrates:\n\n- 🧩 **Deep understanding of domain modeling**\n- 🛠️ **Clean service-layer architecture**\n- 📦 **XML-based persistence** (serialization/deserialization)\n- 🧹 **Input parsing, validation \u0026 error handling**\n- 🔄 **Complex booking workflows with date validation**\n- 🔎 **Debugging \u0026 edge-case handling** (temporary reservations, availability checks, etc.)\n- ♻️ **Extendable design for future UI or DB upgrades**\n\n---\n\n## 🧱 Architecture Overview\n\nThe system follows a **layered architecture** designed for maintainability:\n\n```text\nProgram.cs (Entry point / Menu control)\n├── Services\n│   ├── CustomerService\n│   ├── BookingService\n│   ├── ToolService\n│   └── CategoryService\n├── Models\n│   ├── Customer\n│   ├── Booking / BookingPos\n│   ├── ToolType / ToolInstance\n│   └── ToolCategory\n└── Persistence\n    └── XML Serialization (Utils)\n```\n\n### 🔍 Highlights\n- **Services contain all business logic** → no logic in `Program.cs`\n- **Models contain only state + simple calculations**\n- **Centralized InputHelper** ensures all input is validated \u0026 abortable\n- **XMLSerializer abstraction** allows future upgrade to JSON/SQL\n\n---\n\n## 🧩 Key Features\n\n### ✔ Smart Booking Workflow\nThe booking system guides the user step-by-step:\n\n1. Select customer  \n2. Enter start \u0026 end date  \n3. System checks availability for each tool type  \n4. User can book multiple tools at once  \n5. Age restrictions enforced (21+ for insured tools)  \n6. Temporary reservations prevent double-booking in same session  \n7. Full summary screen before saving  \n\n---\n\n### ✔ Temporary Reservations (Advanced Feature)\nTo prevent inconsistent availability:\n\n- tools selected during the booking session are **temporarily reserved**\n- ensures correct availability calculation\n- prevents multi-adding the same tool type incorrectly\n\n---\n\n### ✔ Robust Input Handling (Industrial-grade)\nEvery input uses the **InputHelper**, providing:\n\n- Centralized parsing  \n- Abort options at any point  \n- Retry on invalid input  \n- “Press Enter to keep previous value” when editing  \n- Consistency across all services  \n\nThis simulates real enterprise CLI tooling where input reliability is critical.\n\n---\n\n### ✔ Cancelable Operations\nAll user-facing actions support:\n\n- Cancel before saving  \n- Confirmation before deletion  \n- Clear error prompts  \n- Retry loops without throwing exceptions\n\n---\n\n### ✔ XML Persistence\nAll data is stored using XML serialization:\n\n- Tools  \n- Tool instances  \n- Categories  \n- Customers  \n- Bookings  \n- Nested booking positions  \n\nEnsured through:\n\n- a consistent schema  \n- safe loading  \n- future-proof structure for migrations \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoufian-khennousse%2Ftool2go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoufian-khennousse%2Ftool2go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoufian-khennousse%2Ftool2go/lists"}