tc-gift-registry
ASP.NET Core 8 API for creating and managing gift-collection accounts (honeymoon funds, group bookings, gift registries), replacing the legacy honeymoon booking system.
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, FluentValidation 12, Serilog, Mediator 3, GraphQL.Client 6, Swashbuckle/NSwag |
| Runtimes | .NET 8 |
| Tests / CI | good / CI in place |
| Last commit | 2026-07-08 |
| Owner | Owner unknown (mapping to be curated) |
| Domain | Public web (system generated; curate in repo-owners.json to override) |
| Product area | Shared platform |
| Hosted | AWS + on-prem Ships artefacts to both AWS and on-prem machines (see evidence below)
|
| Releases | 1 release pipeline(s): \finance\tc-gift-registry\tc-gift-registry-api on-prem |
| Integration | rest, graphql, jwt, wcf |
| Source | Open in Azure DevOps |
Dependencies in context
Entanglement
kernel Bound into the core by 2 mechanism(s).
- Pinning dependency: mailtemplate-service, application-framework
- Speaks WCF (client)
Detaches when its pinning dependencies are cut or multi-targeted (mailtemplate-service, application-framework); and when its WCF surface gains a modern interface or its WCF calls move to one.
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. Some artefacts still deploy on-prem; they follow the on-prem path. Separating it from the three-week release is a process decision, not a technical one.
- 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
- Consumes WCF contract packages: never take a breaking client bump mid-feature, and treat obsolete warnings as migration debt
- 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
Blocked by a shared databasesqlserver:CustomerPortal is shared, so this system cannot change engine on its own: every sharer moves in convoy. Either agree the move with all sharers as one programme, or first split this system's data out behind an owned API, then follow the steps below.
- Inventory the schema and query surface of sqlserver:CustomerPortal: tables, stored procedures, triggers, cross-database joins and anything else engine-specific.
- Confirm the target: PostgreSQL (relational model; keep transactions and joins, swap the engine).
- Data access is not through an ORM, so port the SQL by hand: translate T-SQL constructs, replace stored procedures with application code or target-native equivalents, and add integration tests around the queries that matter first.
- Stand up the target alongside SQL Server, backfill with an ETL pass (pgloader or an export/import job), then dual-write or replicate until parity is proven.
- Move reads to the target, watch correctness and latency, then cut writes over and keep SQL Server read-only until confidence is earned.
- Decommission the SQL Server database and remove the connection strings and firewall paths that pointed at it.
Containerisation
Partially containerisedPart of this repo already builds containers for AWS while other artefacts still deploy to on-prem machines. Finish the job by moving the remaining artefacts (see the hosting evidence on this page) through the same pipeline template.
- Identify the artefacts still deploying through deployment-group release pipelines (listed in the hosting evidence).
- Move each to the shared ci.yml pipeline template with the container parameters, as the already-containerised artefacts in this repo do.
- Disarm the old release pipelines once traffic is confirmed on the new deployment.
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
tc-gift-registry
Purpose
Gift Registry replaces the legacy "honeymoon" booking system with an extensible platform for collection accounts of three types (Honeymoon, Group Booking, Gift Registry), where friends and family contribute funds towards a customer's travel. Creating a registry provisions a miscellaneous booking component against a Phenix Group Supplier; the API also migrates legacy honeymoon bookings and sends contribution notification emails.
Tech stack
C# on .NET 8 with a layered solution (API, API.AWS, Application, Common, DataAccess, AccountsGraphQLIntegration, Honeymoon.Database, Permissions.ApiClient, published API.Client). Asp.Versioning, FluentValidation 12, Mediator source generator, Serilog, Swashbuckle plus an NSwag-generated client, PhenixAuth/Phenix.Auth.JWTBearer and TC.Cognito auth, TC.ConnectionBroker (Api/HttpClient/Mongo/Sql/Wcf), Nerdbank GitVersioning.
Deployment
Included as prod_application with 1 release: release pipeline \finance\tc-gift-registry\tc-gift-registry-api on-prem from build tc-gift-registry. YAML CI uses the shared InternalOSS/azure-pipelines-templates (SDK 8.x) building the API app and packing the client package; a second azure-pipelines-aws.yml plus a dedicated TC.GiftRegistry.API.AWS host indicates a parallel AWS/container deployment path. Per-environment appsettings (testqa, qa, preproduction, production, live, training, datafixqa).
Dependencies
Internal: TC.ConnectionBroker.* (tc-connectionbroker), TC.Exceptions.WebApiClient (webapi-exceptions), TC.Mail.Template.ServiceContract (mailtemplate-service), TC.Phenix.User.API.Client (phenix-user-api), TC.Teams.API.Client (teams-service), TC.Permissions.Api.Client (tc-permissions-api), TC.ExchangeRate.ServiceContract (exchange-rate-service), TC.UserAccount.ServiceClient (backoffice-useraccount-service), TC.Phenix.ApplicationFramework (application-framework), plus the TC Accounts GraphQL API for Phenix booking lookups and TC.Phenix.Services.Client/TC.Public.Assets.Api.Client (source repos not confirmed). External: AWS Cognito auth, New Relic APM.
Data stores
Owns the GiftRegistry MongoDB database (Account, EmailAudit, RequestLogs collections via ConnectionBroker Mongo). Also reads the legacy dbo.HoneymoonAccount table from the SQL Server CustomerPortal database (via ConnectionBroker) for legacy honeymoon migration.
Integration points
REST/JSON API (versioned, Swagger, generated NSwag client) secured with PhenixAuth JWT and Cognito; outbound GraphQL to the Accounts API; outbound WCF (ConnectionBroker.Wcf) to the mail-template service for notification emails.
Code health
Good: five xunit.v3 test projects with ~277 tests across API, AWS host, Application, Common and Permissions layers; coverlet coverage; a substantive, maintained README covering supplier configuration. Actively developed (last commit 2026-07-08).
Modernisation risks
Low — modern .NET 8, YAML CI and solid tests. Residual concerns: the WCF client dependency on the legacy mail-template service, a read dependency on the legacy CustomerPortal SQL database that must persist until honeymoon migration completes, and dual on-prem/AWS hosting paths that double the deployment surface.