# kpe-chaiwat/gamelottery architecture

> Architecture diagram of the GitHub repository kpe-chaiwat/gamelottery, 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/kpe-chaiwat/gamelottery
- Repository: https://github.com/kpe-chaiwat/gamelottery

## Overview

Primusgame is a browser-based multi-game player/reward application backed by a Go Fiber API and MongoDB. The user workflow is to open a game, submit a play or round, and receive results; the backend routes requests through handlers into game services that read or update player and reward records. The frontend also exposes a home page, result view, and reset page. No README or frontend/API-call source was provided, so frontend-to-API wiring and several unsampled backend handler/service relationships are not asserted.

Main entry points: [`primusgame/src/App.jsx`](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/App.jsx) (Page router), [`primusgame-backend/main.go`](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/main.go) (API server), [`primusgame-backend/config/mongo.go`](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/config/mongo.go) (MongoDB), [`primusgame-backend/handlers/game1_postUpdate_handler.go`](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/handlers/game1_postUpdate_handler.go) (Game 1 handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["Page router<br/>[App.jsx]"]
  node_home["Home<br/>[Home.jsx]"]
  node_game1ui["Game 1 UI<br/>[game1.jsx]"]
  node_game2ui["Game 2 UI<br/>[game2.jsx]"]
  node_game3ui["Game 3 UI<br/>[game3.jsx]"]
  node_game4ui["Game 4 UI<br/>[game4.jsx]"]
  node_resultui["Victor result<br/>[VictorResult .jsx]"]
  node_resetui["Reset page<br/>[ResetGame.jsx]"]
  node_game1api["Game 1 API<br/>[api_game1.js]"]
  node_game2api["Game 2 API<br/>[api_game2.js]"]
  node_game3api["Game 3 API<br/>[api_game3.js]"]
  node_game4api["Game 4 API<br/>[api_game4.js]"]
  node_resultapi["Conclude API<br/>[api_conclude.js]"]
  node_resetapi["Reset API<br/>[resetAPI.js]"]
end

subgraph group_api["HTTP API"]
  node_server["API server<br/>[main.go]"]
  node_game1routes["Game 1 routes<br/>[game1_routes.go]"]
  node_game3routes["Game 3 routes<br/>[game3_routes.go]"]
  node_game4routes["Game 4 routes<br/>[game4_routes.go]"]
  node_game1handler["Game 1 handler"]
  node_game3handler["Game 3 handler<br/>[game3_handler.go]"]
  node_game4handler["Game 4 handler<br/>[game4_handler.go]"]
  node_game2routes["Game 2 routes<br/>[game2_routes.go]"]
  node_game2handler["Game 2 handler<br/>[game2_handler.go]"]
  node_resultflow["Result handling<br/>[result_route.go]"]
  node_resetflow["Reset handling<br/>[reset.go]"]
end

subgraph group_domain["Game services"]
  node_game1service["Game 1 rewards"]
  node_game3service["Game 3 matching<br/>[game3_service.go]"]
  node_game4service["Game 4 rounds<br/>[game4_service.go]"]
  node_game2service["Game 2 logic<br/>[game2_service.go]"]
  node_playerservice["Player operations<br/>[player_service.go]"]
end

subgraph group_storage["Persistence"]
  node_mongo[("MongoDB<br/>[mongo.go]")]
end

node_player(("Player"))

node_player -->|"opens pages"| node_app
node_app -->|"routes to"| node_home
node_app -->|"routes to"| node_game1ui
node_app -->|"routes to"| node_game2ui
node_app -->|"routes to"| node_game3ui
node_app -->|"routes to"| node_game4ui
node_app -->|"routes to"| node_resultui
node_app -->|"routes to"| node_resetui
node_server -->|"mounts routes"| node_game1routes
node_server -->|"mounts routes"| node_game2routes
node_server -->|"mounts routes"| node_game3routes
node_server -->|"mounts routes"| node_game4routes
node_server -->|"mounts routes"| node_resultflow
node_server -->|"mounts routes"| node_resetflow
node_game1routes -->|"dispatches"| node_game1handler
node_game3routes -->|"dispatches"| node_game3handler
node_game4routes -->|"dispatches"| node_game4handler
node_game1handler -->|"finds player"| node_playerservice
node_game1handler -->|"updates reward"| node_game1service
node_game3handler -->|"matches and updates"| node_game3service
node_game4handler -->|"processes rounds"| node_game4service
node_game1service -->|"reads and writes"| node_mongo
node_game3service -->|"reads and writes"| node_mongo
node_game4service -->|"reads and writes"| node_mongo
node_playerservice -->|"reads players"| node_mongo

click node_app "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/App.jsx"
click node_home "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/Home.jsx"
click node_game1ui "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/game1.jsx"
click node_game2ui "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/game2.jsx"
click node_game3ui "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/game3.jsx"
click node_game4ui "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/game4.jsx"
click node_resultui "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/VictorResult%20.jsx"
click node_resetui "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/ResetGame.jsx"
click node_game1api "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_game1.js"
click node_game2api "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_game2.js"
click node_game3api "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_game3.js"
click node_game4api "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_game4.js"
click node_resultapi "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_conclude.js"
click node_resetapi "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/resetAPI.js"
click node_server "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/main.go"
click node_game1routes "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/game1_routes.go"
click node_game3routes "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/game3_routes.go"
click node_game4routes "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/game4_routes.go"
click node_game1handler "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/handlers/game1_postUpdate_handler.go"
click node_game3handler "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/handlers/game3_handler.go"
click node_game4handler "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/handlers/game4_handler.go"
click node_game2routes "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/game2_routes.go"
click node_game2handler "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/handlers/game2_handler.go"
click node_resultflow "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/result_route.go"
click node_resetflow "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/reset.go"
click node_game1service "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/game1_reward_service.go"
click node_game3service "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/game3_service.go"
click node_game4service "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/game4_service.go"
click node_game2service "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/game2_service.go"
click node_playerservice "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/player_service.go"
click node_mongo "https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/config/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_app,node_home,node_game1ui,node_game2ui,node_game3ui,node_game4ui,node_resultui,node_resetui,node_game1api,node_game2api,node_game3api,node_game4api,node_resultapi,node_resetapi toneBlue
class node_server,node_game1routes,node_game3routes,node_game4routes,node_game1handler,node_game3handler,node_game4handler,node_game2routes,node_game2handler,node_resultflow,node_resetflow toneAmber
class node_game1service,node_game3service,node_game4service,node_game2service,node_playerservice toneMint
class node_mongo toneRose
class node_player toneIndigo
```

## Components

### Web application

- [Page router](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/App.jsx): `primusgame/src/App.jsx`
- [Home](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/Home.jsx): `primusgame/src/pages/Home.jsx`
- [Game 1 UI](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/game1.jsx): `primusgame/src/pages/game1.jsx`
- [Game 2 UI](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/game2.jsx): `primusgame/src/pages/game2.jsx`
- [Game 3 UI](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/game3.jsx): `primusgame/src/pages/game3.jsx`
- [Game 4 UI](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/game4.jsx): `primusgame/src/pages/game4.jsx`
- [Victor result](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/VictorResult%20.jsx): `primusgame/src/pages/VictorResult .jsx`
- [Reset page](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/pages/ResetGame.jsx): `primusgame/src/pages/ResetGame.jsx`
- [Game 1 API](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_game1.js): `primusgame/src/api/api_game1.js`
- [Game 2 API](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_game2.js): `primusgame/src/api/api_game2.js`
- [Game 3 API](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_game3.js): `primusgame/src/api/api_game3.js`
- [Game 4 API](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_game4.js): `primusgame/src/api/api_game4.js`
- [Conclude API](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/api_conclude.js): `primusgame/src/api/api_conclude.js`
- [Reset API](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame/src/api/resetAPI.js): `primusgame/src/api/resetAPI.js`

### HTTP API

- [API server](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/main.go): `primusgame-backend/main.go`
- [Game 1 routes](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/game1_routes.go): `primusgame-backend/routes/game1_routes.go`
- [Game 3 routes](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/game3_routes.go): `primusgame-backend/routes/game3_routes.go`
- [Game 4 routes](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/game4_routes.go): `primusgame-backend/routes/game4_routes.go`
- [Game 1 handler](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/handlers/game1_postUpdate_handler.go): `primusgame-backend/handlers/game1_postUpdate_handler.go`
- [Game 3 handler](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/handlers/game3_handler.go): `primusgame-backend/handlers/game3_handler.go`
- [Game 4 handler](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/handlers/game4_handler.go): `primusgame-backend/handlers/game4_handler.go`
- [Game 2 routes](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/game2_routes.go): `primusgame-backend/routes/game2_routes.go`
- [Game 2 handler](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/handlers/game2_handler.go): `primusgame-backend/handlers/game2_handler.go`
- [Result handling](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/result_route.go): `primusgame-backend/routes/result_route.go`
- [Reset handling](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/routes/reset.go): `primusgame-backend/routes/reset.go`

### Game services

- [Game 1 rewards](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/game1_reward_service.go): `primusgame-backend/services/game1_reward_service.go`
- [Game 3 matching](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/game3_service.go): `primusgame-backend/services/game3_service.go`
- [Game 4 rounds](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/game4_service.go): `primusgame-backend/services/game4_service.go`
- [Game 2 logic](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/game2_service.go): `primusgame-backend/services/game2_service.go`
- [Player operations](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/services/player_service.go): `primusgame-backend/services/player_service.go`

### Persistence

- [MongoDB](https://github.com/kpe-chaiwat/gamelottery/blob/master/primusgame-backend/config/mongo.go): `primusgame-backend/config/mongo.go`

### Other components

- **Player**

## Connections

- Player → Page router: opens pages
- Page router → Home: routes to
- Page router → Game 1 UI: routes to
- Page router → Game 2 UI: routes to
- Page router → Game 3 UI: routes to
- Page router → Game 4 UI: routes to
- Page router → Victor result: routes to
- Page router → Reset page: routes to
- API server → Game 1 routes: mounts routes
- API server → Game 2 routes: mounts routes
- API server → Game 3 routes: mounts routes
- API server → Game 4 routes: mounts routes
- API server → Result handling: mounts routes
- API server → Reset handling: mounts routes
- Game 1 routes → Game 1 handler: dispatches
- Game 3 routes → Game 3 handler: dispatches
- Game 4 routes → Game 4 handler: dispatches
- Game 1 handler → Player operations: finds player
- Game 1 handler → Game 1 rewards: updates reward
- Game 3 handler → Game 3 matching: matches and updates
- Game 4 handler → Game 4 rounds: processes rounds
- Game 1 rewards → MongoDB: reads and writes
- Game 3 matching → MongoDB: reads and writes
- Game 4 rounds → MongoDB: reads and writes
- Player operations → MongoDB: reads players
