# miracleboy-rw/amr architecture

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

- Interactive diagram: https://gitdiagram.com/miracleboy-rw/amr
- Repository: https://github.com/miracleboy-rw/amr

## Overview

This repository is an antimicrobial-resistance surveillance platform: users browse species information, submit sequencing samples, and view surveillance results; administrators manage platform data and users. A Go API serves the React application, while a separate worker consumes analysis jobs and runs genomic tools. A file service handles berkas (file) operations, and Python scripts prepare and synchronize database data. The tree and excerpts support these component roles, but wiring for several unsampled routes and services is omitted where call relationships cannot be confirmed.

Main entry points: [`amr-wf/src/amr/index.go`](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/index.go) (AMR analysis stages), [`arm-react/src/App.jsx`](https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/App.jsx) (Application routes), [`arm-react/src/api/client.js`](https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/api/client.js) (API client), [`amr-go/src/routes/index.go`](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/routes/index.go) (API routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web application"]
  node_react["Application routes<br/>[App.jsx]"]
  node_authui["Authentication UI<br/>[AuthPage.jsx]"]
  node_sampleui["Sample workflows<br/>[useSamples.js]"]
  node_speciesui["Species browsing<br/>[SpeciesPage.jsx]"]
  node_dashboardui["Surveillance dashboards<br/>[Dashboard.jsx]"]
  node_adminui["Admin console<br/>[AdminPage.jsx]"]
  node_apiclient["API client<br/>[client.js]"]
end

subgraph group_api["Platform API"]
  node_server["HTTP server<br/>[main.go]"]
  node_routes["API routes<br/>[index.go]"]
  node_authhandler["Authentication handlers<br/>[auth_handler.go]"]
  node_authservice["Authentication services<br/>[auth_service.go]"]
  node_authrepo["Authentication repository<br/>[auth_repository.go]"]
  node_samplehandler["Sample handlers<br/>[sample_handler.go]"]
  node_analysisservice["Analysis services"]
  node_dashboardhandler["Dashboard handlers"]
  node_adminhandler["Admin handlers<br/>[admin_handler.go]"]
end

subgraph group_analysis["Analysis worker"]
  node_worker["Analysis consumer<br/>[main.go]"]
  node_amrflow["AMR analysis stages<br/>[index.go]"]
  node_fastp["Read trimming<br/>[runFastp.go]"]
  node_fastuniq["Read deduplication<br/>[runFastUniq.go]"]
  node_spades["Genome assembly<br/>[runSpades.go]"]
  node_kraken["Taxonomic classification<br/>[runKraken2.go]"]
  node_mlst["MLST typing<br/>[runMlst.go]"]
  node_rgi["Resistance detection<br/>[runRgi.go]"]
  node_amrfinder["AMRFinder analysis<br/>[runAMRFinder.go]"]
  node_workerrepo["Analysis persistence"]
end

subgraph group_files["File service"]
  node_fileserver["File HTTP server<br/>[main.go]"]
  node_fileroutes["File routes<br/>[index.go]"]
  node_filehandlers["File operations<br/>[berkas.go]"]
  node_filedb["File metadata store<br/>[mongo.go]"]
end

subgraph group_dataops["Database operations"]
end

node_user(("User"))
node_admin(("Administrator"))
node_mongodb[("MongoDB")]
node_broker["RabbitMQ"]

node_user -->|"uses"| node_react
node_admin -->|"uses"| node_react
node_react -->|"routes to"| node_authui
node_react -->|"routes to"| node_sampleui
node_react -->|"routes to"| node_speciesui
node_react -->|"routes to"| node_dashboardui
node_react -->|"routes to"| node_adminui
node_authui -->|"requests"| node_apiclient
node_sampleui -->|"requests"| node_apiclient
node_speciesui -->|"requests"| node_apiclient
node_dashboardui -->|"requests"| node_apiclient
node_adminui -->|"requests"| node_apiclient
node_apiclient -->|"HTTP requests"| node_server
node_server -->|"registers"| node_routes
node_routes -->|"dispatches"| node_authhandler
node_routes -->|"dispatches"| node_samplehandler
node_routes -->|"dispatches"| node_dashboardhandler
node_routes -->|"dispatches"| node_adminhandler
node_authhandler -->|"calls"| node_authservice
node_authservice -->|"calls"| node_authrepo
node_authrepo -->|"reads/writes"| node_mongodb
node_samplehandler -->|"calls"| node_analysisservice
node_dashboardhandler -->|"queries"| node_mongodb
node_adminhandler -->|"manages"| node_mongodb
node_broker -->|"delivers jobs"| node_worker
node_worker -->|"loads sample"| node_mongodb
node_worker -->|"runs analysis"| node_amrflow
node_amrflow -->|"runs stage"| node_fastp
node_amrflow -->|"runs stage"| node_fastuniq
node_amrflow -->|"runs stage"| node_spades
node_amrflow -->|"runs stage"| node_kraken
node_amrflow -->|"runs stage"| node_mlst
node_amrflow -->|"runs stage"| node_rgi
node_amrflow -->|"runs stage"| node_amrfinder
node_worker -->|"persists results"| node_workerrepo
node_workerrepo -->|"writes results"| node_mongodb
node_user -->|"requests files"| node_fileserver
node_fileserver -->|"registers"| node_fileroutes
node_fileroutes -->|"dispatches"| node_filehandlers
node_filehandlers -->|"uses"| node_filedb
node_filedb -->|"stores metadata"| node_mongodb

click node_react "https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/App.jsx"
click node_authui "https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/pages/auth/AuthPage.jsx"
click node_sampleui "https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/hooks/useSamples.js"
click node_speciesui "https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/pages/species/SpeciesPage.jsx"
click node_dashboardui "https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/pages/Dashboard.jsx"
click node_adminui "https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/pages/admin/AdminPage.jsx"
click node_apiclient "https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/api/client.js"
click node_server "https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/main.go"
click node_routes "https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/routes/index.go"
click node_authhandler "https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/handlers/auth_handler.go"
click node_authservice "https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/services/auth_service.go"
click node_authrepo "https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/repository/auth_repository.go"
click node_samplehandler "https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/handlers/sample_handler.go"
click node_analysisservice "https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/services/analysis_service.go"
click node_dashboardhandler "https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/handlers/dashboard_handler.go"
click node_adminhandler "https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/handlers/admin_handler.go"
click node_worker "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/main.go"
click node_amrflow "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/index.go"
click node_fastp "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runFastp.go"
click node_fastuniq "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runFastUniq.go"
click node_spades "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runSpades.go"
click node_kraken "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runKraken2.go"
click node_mlst "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runMlst.go"
click node_rgi "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runRgi.go"
click node_amrfinder "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runAMRFinder.go"
click node_workerrepo "https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/repository/result_repository.go"
click node_fileserver "https://github.com/miracleboy-rw/amr/blob/main/amr-berkas/src/main.go"
click node_fileroutes "https://github.com/miracleboy-rw/amr/blob/main/amr-berkas/src/routes/index.go"
click node_filehandlers "https://github.com/miracleboy-rw/amr/blob/main/amr-berkas/src/handlers/berkas.go"
click node_filedb "https://github.com/miracleboy-rw/amr/blob/main/amr-berkas/src/database/mongo.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_react,node_authui,node_sampleui,node_speciesui,node_dashboardui,node_adminui,node_apiclient,node_user toneBlue
class node_server,node_routes,node_authhandler,node_authservice,node_authrepo,node_samplehandler,node_analysisservice,node_dashboardhandler,node_adminhandler,node_mongodb toneAmber
class node_worker,node_amrflow,node_fastp,node_fastuniq,node_spades,node_kraken,node_mlst,node_rgi,node_amrfinder,node_workerrepo toneMint
class node_fileserver,node_fileroutes,node_filehandlers,node_filedb toneRose
class node_admin,node_broker toneIndigo
```

## Components

### Web application

- [Application routes](https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/App.jsx): `arm-react/src/App.jsx`
- [Authentication UI](https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/pages/auth/AuthPage.jsx): `arm-react/src/pages/auth/AuthPage.jsx`
- [Sample workflows](https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/hooks/useSamples.js): `arm-react/src/hooks/useSamples.js`
- [Species browsing](https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/pages/species/SpeciesPage.jsx): `arm-react/src/pages/species/SpeciesPage.jsx`
- [Surveillance dashboards](https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/pages/Dashboard.jsx): `arm-react/src/pages/Dashboard.jsx`
- [Admin console](https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/pages/admin/AdminPage.jsx): `arm-react/src/pages/admin/AdminPage.jsx`
- [API client](https://github.com/miracleboy-rw/amr/blob/main/arm-react/src/api/client.js): `arm-react/src/api/client.js`

### Platform API

- [HTTP server](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/main.go): `amr-go/src/main.go`
- [API routes](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/routes/index.go): `amr-go/src/routes/index.go`
- [Authentication handlers](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/handlers/auth_handler.go): `amr-go/src/handlers/auth_handler.go`
- [Authentication services](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/services/auth_service.go): `amr-go/src/services/auth_service.go`
- [Authentication repository](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/repository/auth_repository.go): `amr-go/src/repository/auth_repository.go`
- [Sample handlers](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/handlers/sample_handler.go): `amr-go/src/handlers/sample_handler.go`
- [Analysis services](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/services/analysis_service.go): `amr-go/src/services/analysis_service.go`
- [Dashboard handlers](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/handlers/dashboard_handler.go): `amr-go/src/handlers/dashboard_handler.go`
- [Admin handlers](https://github.com/miracleboy-rw/amr/blob/main/amr-go/src/handlers/admin_handler.go): `amr-go/src/handlers/admin_handler.go`

### Analysis worker

- [Analysis consumer](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/main.go): `amr-wf/src/main.go`
- [AMR analysis stages](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/index.go): `amr-wf/src/amr/index.go`
- [Read trimming](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runFastp.go): `amr-wf/src/amr/runFastp.go`
- [Read deduplication](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runFastUniq.go): `amr-wf/src/amr/runFastUniq.go`
- [Genome assembly](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runSpades.go): `amr-wf/src/amr/runSpades.go`
- [Taxonomic classification](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runKraken2.go): `amr-wf/src/amr/runKraken2.go`
- [MLST typing](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runMlst.go): `amr-wf/src/amr/runMlst.go`
- [Resistance detection](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runRgi.go): `amr-wf/src/amr/runRgi.go`
- [AMRFinder analysis](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/amr/runAMRFinder.go): `amr-wf/src/amr/runAMRFinder.go`
- [Analysis persistence](https://github.com/miracleboy-rw/amr/blob/main/amr-wf/src/repository/result_repository.go): `amr-wf/src/repository/result_repository.go`

### File service

- [File HTTP server](https://github.com/miracleboy-rw/amr/blob/main/amr-berkas/src/main.go): `amr-berkas/src/main.go`
- [File routes](https://github.com/miracleboy-rw/amr/blob/main/amr-berkas/src/routes/index.go): `amr-berkas/src/routes/index.go`
- [File operations](https://github.com/miracleboy-rw/amr/blob/main/amr-berkas/src/handlers/berkas.go): `amr-berkas/src/handlers/berkas.go`
- [File metadata store](https://github.com/miracleboy-rw/amr/blob/main/amr-berkas/src/database/mongo.go): `amr-berkas/src/database/mongo.go`

### Other components

- **User**
- **Administrator**
- **MongoDB**
- **RabbitMQ**

## Connections

- User → Application routes: uses
- Administrator → Application routes: uses
- Application routes → Authentication UI: routes to
- Application routes → Sample workflows: routes to
- Application routes → Species browsing: routes to
- Application routes → Surveillance dashboards: routes to
- Application routes → Admin console: routes to
- Authentication UI → API client: requests
- Sample workflows → API client: requests
- Species browsing → API client: requests
- Surveillance dashboards → API client: requests
- Admin console → API client: requests
- API client → HTTP server: HTTP requests
- HTTP server → API routes: registers
- API routes → Authentication handlers: dispatches
- API routes → Sample handlers: dispatches
- API routes → Dashboard handlers: dispatches
- API routes → Admin handlers: dispatches
- Authentication handlers → Authentication services: calls
- Authentication services → Authentication repository: calls
- Authentication repository → MongoDB: reads/writes
- Sample handlers → Analysis services: calls
- Dashboard handlers → MongoDB: queries
- Admin handlers → MongoDB: manages
- RabbitMQ → Analysis consumer: delivers jobs
- Analysis consumer → MongoDB: loads sample
- Analysis consumer → AMR analysis stages: runs analysis
- AMR analysis stages → Read trimming: runs stage
- AMR analysis stages → Read deduplication: runs stage
- AMR analysis stages → Genome assembly: runs stage
- AMR analysis stages → Taxonomic classification: runs stage
- AMR analysis stages → MLST typing: runs stage
- AMR analysis stages → Resistance detection: runs stage
- AMR analysis stages → AMRFinder analysis: runs stage
- Analysis consumer → Analysis persistence: persists results
- Analysis persistence → MongoDB: writes results
- User → File HTTP server: requests files
- File HTTP server → File routes: registers
- File routes → File operations: dispatches
- File operations → File metadata store: uses
- File metadata store → MongoDB: stores metadata
