phenix-itineraries
.NET 8 write and query APIs for managing Phenix itineraries (day-by-day content, images, destinations) stored in MongoDB, secured with Phenix JWTs.
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 8, MediatR, FluentValidation |
| Runtimes | .NET 8 |
| Tests / CI | good / CI in place |
| Last commit | 2026-07-22 |
| Owner | Owner unknown (mapping to be curated) |
| Domain | Bookings and fulfilment (system generated; curate in repo-owners.json to override) |
| Product area | Phenix |
| Hosted | AWS + on-prem Ships artefacts to both AWS and on-prem machines (see evidence below)
|
| Releases | 2 release pipeline(s): \commercial\itineraries\phenix-itineraries ui; \commercial\itineraries\phenix-itineraries-api [on-prem] |
| Integration | rest, jwt, redis |
| Source | Open in Azure DevOps |
Risk flags
No risk flags recorded.
Each flag links to its glossary definition.
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. Modern runtime, good tests, no hosted legacy transport: the automated stealth path can carry it today.
- 1 system(s) depend on this repo; during a rolling deploy they will talk to old and new versions at once, so responses must stay compatible
- Serialized state or messages in flight (Redis or queues): new code must deserialize objects written by the previous version
- Adopt the four-stage discipline from the ZDD engineering standard: pre-deployment compatibility, deployment, feature activation behind a flag, post-release cleanup.
- 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.
- Route deployments through the Workflow Engine's automated drain, deploy, health-check, return cycle (the path proven by the first automated production run in mid-2026).
- 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
Ready to containeriseModern runtime, no hosted legacy transport: this service can follow the estate's proven container path (Dockerfile, shared pipeline template, ECS via Terraform).
- Add a Dockerfile and make the app read all configuration from environment variables and the secrets manager, never from machine-local files.
- Log to stdout and expose a health check endpoint so ECS can supervise it.
- Adopt the shared ci.yml pipeline template with the container parameters (awsRegion, containerAfterBuild, ecsTerraformRepo), which is exactly how the estate's existing AWS services deploy.
- Define the service in the Terraform repo, deploy to a non-production environment, then shift traffic and disarm the deployment-group release pipeline.
Recommended actions
No specific actions for this repo. It either needs only normal maintenance, or its work is covered by an estate-level action. See the full programme.
Assessment notes
phenix-itineraries
Purpose
Itineraries management for the Phenix platform, split CQRS-style: TC.Itineraries.API (write API at /Api/Itineraries — create/update itineraries, image upload workflows) and TC.Itineraries.Queries.API (read API at /Api/QueriesItineraries — browse and query use cases, e.g. itineraries by destination). Shared App, Core and Infrastructure projects hold the domain, MediatR handlers and Mongo repositories.
Tech stack
C# on .NET 8 with MediatR, FluentValidation, AutoMapper, Asp.Versioning and Swashbuckle. PhenixAuth JWT bearer authentication requiring UserId and CompanyId claims on every business endpoint. MongoDB.Driver with TC.ScriptRunner.Mongo migration scripts, SixLabors.ImageSharp for image processing, TC.AWS.S3 and a Public Assets API client for image storage, TC.ConnectionBroker (Api/Mongo/Redis/Sql/Wcf brokers registered), WebApi.Logger and TC health checks.
Deployment
Two release pipelines under \commercial\itineraries\: phenix-itineraries ui and phenix-itineraries-api [on-prem] (release_count 2), from build pipelines phenix-itineraries ui and phenix-itineraries-api. YAML builds exist in-repo for the two APIs (build-itineraries-api.yml, build-itineraries-queries-api.yml) — but no UI project exists in the repo, so the "ui" build/release pipeline references code that has since been removed or relocated.
Dependencies
Internal packages: TC.ConnectionBroker.* (tc-connectionbroker), TC.Exceptions.WebApiClient.AspNetCore (tc-exceptions), TravelCounsellors.ApiTools (tc-api-tools), TC.Phenix.User.API.Client (phenix-user-api, brokered PhenixUser HTTP client), plus TC.Phenix.ClientApiLibrary and a brokered PublicAssets client (source repos not confirmed). External: AWS S3 for itinerary images and Cognito auth client.
Data stores
MongoDB only: TcItineraries is the primary itinerary store (with in-repo Mongo migration scripts under App/Scripts), and itineraries_api holds request/response logs. No SQL database despite the EF Core SqlServer package appearing in Core (unused).
Integration points
REST with JWT bearer auth (pass-through via ConnectionBroker JwtPassThrough supported); Redis broker registered for caching; outbound REST to the Phenix User API and Public Assets API.
Code health
Good: unit and integration test projects for both APIs (xunit v3, Testcontainers MongoDb, WebApplicationFactory), YAML CI per API, an unusually helpful README covering local JWT acquisition, and active development (last commit 2026-07-22).
Modernisation risks
Low: modern .NET 8, tested, Mongo-backed with no shared-database coupling. Loose ends: the orphaned phenix-itineraries ui build/release pipeline pointing at this repo, an unused EF Core SqlServer package reference, and the on-prem release channel for the write API.