# nitrosaccharose/go-web architecture

> Architecture diagram of the GitHub repository nitrosaccharose/go-web, 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/nitrosaccharose/go-web
- Repository: https://github.com/nitrosaccharose/go-web

## Overview

Govo is a small full-stack demo for user CRUD and expiring Redis key/value records. A user works in the Vue screen: user changes are sent over HTTP to Gin routes and handled against MySQL; KVT creation and polling go through Gin to Redis, with returned values and TTL displayed in the screen. The backend also exposes user lookups by name and account. Startup initializes both data clients before serving. The main screen and backend handlers support these flows; some frontend and model details are inferred from the README and tree, not sampled source.

Main entry points: [`routers/router.go`](https://github.com/nitrosaccharose/go-web/blob/main/routers/router.go) (API routes), [`sql/sql.go`](https://github.com/nitrosaccharose/go-web/blob/main/sql/sql.go) (MySQL access), [`main.go`](https://github.com/nitrosaccharose/go-web/blob/main/main.go) (Server startup), [`controller/UserController.go`](https://github.com/nitrosaccharose/go-web/blob/main/controller/UserController.go) (User handlers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Vue interface"]
  node_screen["Main screen<br/>[main.vue]"]
  node_http["HTTP client<br/>[request.js]"]
  node_app["Vue app<br/>[App.vue]"]
  node_frontend_entry["Frontend entry<br/>[main.js]"]
  node_web_router["Web router<br/>[index.js]"]
end

subgraph group_backend["Gin API"]
  node_server["Server startup<br/>[main.go]"]
  node_api_router["API routes<br/>[router.go]"]
  node_user_handlers["User handlers<br/>[UserController.go]"]
  node_kvt_handlers["KVT handlers"]
end

subgraph group_data["Data access"]
  node_user_model["User model<br/>[User.go]"]
  node_kvt_model["KVT model<br/>[KVTObject.go]"]
  node_mysql_access["MySQL access<br/>[sql.go]"]
  node_redis_access["Redis access<br/>[redis.go]"]
end

subgraph group_services["External stores"]
  node_mysql[("MySQL")]
  node_redis[("Redis cluster")]
end

node_user(("User"))

node_user -->|"uses"| node_screen
node_frontend_entry -->|"mounts"| node_app
node_frontend_entry -->|"installs"| node_web_router
node_app -->|"renders routes"| node_web_router
node_web_router -->|"routes to"| node_screen
node_screen -->|"sends requests"| node_http
node_http -->|"HTTP"| node_api_router
node_server -->|"connects"| node_mysql_access
node_server -->|"connects"| node_redis_access
node_server -->|"serves"| node_api_router
node_api_router -->|"dispatches"| node_user_handlers
node_api_router -->|"dispatches"| node_kvt_handlers
node_user_handlers -->|"queries"| node_mysql_access
node_user_handlers -->|"binds records"| node_user_model
node_mysql_access -->|"migrates"| node_user_model
node_mysql_access -->|"reads/writes"| node_mysql
node_kvt_handlers -->|"gets/sets TTL"| node_redis_access
node_kvt_handlers -->|"binds response"| node_kvt_model
node_redis_access -->|"commands"| node_redis

click node_screen "https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/views/main.vue"
click node_http "https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/src/request.js"
click node_app "https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/src/App.vue"
click node_frontend_entry "https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/src/main.js"
click node_web_router "https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/router/index.js"
click node_server "https://github.com/nitrosaccharose/go-web/blob/main/main.go"
click node_api_router "https://github.com/nitrosaccharose/go-web/blob/main/routers/router.go"
click node_user_handlers "https://github.com/nitrosaccharose/go-web/blob/main/controller/UserController.go"
click node_kvt_handlers "https://github.com/nitrosaccharose/go-web/blob/main/controller/KVTObjectController.go"
click node_user_model "https://github.com/nitrosaccharose/go-web/blob/main/model/User.go"
click node_kvt_model "https://github.com/nitrosaccharose/go-web/blob/main/model/KVTObject.go"
click node_mysql_access "https://github.com/nitrosaccharose/go-web/blob/main/sql/sql.go"
click node_redis_access "https://github.com/nitrosaccharose/go-web/blob/main/redis/redis.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_screen,node_http,node_app,node_frontend_entry,node_web_router,node_user toneBlue
class node_server,node_api_router,node_user_handlers,node_kvt_handlers toneAmber
class node_user_model,node_kvt_model,node_mysql_access,node_redis_access toneMint
class node_mysql,node_redis toneRose
```

## Components

### Vue interface

- [Main screen](https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/views/main.vue): `go-web-front-project/views/main.vue`
- [HTTP client](https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/src/request.js): `go-web-front-project/src/request.js`
- [Vue app](https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/src/App.vue): `go-web-front-project/src/App.vue`
- [Frontend entry](https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/src/main.js): `go-web-front-project/src/main.js`
- [Web router](https://github.com/nitrosaccharose/go-web/blob/main/go-web-front-project/router/index.js): `go-web-front-project/router/index.js`

### Gin API

- [Server startup](https://github.com/nitrosaccharose/go-web/blob/main/main.go): `main.go`
- [API routes](https://github.com/nitrosaccharose/go-web/blob/main/routers/router.go): `routers/router.go`
- [User handlers](https://github.com/nitrosaccharose/go-web/blob/main/controller/UserController.go): `controller/UserController.go`
- [KVT handlers](https://github.com/nitrosaccharose/go-web/blob/main/controller/KVTObjectController.go): `controller/KVTObjectController.go`

### Data access

- [User model](https://github.com/nitrosaccharose/go-web/blob/main/model/User.go): `model/User.go`
- [KVT model](https://github.com/nitrosaccharose/go-web/blob/main/model/KVTObject.go): `model/KVTObject.go`
- [MySQL access](https://github.com/nitrosaccharose/go-web/blob/main/sql/sql.go): `sql/sql.go`
- [Redis access](https://github.com/nitrosaccharose/go-web/blob/main/redis/redis.go): `redis/redis.go`

### External stores

- **MySQL**
- **Redis cluster**

### Other components

- **User**

## Connections

- User → Main screen: uses
- Frontend entry → Vue app: mounts
- Frontend entry → Web router: installs
- Vue app → Web router: renders routes
- Web router → Main screen: routes to
- Main screen → HTTP client: sends requests
- HTTP client → API routes: HTTP
- Server startup → MySQL access: connects
- Server startup → Redis access: connects
- Server startup → API routes: serves
- API routes → User handlers: dispatches
- API routes → KVT handlers: dispatches
- User handlers → MySQL access: queries
- User handlers → User model: binds records
- MySQL access → User model: migrates
- MySQL access → MySQL: reads/writes
- KVT handlers → Redis access: gets/sets TTL
- KVT handlers → KVT model: binds response
- Redis access → Redis cluster: commands
