# benahmedamir/fizz-buzz-test architecture

> Architecture diagram of the GitHub repository benahmedamir/fizz-buzz-test, 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/benahmedamir/fizz-buzz-test
- Repository: https://github.com/benahmedamir/fizz-buzz-test

## Overview

This is a small Go HTTP API. A client request enters the router, reaches the FizzBuzz handler, has its query parameters parsed, and is validated and computed by the domain service; successful computations are recorded for the statistics endpoint. The server also exposes health and embedded OpenAPI/Swagger documentation. The graph reflects the sampled implementation and README; documentation and health routes are included, while no separate persistent store or external API is documented.

Main entry points: [`internal/handler/handler.go`](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/handler.go) (API Handler), [`internal/handler/router.go`](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/router.go) (Route Router), [`internal/fizzbuzz/service.go`](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/fizzbuzz/service.go) (FizzBuzz Service), [`cmd/server/main.go`](https://github.com/benahmedamir/fizz-buzz-test/blob/master/cmd/server/main.go) (Server Bootstrap)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_http["HTTP API"]
  node_router["Route Router<br/>[router.go]"]
  node_middleware["Request Middleware<br/>[middleware.go]"]
  node_handler["API Handler<br/>[handler.go]"]
  node_params["Query Parsing<br/>[params.go]"]
  node_response["HTTP Responses<br/>[handler.go]"]
  node_health["Health Endpoint<br/>[handler.go]"]
end

subgraph group_domain["FizzBuzz Domain"]
  node_service["FizzBuzz Service<br/>[service.go]"]
  node_validation["Request Validation<br/>[validation.go]"]
  node_generator["Sequence Generator<br/>[fizzbuzz.go]"]
end

subgraph group_stats["Request Statistics"]
  node_counter[("Request Counter<br/>[stats.go]")]
end

subgraph group_runtime["Server Runtime"]
  node_config["Environment Config<br/>[config.go]"]
  node_server["Server Bootstrap<br/>[main.go]"]
end

subgraph group_docs["API Documentation"]
  node_docs_handler["Documentation Handler<br/>[docs.go]"]
  node_openapi["OpenAPI Spec<br/>[openapi.yaml]"]
  node_swagger["Swagger UI<br/>[swagger.html]"]
end

node_client(("API Client"))
node_browser(("Documentation Browser"))
node_cdn["Swagger CDN"]

node_client -->|"sends HTTP"| node_router
node_router -->|"wraps routes"| node_middleware
node_router -->|"dispatches API"| node_handler
node_middleware -->|"forwards requests"| node_handler
node_handler -->|"parses query"| node_params
node_handler -->|"computes request"| node_service
node_service -->|"validates"| node_validation
node_service -->|"generates sequence"| node_generator
node_service -->|"records success"| node_counter
node_handler -->|"reads top request"| node_counter
node_handler -->|"writes results"| node_response
node_handler -->|"serves health"| node_health
node_router -->|"dispatches docs"| node_docs_handler
node_docs_handler -->|"serves spec"| node_openapi
node_docs_handler -->|"serves UI"| node_swagger
node_browser -->|"requests docs"| node_router
node_swagger -.->|"loads viewer assets"| node_cdn
node_browser -.->|"fetches viewer"| node_cdn
node_server -->|"loads settings"| node_config
node_server -->|"creates counter"| node_counter
node_server -->|"creates service"| node_service
node_server -->|"starts HTTP server"| node_router

click node_router "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/router.go"
click node_middleware "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/middleware.go"
click node_handler "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/handler.go"
click node_params "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/params.go"
click node_response "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/handler.go"
click node_service "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/fizzbuzz/service.go"
click node_validation "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/fizzbuzz/validation.go"
click node_generator "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/fizzbuzz/fizzbuzz.go"
click node_counter "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/stats/stats.go"
click node_config "https://github.com/benahmedamir/fizz-buzz-test/blob/master/cmd/server/config.go"
click node_server "https://github.com/benahmedamir/fizz-buzz-test/blob/master/cmd/server/main.go"
click node_health "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/handler.go"
click node_docs_handler "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/docs.go"
click node_openapi "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/openapi.yaml"
click node_swagger "https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/swagger.html"

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_middleware,node_handler,node_params,node_response,node_health,node_client,node_browser toneBlue
class node_service,node_validation,node_generator toneAmber
class node_counter toneMint
class node_config,node_server toneRose
class node_docs_handler,node_openapi,node_swagger,node_cdn toneIndigo
```

## Components

### HTTP API

- [Route Router](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/router.go): `internal/handler/router.go`
- [Request Middleware](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/middleware.go): `internal/handler/middleware.go`
- [API Handler](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/handler.go): `internal/handler/handler.go`
- [Query Parsing](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/params.go): `internal/handler/params.go`
- [HTTP Responses](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/handler.go): `internal/handler/handler.go`
- [Health Endpoint](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/handler.go): `internal/handler/handler.go`

### FizzBuzz Domain

- [FizzBuzz Service](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/fizzbuzz/service.go): `internal/fizzbuzz/service.go`
- [Request Validation](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/fizzbuzz/validation.go): `internal/fizzbuzz/validation.go`
- [Sequence Generator](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/fizzbuzz/fizzbuzz.go): `internal/fizzbuzz/fizzbuzz.go`

### Request Statistics

- [Request Counter](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/stats/stats.go): `internal/stats/stats.go`

### Server Runtime

- [Environment Config](https://github.com/benahmedamir/fizz-buzz-test/blob/master/cmd/server/config.go): `cmd/server/config.go`
- [Server Bootstrap](https://github.com/benahmedamir/fizz-buzz-test/blob/master/cmd/server/main.go): `cmd/server/main.go`

### API Documentation

- [Documentation Handler](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/docs.go): `internal/handler/docs.go`
- [OpenAPI Spec](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/openapi.yaml): `internal/handler/openapi.yaml`
- [Swagger UI](https://github.com/benahmedamir/fizz-buzz-test/blob/master/internal/handler/swagger.html): `internal/handler/swagger.html`

### Other components

- **API Client**
- **Documentation Browser**
- **Swagger CDN**

## Connections

- API Client → Route Router: sends HTTP
- Route Router → Request Middleware: wraps routes
- Route Router → API Handler: dispatches API
- Request Middleware → API Handler: forwards requests
- API Handler → Query Parsing: parses query
- API Handler → FizzBuzz Service: computes request
- FizzBuzz Service → Request Validation: validates
- FizzBuzz Service → Sequence Generator: generates sequence
- FizzBuzz Service → Request Counter: records success
- API Handler → Request Counter: reads top request
- API Handler → HTTP Responses: writes results
- API Handler → Health Endpoint: serves health
- Route Router → Documentation Handler: dispatches docs
- Documentation Handler → OpenAPI Spec: serves spec
- Documentation Handler → Swagger UI: serves UI
- Documentation Browser → Route Router: requests docs
- Swagger UI → Swagger CDN: loads viewer assets
- Documentation Browser → Swagger CDN: fetches viewer
- Server Bootstrap → Environment Config: loads settings
- Server Bootstrap → Request Counter: creates counter
- Server Bootstrap → FizzBuzz Service: creates service
- Server Bootstrap → Route Router: starts HTTP server
