tc-public-quote-api
.NET 6 API behind the myTC customer portal/app that stores and serves customer quotes and enquiries from a PublicQuote MongoDB database, tracking likes/booking app-events and enriching quotes with flight alerts and payment links.
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 12, FluentValidation 11, Mapster |
| Runtimes | .NET 6 |
| Tests / CI | some / CI in place |
| Last commit | 2025-06-27 |
| Owner | Owner unknown (mapping to be curated) |
| Domain | Selling and quoting (system generated; curate in repo-owners.json to override) |
| Product area | Shared platform |
| Hosted | AWS Deployed to AWS
|
| Releases | 0 release pipeline(s): |
| Integration | rest, jwt |
| 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
No excuseNothing technical is holding this repo on the three-week release. It either already deploys without downtime (AWS) or is a modern, well-tested service the automated stealth path can carry today. Already deploys as a container to AWS, which releases without downtime today. Separating it from the three-week release is a process decision, not a technical one.
- Adopt the four-stage discipline from the ZDD engineering standard: pre-deployment compatibility, deployment, feature activation behind a flag, post-release cleanup.
- Raise automated test coverage first: ZDD trades the end-of-sprint manual gate for continuous automated confidence, so the tests are the entry ticket.
- Make every change dual-version safe: backwards-compatible APIs (new major version for breaking wire changes), expand and contract for any schema change, and consumers tolerant of unknown fields.
- Audit serialized data: anything in Redis, queues or shared caches must deserialize cleanly across adjacent versions.
- Wrap behaviour changes in feature flags so code deploys dark and release becomes a business decision, not a deployment event.
- Use ECS rolling deployments with health checks gating traffic, and take this service off the three-week release train.
- Verify with area-scoped regression rather than the whole-platform cycle, and watch error rates after rollout with automated rollback on alert.
SQL Server exit
Not applicableNo SQL Server dependency is recorded for this repo. Nothing to migrate.
Containerisation
Already containerisedIts pipelines already build containers and deploy to AWS. Nothing to do here.
Recommended actions
Replatform tc-public-quote-api to modern .NET
Runs on .NET 6, out of mainstream support. No pinning dependency blocks it; sequence by fan-in (providers before consumers).
Impact: Reduces the end-of-life runtime count
proposedAssessment notes
tc-public-quote-api
Purpose
The customer-facing quote store for myTC: QuotesController and EnquiriesController expose CRUD plus behavioural commands (add/remove quote, like/unlike, book, import enquiry, mark enquiry note read, remove expired quotes) executed through a hand-rolled command/query handler layer over MediatR. Quote documents carry the full itinerary presentation model (accordion groups, cost breakdowns, headers, passenger details) and the API builds customer payment links into the myTC portal. This is the "public quote API" that tc-public-quote-sync-service pushes Phenix-bound quotes through.
Tech stack
C# on .NET 6 across four projects (Abstractions, Api, Application, Persistence). MediatR 12 with Scrutor-scanned handlers, FluentValidation 11 auto-validation, Mapster, Newtonsoft.Json with a custom itinerary-item polymorphic converter, TC.Public.Jwt.Auth myTC user middleware, correlation/logging/exception middlewares, Swashbuckle, TC.Diagnostics health checks plus a Mongo health check, TC.ScriptRunner.Mongo startup migrations.
Deployment
Included as prod_application with 0 releases — YAML/AWS only. Build pipeline tc-public-quote-api from azure-pipeline.yaml on the shared InternalOSS/azure-pipelines-templates jobs/ci.yml (SDK 6.0.x, globalisation-enabled container): containerised into cx-public, deployed to ECS via the aws-public-tc-apps Terraform repo with tfvars, eu-west-1, functional area public. Per-environment appsettings for TestQA, Training, PreProduction and Live.
Dependencies
Internal: TC.ConnectionBroker.* Mongo/Api/HttpClient (tc-connectionbroker), TC.Diagnostics.HealthChecks (tc-diagnostics-portal), TC.Phenix.Quote.ServiceContract (phenix-quote). TC.Public.Jwt.Auth, TC.Quote.Payment.Reference and TC.ScriptRunner.Mongo are internal packages whose source repos are not in the included list. A brokered HTTP client targets a FlightAlerts API (source repo not confirmed). No third-party external services.
Data stores
Owns the PublicQuote MongoDB database (quotes, enquiries, app-events) via the Mongo connection broker. Startup Mongo scripts migrate the app-events and enquiries collections from a legacy WebAPI_* database (LegacyDatabaseName, e.g. WebAPI_OpsQA), so the legacy store remains a configured dependency until migration is fully retired.
Integration points
Inbound REST authenticated with myTC JWT middleware; outbound brokered REST to the FlightAlerts service; payment deep-links into the myTC customer portal. No bus, streams or WCF.
Code health
Some tests: three test projects plus a shared fixture library, but only ~16 facts/theories across API, Application and Persistence — thin for the size of the DTO/factory surface. No README. Last commit 2025-06-27, so maintained but not busy.
Modernisation risks
Medium: .NET 6 (EOL November 2024) on SDK 6.0.x in an internet-adjacent container is the headline; the upgrade is contained but touches four projects and the shared JWT/ConnectionBroker packages. Secondary: the legacy-WebAPI Mongo migration scripts still ship in startup config, light test coverage over a large hand-mapped DTO model, and no documentation of the quote document schema shared with the sync service.