Platform Evolution
Assessment run-2026-07-27-1 · 213 of 213 repos assessed
Repos / phenix-reasonstocall-api

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.

69 · ambermediumlooseOn-premZDD: not applicableapidormant

Health score

69

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.


Runtime currency / 25
4
End-of-life runtime outside .NET Framework
Legacy transport / 15
15
No legacy WCF or SOAP surface
Test posture / 15
15
Good test coverage
Security hygiene / 15
15
No credentials found in source
Dangerous coupling / 15
15
No dangerous coupling detected
Activity / 10
0
Dormant: no meaningful change for two years or more while still deployed
Deployment hygiene / 5
5
CI in place
Health over time
2026-07-24 (run-2026-07-24-1): 692026-07-27 (run-2026-07-27-1): 69
No change since 2026-07-24 (69 to 69).

Facts

Languagescsharp
FrameworksASP.NET Core 6, MediatR
Runtimes.NET 6
Tests / CIgood / CI in place
Last commit2023-11-14
OwnerOwner unknown (mapping to be curated)
DomainContact centre and CRM (system generated; curate in repo-owners.json to override)
Product areaPhenix
HostedOn-prem Deployed to our own machines
  • Release "\ops\reasonstocall\phenix-reasonstocall-api CI": Production: deployment-group phase (agents on our own machines)
  • Release "\ops\reasonstocall\phenix-reasonstocall-api CI": Training: deployment-group phase (agents on our own machines)
  • Release "\ops\reasonstocall\phenix-reasonstocall-api CI": DR: deployment-group phase (agents on our own machines)
  • Release "\ops\reasonstocall\phenix-reasonstocall-api CI": QA: deployment-group phase (agents on our own machines)
  • Release "\ops\reasonstocall\phenix-reasonstocall-api CI": Staging: deployment-group phase (agents on our own machines)
Releases1 release pipeline(s): \ops\reasonstocall\phenix-reasonstocall-api CI
Integrationrest
SourceOpen in Azure DevOps

Risk flags

Each flag links to its glossary definition.

Dependencies in context

Laying out the graph…
greenamberreddata store (square, dashed link)Node size follows fan-in. Click any node to open it.

Entanglement

loose No binding mechanisms apply: this system needs no untangling work.

    Depends on / used by

    Used by (0)
    No internal dependents.

    Data stores
    mongodb:ReasonsToCall

    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 applicable

    Not 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 applicable

    No SQL Server dependency is recorded for this repo. Nothing to migrate.

    Containerisation

    Retire instead

    This 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

    proposed

    Assessment 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.