# 24876021/cdms architecture

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

- Interactive diagram: https://gitdiagram.com/24876021/cdms
- Repository: https://github.com/24876021/cdms

## Overview

This is a Vue 2/Spring Boot community-clinic management system. Users register or log in, then use a role-sensitive workspace to manage patient profiles, visit records, medications, and billing; patients can view their own associated records. The backend separates HTTP controllers, business services, and persistence, with RBAC/JWT security, configurable MySQL/SQLite storage, Redis-backed captcha support, and WebSocket notifications. Frontend workflow details are sampled; backend layering and several capabilities are documented in the README, while their source wiring was not sampled.

Main entry points: [`UserLogin/src/main/java/com/example/userlogin/controller`](https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/controller) (HTTP controllers), [`vue123/src/router/index.js`](https://github.com/24876021/cdms/blob/main/vue123/src/router/index.js) (Route selection), [`UserLogin/src/main/java/com/example/userlogin/config/DynamicDataSourceConfig.java`](https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/config/DynamicDataSourceConfig.java) (Dynamic datasource), [`vue123/src/utils/api.js`](https://github.com/24876021/cdms/blob/main/vue123/src/utils/api.js) (HTTP client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_router["Route selection<br/>[index.js]"]
  node_login["Sign in<br/>[Login.vue]"]
  node_register["Registration<br/>[Register.vue]"]
  node_workspace["Clinic workspace<br/>[user.vue]"]
  node_api["HTTP client<br/>[api.js]"]
end

subgraph group_identity["Identity and access"]
  node_security["Authentication filters"]
  node_securityconfig["Security configuration"]
  node_captcha["Captcha service"]
  node_userdomain["User and roles"]
end

subgraph group_clinic["Clinic workflows"]
  node_clinicdomain["Patient and care records"]
  node_billingdomain["Billing records"]
end

subgraph group_backend["Backend services"]
  node_controllers["HTTP controllers"]
  node_mappers["MyBatis mappers"]
  node_websocket["WebSocket push"]
  node_wscontroller["Push endpoint"]
end

subgraph group_storage["Storage and messaging"]
  node_datasource["Dynamic datasource"]
  node_initializer["Database initializer"]
  node_sqlitedb[("SQLite database")]
  node_mysql[("MySQL")]
  node_redis[("Redis")]
end

node_user(("Clinic user"))

node_user -->|"opens app"| node_router
node_router -->|"routes"| node_login
node_router -->|"routes"| node_register
node_router -->|"routes"| node_workspace
node_login -->|"requests"| node_api
node_register -->|"registers via"| node_api
node_workspace -->|"requests"| node_api
node_api -->|"HTTP requests"| node_controllers
node_controllers -->|"secured by"| node_security
node_securityconfig -->|"configures"| node_security
node_controllers -->|"captcha requests"| node_captcha
node_captcha -->|"stores codes"| node_redis
node_controllers -->|"delegates user/roles"| node_userdomain
node_controllers -->|"delegates care records"| node_clinicdomain
node_controllers -->|"delegates billing"| node_billingdomain
node_userdomain -->|"persists identity"| node_mappers
node_clinicdomain -->|"persists care records"| node_mappers
node_billingdomain -->|"persists bills"| node_mappers
node_mappers -->|"database access"| node_datasource
node_datasource -->|"uses fallback"| node_sqlitedb
node_datasource -->|"uses primary"| node_mysql
node_initializer -->|"initializes schema"| node_datasource
node_controllers -->|"push requests"| node_wscontroller
node_wscontroller -->|"dispatches"| node_websocket
node_websocket -->|"pushes updates"| node_workspace

click node_router "https://github.com/24876021/cdms/blob/main/vue123/src/router/index.js"
click node_login "https://github.com/24876021/cdms/blob/main/vue123/src/views/Login.vue"
click node_register "https://github.com/24876021/cdms/blob/main/vue123/src/views/Register.vue"
click node_workspace "https://github.com/24876021/cdms/blob/main/vue123/src/views/user.vue"
click node_api "https://github.com/24876021/cdms/blob/main/vue123/src/utils/api.js"
click node_controllers "https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/controller"
click node_security "https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/filter"
click node_securityconfig "https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/config/SecurityConfig.java"
click node_captcha "https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/controller/KaptchaController.java"
click node_userdomain "https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/service/Impl"
click node_clinicdomain "https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/service/Impl"
click node_billingdomain "https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/service/Impl/BillingRecordServiceImpl.java"
click node_mappers "https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/mapper"
click node_datasource "https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/config/DynamicDataSourceConfig.java"
click node_initializer "https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/utils/DatabaseInitializer.java"
click node_sqlitedb "https://github.com/24876021/cdms/blob/main/UserLogin/data/community_diagnosis_db.db"
click node_websocket "https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/service/Impl/WebSocketServerImpl.java"
click node_wscontroller "https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/controller/WsPushController.java"

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_router,node_login,node_register,node_workspace,node_api,node_user toneBlue
class node_security,node_securityconfig,node_captcha,node_userdomain toneAmber
class node_clinicdomain,node_billingdomain toneMint
class node_controllers,node_mappers,node_websocket,node_wscontroller toneRose
class node_datasource,node_initializer,node_sqlitedb,node_mysql,node_redis toneIndigo
```

## Components

### Web client

- [Route selection](https://github.com/24876021/cdms/blob/main/vue123/src/router/index.js): `vue123/src/router/index.js`
- [Sign in](https://github.com/24876021/cdms/blob/main/vue123/src/views/Login.vue): `vue123/src/views/Login.vue`
- [Registration](https://github.com/24876021/cdms/blob/main/vue123/src/views/Register.vue): `vue123/src/views/Register.vue`
- [Clinic workspace](https://github.com/24876021/cdms/blob/main/vue123/src/views/user.vue): `vue123/src/views/user.vue`
- [HTTP client](https://github.com/24876021/cdms/blob/main/vue123/src/utils/api.js): `vue123/src/utils/api.js`

### Identity and access

- [Authentication filters](https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/filter): `UserLogin/src/main/java/com/example/userlogin/filter`
- [Security configuration](https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/config/SecurityConfig.java): `UserLogin/src/main/java/com/example/userlogin/config/SecurityConfig.java`
- [Captcha service](https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/controller/KaptchaController.java): `UserLogin/src/main/java/com/example/userlogin/controller/KaptchaController.java`
- [User and roles](https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/service/Impl): `UserLogin/src/main/java/com/example/userlogin/service/Impl`

### Clinic workflows

- [Patient and care records](https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/service/Impl): `UserLogin/src/main/java/com/example/userlogin/service/Impl`
- [Billing records](https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/service/Impl/BillingRecordServiceImpl.java): `UserLogin/src/main/java/com/example/userlogin/service/Impl/BillingRecordServiceImpl.java`

### Backend services

- [HTTP controllers](https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/controller): `UserLogin/src/main/java/com/example/userlogin/controller`
- [MyBatis mappers](https://github.com/24876021/cdms/tree/main/UserLogin/src/main/java/com/example/userlogin/mapper): `UserLogin/src/main/java/com/example/userlogin/mapper`
- [WebSocket push](https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/service/Impl/WebSocketServerImpl.java): `UserLogin/src/main/java/com/example/userlogin/service/Impl/WebSocketServerImpl.java`
- [Push endpoint](https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/controller/WsPushController.java): `UserLogin/src/main/java/com/example/userlogin/controller/WsPushController.java`

### Storage and messaging

- [Dynamic datasource](https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/config/DynamicDataSourceConfig.java): `UserLogin/src/main/java/com/example/userlogin/config/DynamicDataSourceConfig.java`
- [Database initializer](https://github.com/24876021/cdms/blob/main/UserLogin/src/main/java/com/example/userlogin/utils/DatabaseInitializer.java): `UserLogin/src/main/java/com/example/userlogin/utils/DatabaseInitializer.java`
- [SQLite database](https://github.com/24876021/cdms/blob/main/UserLogin/data/community_diagnosis_db.db): `UserLogin/data/community_diagnosis_db.db`
- **MySQL**
- **Redis**

### Other components

- **Clinic user**

## Connections

- Clinic user → Route selection: opens app
- Route selection → Sign in: routes
- Route selection → Registration: routes
- Route selection → Clinic workspace: routes
- Sign in → HTTP client: requests
- Registration → HTTP client: registers via
- Clinic workspace → HTTP client: requests
- HTTP client → HTTP controllers: HTTP requests
- HTTP controllers → Authentication filters: secured by
- Security configuration → Authentication filters: configures
- HTTP controllers → Captcha service: captcha requests
- Captcha service → Redis: stores codes
- HTTP controllers → User and roles: delegates user/roles
- HTTP controllers → Patient and care records: delegates care records
- HTTP controllers → Billing records: delegates billing
- User and roles → MyBatis mappers: persists identity
- Patient and care records → MyBatis mappers: persists care records
- Billing records → MyBatis mappers: persists bills
- MyBatis mappers → Dynamic datasource: database access
- Dynamic datasource → SQLite database: uses fallback
- Dynamic datasource → MySQL: uses primary
- Database initializer → Dynamic datasource: initializes schema
- HTTP controllers → Push endpoint: push requests
- Push endpoint → WebSocket push: dispatches
- WebSocket push → Clinic workspace: pushes updates
