# westcoastinformatics/wci-mt2-service architecture

> Architecture diagram of the GitHub repository westcoastinformatics/wci-mt2-service, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/westcoastinformatics/wci-mt2-service
- Repository: https://github.com/westcoastinformatics/wci-mt2-service

## Overview

Refset Service is a REST backend for the Refset Tool GUI, managing reference sets and mapping work while integrating with Snowstorm. The documented workflow is a GUI user calling REST endpoints, with an administrator able to trigger synchronization that loads code systems and reference sets from Snowstorm into the local database. The source index supports the controller, service, persistence, search, and branch-management layers; the README documents major integrations and capabilities. Several subsystem links are dashed because their implementation was not sampled.

Main entry points: [`src/main/java/org/ihtsdo/refsetservice/rest`](https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/rest) (REST Controllers), [`src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetService.java`](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetService.java) (Refset Service), [`src/main/java/org/ihtsdo/refsetservice/service/TerminologyService.java`](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/service/TerminologyService.java) (Terminology Service), [`src/main/java/org/ihtsdo/refsetservice/sync`](https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/sync) (Sync Agents)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_rest_api["REST Controllers"]
end

subgraph group_domain["Refset Domain"]
  node_refset_service["Refset Service<br/>[RefsetService.java]"]
  node_member_service["Member Service"]
  node_domain_models["Domain Models"]
  node_branch_service["Branch Service<br/>[BranchService.java]"]
  node_security_service["Security Service"]
  node_terminology_service["Terminology Service"]
  node_search_handler["Search Handler"]
end

subgraph group_integrations["External Integrations"]
  node_snowstorm_handler["Snowstorm Handler"]
  node_snowstorm["Snowstorm"]
  node_identity["IMS / Crowd"]
end

subgraph group_platform["Persistence and Search"]
  node_mysql[("MySQL Database")]
  node_elasticsearch[("Elasticsearch")]
  node_utilities["Core Utilities"]
end

subgraph group_operations["Sync and Reports"]
  node_sync_agents["Sync Agents"]
  node_export["Export Strategies"]
  node_norway_reports["Norway Reports"]
  node_audit["Audit Service<br/>[AuditService.java]"]
end

node_gui_user(("GUI User"))

node_gui_user -->|"calls REST"| node_rest_api
node_rest_api -.->|"dispatches"| node_refset_service
node_rest_api -.->|"authenticates"| node_security_service
node_refset_service -->|"manages"| node_domain_models
node_member_service -->|"uses"| node_domain_models
node_refset_service -.->|"manages branches"| node_branch_service
node_refset_service -.->|"persists data"| node_terminology_service
node_terminology_service -.->|"reads and writes"| node_mysql
node_terminology_service -->|"dispatches search"| node_search_handler
node_search_handler -.->|"searches"| node_elasticsearch
node_security_service -.->|"authenticates users"| node_identity
node_member_service -->|"exports members"| node_export
node_rest_api -->|"triggers sync"| node_sync_agents
node_sync_agents -->|"loads terminology"| node_snowstorm
node_sync_agents -->|"loads data"| node_mysql
node_snowstorm_handler -.->|"integrates"| node_snowstorm
node_rest_api -.->|"serves reports"| node_norway_reports
node_rest_api -.->|"records activity"| node_audit
node_terminology_service -->|"uses helpers"| node_utilities

click node_rest_api "https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/rest"
click node_refset_service "https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetService.java"
click node_member_service "https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetMemberService.java"
click node_domain_models "https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/model"
click node_branch_service "https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/terminologyservice/BranchService.java"
click node_security_service "https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/service/SecurityService.java"
click node_terminology_service "https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/service/TerminologyService.java"
click node_search_handler "https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/handler/DefaultSearchHandler.java"
click node_snowstorm_handler "https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/handler/SNOMEDSnowstormTerminologyServerHandler.java"
click node_sync_agents "https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/sync"
click node_export "https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/handler/snowstorm/export"
click node_norway_reports "https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/terminologyservice/norway"
click node_audit "https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/service/AuditService.java"
click node_utilities "https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/util"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_rest_api,node_gui_user toneBlue
class node_refset_service,node_member_service,node_domain_models,node_branch_service,node_security_service,node_terminology_service,node_search_handler toneAmber
class node_snowstorm_handler,node_snowstorm,node_identity toneMint
class node_mysql,node_elasticsearch,node_utilities toneRose
class node_sync_agents,node_export,node_norway_reports,node_audit toneIndigo
```

## Components

### REST API

- [REST Controllers](https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/rest): `src/main/java/org/ihtsdo/refsetservice/rest`

### Refset Domain

- [Refset Service](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetService.java): `src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetService.java`
- [Member Service](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetMemberService.java): `src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetMemberService.java`
- [Domain Models](https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/model): `src/main/java/org/ihtsdo/refsetservice/model`
- [Branch Service](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/terminologyservice/BranchService.java): `src/main/java/org/ihtsdo/refsetservice/terminologyservice/BranchService.java`
- [Security Service](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/service/SecurityService.java): `src/main/java/org/ihtsdo/refsetservice/service/SecurityService.java`
- [Terminology Service](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/service/TerminologyService.java): `src/main/java/org/ihtsdo/refsetservice/service/TerminologyService.java`
- [Search Handler](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/handler/DefaultSearchHandler.java): `src/main/java/org/ihtsdo/refsetservice/handler/DefaultSearchHandler.java`

### External Integrations

- [Snowstorm Handler](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/handler/SNOMEDSnowstormTerminologyServerHandler.java): `src/main/java/org/ihtsdo/refsetservice/handler/SNOMEDSnowstormTerminologyServerHandler.java`
- **Snowstorm**
- **IMS / Crowd**

### Persistence and Search

- **MySQL Database**
- **Elasticsearch**
- [Core Utilities](https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/util): `src/main/java/org/ihtsdo/refsetservice/util`

### Sync and Reports

- [Sync Agents](https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/sync): `src/main/java/org/ihtsdo/refsetservice/sync`
- [Export Strategies](https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/handler/snowstorm/export): `src/main/java/org/ihtsdo/refsetservice/handler/snowstorm/export`
- [Norway Reports](https://github.com/westcoastinformatics/wci-mt2-service/tree/main/src/main/java/org/ihtsdo/refsetservice/terminologyservice/norway): `src/main/java/org/ihtsdo/refsetservice/terminologyservice/norway`
- [Audit Service](https://github.com/westcoastinformatics/wci-mt2-service/blob/main/src/main/java/org/ihtsdo/refsetservice/service/AuditService.java): `src/main/java/org/ihtsdo/refsetservice/service/AuditService.java`

### Other components

- **GUI User**

## Connections

- GUI User → REST Controllers: calls REST
- REST Controllers → Refset Service: dispatches (evidence: `src/main/java/org/ihtsdo/refsetservice/rest/RefsetController.java`)
- REST Controllers → Security Service: authenticates (evidence: `src/main/java/org/ihtsdo/refsetservice/rest/RefsetController.java`)
- Refset Service → Domain Models: manages (evidence: `src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetService.java`)
- Member Service → Domain Models: uses (evidence: `src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetMemberService.java`)
- Refset Service → Branch Service: manages branches (evidence: `src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetService.java`)
- Refset Service → Terminology Service: persists data (evidence: `src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetService.java`)
- Terminology Service → MySQL Database: reads and writes
- Terminology Service → Search Handler: dispatches search (evidence: `src/main/java/org/ihtsdo/refsetservice/service/TerminologyService.java`)
- Search Handler → Elasticsearch: searches
- Security Service → IMS / Crowd: authenticates users
- Member Service → Export Strategies: exports members (evidence: `src/main/java/org/ihtsdo/refsetservice/terminologyservice/RefsetMemberService.java`)
- REST Controllers → Sync Agents: triggers sync (evidence: `src/main/java/org/ihtsdo/refsetservice/rest/RefsetController.java`)
- Sync Agents → Snowstorm: loads terminology
- Sync Agents → MySQL Database: loads data
- Snowstorm Handler → Snowstorm: integrates
- REST Controllers → Norway Reports: serves reports
- REST Controllers → Audit Service: records activity
- Terminology Service → Core Utilities: uses helpers (evidence: `src/main/java/org/ihtsdo/refsetservice/service/TerminologyService.java`)
