phenix-reasonstocall-api
.NET 6 event-sourced API managing a TC's 'reasons to call' task list (complete, snooze, dismiss, note, delete/restore) over a MongoDB event store and read model.
Health score
0 to 100 across seven weighted factors; nothing is hidden. Green is 75 and above, amber 50 to 74, red below 50. How scoring works.
Facts
| Languages | csharp |
| Frameworks | ASP.NET Core 6, MediatR |
| Runtimes | .NET 6 |
| Tests / CI | good / CI in place |
| Last commit | 2023-11-14 |
| Owner | Owner unknown (mapping to be curated) |
| Domain | Contact centre and CRM (system generated; curate in repo-owners.json to override) |
| Product area | Phenix |
| Hosted | On-prem Deployed to our own machines
|
| Releases | 1 release pipeline(s): \ops\reasonstocall\phenix-reasonstocall-api CI |
| Integration | rest |
| Source | Open in Azure DevOps |
Dependencies in context
Entanglement
loose No binding mechanisms apply: this system needs no untangling work.
Migration playbooks
Generated from this repo's assessment data: what is feasible, what blocks it, and the steps in order. Ratings: green means actionable now, amber means sequence other work first, red means blocked, grey means not applicable.
ZDD adoption
Not applicableNot a deployed service (libraries, database definitions, desktop apps) or a retirement candidate not worth the investment. Retirement or consolidation candidate; do not invest in ZDD adoption.
SQL Server exit
Not applicableNo SQL Server dependency is recorded for this repo. Nothing to migrate.
Containerisation
Retire insteadThis repo is a retirement or consolidation candidate; containerising it would be investment in something we intend to switch off.
Recommended actions
Review phenix-reasonstocall-api for retirement
Dormant (last commit 2023-11-14) yet still release-linked, and nothing depends on it. Confirm remaining use, then retire and disarm its pipeline.
Impact: Shrinks the estate before the expensive work begins
proposedAssessment notes
phenix-reasonstocall-api
Purpose
Small CQRS/event-sourced API behind the Phenix "reasons to call" feature: a WriteController raises domain events (completed, snoozed-till, dismissed, note-added, deleted/restored, all-deleted/all-restored) that MediatR event handlers apply to a Mongo-backed event store, and a ReadController serves the projected read model.
Tech stack
C# on .NET 6, Microsoft.NET.Sdk.Web API project plus a domain class library. MediatR 12 for event dispatch, MongoDB.Driver 2.22 with connection strings resolved via TC.ConnectionBroker.Mongo, Newtonsoft JSON formatting, API versioning, Swashbuckle, Scrutor assembly scanning, WebApi.Healthcheck.
Deployment
Included as prod_application with 1 release. Single YAML pipeline (azure-pipelines.yml) using the shared InternalOSS azure-pipelines-templates; build pipeline phenix-reasonstocall-api, release pipeline \ops\reasonstocall\phenix-reasonstocall-api CI. Per-environment appsettings (Development, QA, Training, Preproduction, Live).
Dependencies
Internal packages: TC.ConnectionBroker.Mongo/Extensions (tc-connectionbroker, old 1.8.x line) and TC.Exceptions.WebApiClient 4.0 (tc-exceptions), plus TC.Common.Hypermedia. No calls to other estate services; no external SaaS dependencies.
Data stores
MongoDB database ReasonsToCall holding both the event store and the read-model collections; no SQL Server or Redis.
Integration points
REST only (versioned read/write controllers with Swagger). No message bus, no WCF. Notably there is no authentication package wired in — access control presumably relies on network placement behind the Phenix gateway.
Code health
Good coverage for its size: API and domain test projects with ~142 test methods over 24 files covering event handlers, repositories and controllers. YAML CI. No README at all. Dormant: last commit 2023-11-14, and its ConnectionBroker/Exceptions package versions are several major lines behind the estate.
Modernisation risks
.NET 6 has been end-of-life since November 2024, so the runtime needs bumping to .NET 8+, but the codebase is small, well tested and cleanly structured — an easy upgrade. The bigger questions are the dormancy (untouched for 2.5 years while in production) and confirming whether the unauthenticated API surface is acceptable.