backoffice-pure360-subscription-manager
Windows Forms desktop tool for managing Pure360 marketing subscriptions and opt-ins, driving the Pure360 marketing WCF service and contact data in SQL Server.
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 | Windows Forms, log4net 2.0.17 |
| Runtimes | .NET Framework 4.6.2 |
| Tests / CI | some / CI in place |
| Last commit | 2026-02-24 |
| Owner | Owner unknown (mapping to be curated) |
| Domain | Customer communications (system generated; curate in repo-owners.json to override) |
| Product area | Phenix |
| Hosted | On-prem Deployed to our own machines
|
| Releases | 2 release pipeline(s): \marketing\pure360\backoffice-pure360-subscription-manager develop; \marketing\pure360\backoffice-pure360-subscription-manager release |
| Integration | wcf |
| Source | Open in Azure DevOps |
Risk flags
Each flag links to its glossary definition.
Dependencies in context
Entanglement
kernel Bound into the core by 2 mechanism(s).
- Speaks WCF (client)
- Shares core database sqlserver:EventLog
Detaches when its WCF surface gains a modern interface or its WCF calls move to one; and when the shared database group it belongs to gains an owned API or completes schema separation (sqlserver:EventLog).
Depends on / used by
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. Desktop application distributed to user machines; server-side ZDD does not apply.
SQL Server exit
Blocked by a shared core databasesqlserver:ContactApi1, sqlserver:EventLog are shared, so this system cannot change engine on its own: every sharer moves in convoy. The stage 4 work (named owner, declarative schema, owned API) has to land first; after that, the steps below apply to whatever slice this system ends up owning.
- sqlserver:ContactApi1 is shared with 1 other system(s)
- sqlserver:EventLog is shared with 13 other system(s) and is a core database
- Inventory the schema and query surface of sqlserver:ContactApi1, sqlserver:EventLog: 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).
- Replatform to modern .NET first (see the recommended actions): current PostgreSQL and MongoDB drivers and EF Core providers target modern .NET, and doing one risky change at a time is cheaper than doing two.
- 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
Not appropriateThis is a desktop application distributed to user machines; containers do not apply. Its modernisation path is replacement by a web application, not containerisation.
Recommended actions
Rotate the credentials committed to backoffice-pure360-subscription-manager
Risk flags indicate credentials or keys in source (hardcoded-secrets). Rotate now and enable secret scanning in CI; this is independent of all other work.
Impact: Closes a live security exposure at near-zero cost
proposedReplatform backoffice-pure360-subscription-manager to modern .NET
Runs on .NET Framework 4.6.2, out of mainstream support. No pinning dependency blocks it; sequence by fan-in (providers before consumers). Shares sqlserver:EventLog, so batch it with its database group (stage 4).
Impact: Reduces the end-of-life runtime count
proposedAssessment notes
backoffice-pure360-subscription-manager
Purpose
Internal Windows desktop application ("Subscription Manager") used by marketing/back-office staff to manage Pure360 email-marketing subscriptions: opting contacts in/out, running marketing functions and CSV-based data operations against contact data.
Tech stack
- .NET Framework 4.6.2 WinForms executable (
TC.Marketing.SubscriptionManager, WinExe) with supporting libraries:TC.ContactCentre.MarketingServices(controller layer),TC.ContactCentre.MarketingFunctions.DAL(SQL data access) and a custom config-section project. - log4net logging into the
EventLogSQL database; YamlDotNet; Microsoft.Extensions.DependencyInjection; TC.ConnectionBroker (including the WCF extension) for connection/endpoint resolution. - Per-environment
app.*.configtransforms (qa, preproduction, production); environment selectable via command-line argument.
Deployment
Prod application with 2 releases. Build pipelines "backoffice-pure360-subscription-manager-develop" and "-release"; release pipelines under \marketing\pure360\. Per the README, CI/CD publishes builds to a storage network share (folders for TestQA, DataFixQa, LiveProviderQA, OpsDev) that users launch through the internal Application Launcher. No YAML pipeline in the repo (classic definitions).
Dependencies
- Internal:
backoffice-pure360-marketing-service-api— the app calls its WCF service viaPure360WcfServiceClient(types from TC.Pure360.MarketingService.Shared) for opt-in/opt-out operations;tc-connectionbrokerfor connection-string/endpoint brokering. - External: Pure360 email-marketing platform (indirectly, via the marketing service API).
Data stores
- SQL Server
ContactApi1database (direct DAL access via connection broker) for contact/marketing data. - SQL Server
EventLogdatabase as the log4net logging sink (credentials embedded in config transforms).
Integration points
- Outbound WCF/SOAP calls to the Pure360 marketing service; direct SQL access to contact data.
- No inbound interfaces — it is an operator-driven desktop tool.
Code health
- Unit tests present (
TC.Marketing.SubscriptionManager.Tests: DAL, CSV helper, data-translator, marketing functions) — moderate coverage. - Practical README covering build, versioning (version.props) and deployment; actively maintained (last commit 2026-02-24).
Modernisation risks
- .NET Framework 4.6.2 WinForms client distributed via a network share and app launcher — dependent on Windows desktop estate and domain connectivity.
- Coupled to the legacy WCF marketing service and direct database access; hard-coded SQL credentials in config transforms.