hiiammalte/foodtruacker
46.7
Weak · 21 September 2026
3.1k
lines of production code
C#
primary language
4
measurements over time
What this system is
This is a .NET 9-based event-sourcing application that manages user accounts and tour pricing through a domain-driven architecture. It provides role-based access control for administrators and customers, handling account creation, verification, and credential updates via MediatR commands. The system persists state using MySQL, MongoDB, and EventStoreDB, with acceptance tests ensuring domain event integrity.
Features
Added user account management commands and projections
The application now supports creating, verifying, and updating admin and customer accounts, including changing email addresses and passwords. This includes new MediatR commands for account creation, email/password updates, and verification, alongside event handlers and projections that synchronize account changes to read models and trigger email verification workflows.
foodtruacker.Application · high confidence
Initial project scaffolding and configuration
The repository was initialized with a complete project structure, including a solution file defining multiple .NET class libraries (API, Application, Domain, etc.), a Docker Compose configuration for local development with MySQL, MongoDB, and EventStoreDB, and a .gitignore/.dockerignore setup. This establishes the foundational build and runtime environment for the application.
(repo-wide) · high confidence
Introduce role-based authorization and user account management endpoints
The API now enforces role-based access control using JWT Bearer tokens. The AdministrationController is restricted to the 'Admin' role, while the CustomersController requires 'Admin' or 'Customer' roles. The AuthenticationController handles public login and email verification, routing verified users to either admin or customer flows. New DTOs (CreateAdminAccountDTO, CreateCustomerAccountDTO, etc.) support account creation and updates. The Startup class registers JWT authentication, MySQL Identity storage, and MediatR for command/query handling, enabling the new account management features.
foodtruacker.Framework · high confidence
Introduced domain models and event-sourcing infrastructure for user account and tour pricing management
Added new domain aggregates for managing user accounts and tour pricing, including \Admin\ and \Customer\ aggregates in the \UserAccountManagement\ bounded context, and a \TourStopPricingModel\ aggregate in the \TourPricingManagement\ context. These aggregates support creating accounts, verifying them, and changing email addresses or passwords, all driven by domain events. The change also introduces the underlying event-sourcing infrastructure in \SharedKernel\, including the \AggregateRoot\ base class, \DomainEvent\ and \IDomainEvent\ interfaces, and value object abstractions (\ValueObject\, \IValueObject\) to support the new domain logic.
foodtruacker.Domain, foodtruacker.SharedKernel · high confidence
Test coverage
Added acceptance tests for user account management
Added acceptance tests for user account management, including registration, verification, and password/email changes for both customers and admins. The tests verify that the correct domain events are published for each scenario.
foodtruacker.AcceptanceTests · high confidence
Dependencies
Upgrade to .NET 9 and update NuGet packages
The project has been upgraded to the .NET 9 runtime, with all .csproj files now targeting net9.0. Additionally, key dependencies have been updated to their latest versions, including the EventStore client libraries (v23.3.7), Grpc.Net.Client (v2.67.0), and various Microsoft.Extensions packages (v9.0.0).
(dependencies) · medium confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 47 → 47 (+0.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 58 → 58 (-0.0)
- Architecture 88 → 88 (+0.0)
- Maturity 63 → 63 (+0.0)
- Readiness 26 → 26 (+0.3)
- Security 67 → 66 (-1.3)
- Domain Modelling 77 → 81 (+3.5)
- Event-Driven 100 → 100 (+0.0)
Resolved (15)
- Bounded contexts not declared
- Medium IaC: CKV_DOCKER_3 (foodtruacker.Framework/API/Dockerfile)
- Medium IaC: CKV_SECRET_6 (foodtruacker.Framework/API/appsettings.json)
- Medium IaC: CKV_SECRET_6 (foodtruacker.Framework/API/bin/Debug/net9.0/appsettings.json)
- Medium IaC: CKV_SECRET_6 (foodtruacker.Framework/API/bin/Release/net9.0/appsettings.json)
- No exposed public API
- early-stage repository — too few commits for a meaningful bus factor
- early-stage repository — too little history to judge knowledge freshness
- git history depth insufficient
- git history depth insufficient
- redundant comment (foodtruacker.Domain/BoundedContexts/UserAccountManagement/Aggregates/Customer.cs)
- redundant comment (foodtruacker.Framework/API/Extensions/IdentityMySqlServiceExtensions.cs)
- redundant comment (foodtruacker.Framework/API/Extensions/IdentityMySqlServiceExtensions.cs)
- redundant comment (foodtruacker.Framework/API/Extensions/IdentityMySqlServiceExtensions.cs)
- redundant comment (foodtruacker.Framework/API/Startup.cs)
New (21)
- Documentation: no installation or build instructions (README.md)
- Documentation: no licence statement (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (17 lines × 2) (foodtruacker.Application/BoundedContexts/UserAccountManagement/Commands/AdminAccountChangeEmailCommand.cs)
- Duplicated block (17 lines × 2) (foodtruacker.Application/BoundedContexts/UserAccountManagement/Commands/AdminAccountCreateCommand.cs)
- Duplicated block (23 lines × 2) (foodtruacker.Application/BoundedContexts/UserAccountManagement/Commands/AdminAccountChangePasswordCommand.cs)
- End-of-life runtime: .NET net9.0
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- High IaC: WD-COMPOSE-0002 (docker-compose.yml)
- High IaC: WD-DOCKER-0013 (foodtruacker.Framework/API/Dockerfile)
- High IaC: WD-DOCKER-0013 (foodtruacker.Framework/API/Dockerfile)
- High secret: WD-SECRET-0002 (foodtruacker.Framework/API/appsettings.json)
- Inconsistent naming for user name components. The ValueObject UserFullName implies a composite of First and Last names, yet the DTOs and Commands use Firstname and Lastname (with 'e') instead of the more standard FirstName and LastName. Additionally, UserFullName is a noun phrase for the aggregate, while the parts are split across different contexts with inconsistent casing/spelling conventions relative to the domain model.
- Inconsistent spelling of 'First' vs 'Last' in DTOs and Commands. CreateAdminAccountDTO uses Firstname, while CustomerAccountCreateCommand uses Lastname. The suffix 'e' is missing in one and present in the other.
- Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
- Medium IaC: WD-DOCKER-0003 (foodtruacker.Framework/API/Dockerfile)
- Medium IaC: WD-DOCKER-0003 (foodtruacker.Framework/API/Dockerfile)
- No test project references foodtruacker.API (foodtruacker.Framework/API/foodtruacker.API.csproj)
- redundant comment (foodtruacker.Framework/API/Extensions/IdentityMySqlServiceExtensions.cs)
- redundant comment (foodtruacker.Framework/API/Extensions/IdentityMySqlServiceExtensions.cs)
- …and 1 more
API surface
- Unchanged — 3 HTTP endpoints
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
hiiammalte/foodtruacker was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 380819a38775f36e70c4483ae28988832d51bbbd — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.