# thamesblanq/healthconnect architecture

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

- Interactive diagram: https://gitdiagram.com/thamesblanq/healthconnect
- Repository: https://github.com/thamesblanq/healthconnect

## Overview

HealthConnect is a Go HTTP API for user registration, login, and retrieving the authenticated user's profile. The main runtime workflow routes requests to handlers, which invoke application use cases; registration validates and hashes credentials before persisting a user, while login looks up the account, checks its password and activity, and generates a token. The sampled code establishes these use-case and repository calls. Auth handler and middleware internals are not sampled, so their downstream wiring is omitted where it cannot be confirmed.

Main entry points: [`cmd/api/main.go`](https://github.com/thamesblanq/healthconnect/blob/main/cmd/api/main.go) (API server), [`internal/user/application/register_user.go`](https://github.com/thamesblanq/healthconnect/blob/main/internal/user/application/register_user.go) (Register user), [`internal/auth/application/login_user.go`](https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/application/login_user.go) (Login user), [`internal/user/handlers/http.go`](https://github.com/thamesblanq/healthconnect/blob/main/internal/user/handlers/http.go) (User handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_server["API server<br/>[main.go]"]
  node_user_http["User handler<br/>[http.go]"]
  node_auth_http["Auth handler<br/>[http.go]"]
  node_auth_middleware["Auth middleware<br/>[middleware.go]"]
end

subgraph group_users["User lifecycle"]
  node_register["Register user<br/>[register_user.go]"]
  node_user_domain["User model<br/>[user.go]"]
  node_user_repo_port["User repository port<br/>[user_repository.go]"]
  node_user_repo["Postgres user repository<br/>[user_repository.go]"]
end

subgraph group_auth["Authentication"]
  node_login["Login user<br/>[login_user.go]"]
  node_user_provider["Auth user provider<br/>[user_provider.go]"]
  node_jwt_generator["JWT generator<br/>[jwt_generator.go]"]
  node_jwt_verifier["JWT verifier<br/>[jwt_verifier.go]"]
  node_auth_context["Claims context<br/>[context.go]"]
end

subgraph group_infra["Persistence and security"]
  node_password_hasher["Argon2 hasher<br/>[password_hasher.go]"]
  node_config["Configuration<br/>[config.go]"]
  node_db_pool["Postgres pool<br/>[postgres.go]"]
  node_postgres[("PostgreSQL")]
end

node_client(("API client"))

node_client -->|"sends requests"| node_server
node_server -->|"loads settings"| node_config
node_server -->|"opens pool"| node_db_pool
node_db_pool -->|"connects"| node_postgres
node_server -->|"routes registration"| node_user_http
node_server -->|"routes login"| node_auth_http
node_server -->|"protects profile"| node_auth_middleware
node_server -->|"wires use case"| node_register
node_server -->|"wires use case"| node_login
node_server -->|"wires repository"| node_user_repo
node_server -->|"wires hasher"| node_password_hasher
node_server -->|"wires provider"| node_user_provider
node_server -->|"wires generator"| node_jwt_generator
node_server -->|"wires verifier"| node_jwt_verifier
node_user_http -->|"executes"| node_register
node_user_http -->|"reads claims"| node_auth_context
node_register -->|"checks and saves"| node_user_repo_port
node_register -->|"hashes password"| node_password_hasher
node_register -->|"creates user"| node_user_domain
node_user_repo -->|"reads and writes"| node_postgres
node_login -->|"looks up user"| node_user_provider
node_login -->|"compares password"| node_password_hasher
node_login -->|"generates token"| node_jwt_generator
node_user_provider -->|"requests lookup"| node_user_repo_port
node_user_repo -->|"implements"| node_user_repo_port

click node_server "https://github.com/thamesblanq/healthconnect/blob/main/cmd/api/main.go"
click node_user_http "https://github.com/thamesblanq/healthconnect/blob/main/internal/user/handlers/http.go"
click node_auth_http "https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/handlers/http.go"
click node_auth_middleware "https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/handlers/middleware.go"
click node_register "https://github.com/thamesblanq/healthconnect/blob/main/internal/user/application/register_user.go"
click node_user_domain "https://github.com/thamesblanq/healthconnect/blob/main/internal/user/domain/user.go"
click node_user_repo_port "https://github.com/thamesblanq/healthconnect/blob/main/internal/user/ports/user_repository.go"
click node_user_repo "https://github.com/thamesblanq/healthconnect/blob/main/internal/user/adapters/postgres/user_repository.go"
click node_login "https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/application/login_user.go"
click node_user_provider "https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/adapters/user_provider.go"
click node_jwt_generator "https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/adapters/jwt/jwt_generator.go"
click node_jwt_verifier "https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/adapters/jwt/jwt_verifier.go"
click node_auth_context "https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/handlers/context.go"
click node_password_hasher "https://github.com/thamesblanq/healthconnect/blob/main/internal/security/adapters/argon2/password_hasher.go"
click node_config "https://github.com/thamesblanq/healthconnect/blob/main/internal/config/config.go"
click node_db_pool "https://github.com/thamesblanq/healthconnect/blob/main/internal/database/postgres.go"

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_server,node_user_http,node_auth_http,node_auth_middleware,node_client toneBlue
class node_register,node_user_domain,node_user_repo_port,node_user_repo toneAmber
class node_login,node_user_provider,node_jwt_generator,node_jwt_verifier,node_auth_context toneMint
class node_password_hasher,node_config,node_db_pool,node_postgres toneRose
```

## Components

### HTTP API

- [API server](https://github.com/thamesblanq/healthconnect/blob/main/cmd/api/main.go): `cmd/api/main.go`
- [User handler](https://github.com/thamesblanq/healthconnect/blob/main/internal/user/handlers/http.go): `internal/user/handlers/http.go`
- [Auth handler](https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/handlers/http.go): `internal/auth/handlers/http.go`
- [Auth middleware](https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/handlers/middleware.go): `internal/auth/handlers/middleware.go`

### User lifecycle

- [Register user](https://github.com/thamesblanq/healthconnect/blob/main/internal/user/application/register_user.go): `internal/user/application/register_user.go`
- [User model](https://github.com/thamesblanq/healthconnect/blob/main/internal/user/domain/user.go): `internal/user/domain/user.go`
- [User repository port](https://github.com/thamesblanq/healthconnect/blob/main/internal/user/ports/user_repository.go): `internal/user/ports/user_repository.go`
- [Postgres user repository](https://github.com/thamesblanq/healthconnect/blob/main/internal/user/adapters/postgres/user_repository.go): `internal/user/adapters/postgres/user_repository.go`

### Authentication

- [Login user](https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/application/login_user.go): `internal/auth/application/login_user.go`
- [Auth user provider](https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/adapters/user_provider.go): `internal/auth/adapters/user_provider.go`
- [JWT generator](https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/adapters/jwt/jwt_generator.go): `internal/auth/adapters/jwt/jwt_generator.go`
- [JWT verifier](https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/adapters/jwt/jwt_verifier.go): `internal/auth/adapters/jwt/jwt_verifier.go`
- [Claims context](https://github.com/thamesblanq/healthconnect/blob/main/internal/auth/handlers/context.go): `internal/auth/handlers/context.go`

### Persistence and security

- [Argon2 hasher](https://github.com/thamesblanq/healthconnect/blob/main/internal/security/adapters/argon2/password_hasher.go): `internal/security/adapters/argon2/password_hasher.go`
- [Configuration](https://github.com/thamesblanq/healthconnect/blob/main/internal/config/config.go): `internal/config/config.go`
- [Postgres pool](https://github.com/thamesblanq/healthconnect/blob/main/internal/database/postgres.go): `internal/database/postgres.go`
- **PostgreSQL**

### Other components

- **API client**

## Connections

- API client → API server: sends requests
- API server → Configuration: loads settings
- API server → Postgres pool: opens pool
- Postgres pool → PostgreSQL: connects
- API server → User handler: routes registration
- API server → Auth handler: routes login
- API server → Auth middleware: protects profile
- API server → Register user: wires use case
- API server → Login user: wires use case
- API server → Postgres user repository: wires repository
- API server → Argon2 hasher: wires hasher
- API server → Auth user provider: wires provider
- API server → JWT generator: wires generator
- API server → JWT verifier: wires verifier
- User handler → Register user: executes
- User handler → Claims context: reads claims
- Register user → User repository port: checks and saves
- Register user → Argon2 hasher: hashes password
- Register user → User model: creates user
- Postgres user repository → PostgreSQL: reads and writes
- Login user → Auth user provider: looks up user
- Login user → Argon2 hasher: compares password
- Login user → JWT generator: generates token
- Auth user provider → User repository port: requests lookup
- Postgres user repository → User repository port: implements
