Files
hnh-map/docs/architecture.md
Nikolay Tatarinov 605a31567e Add initial project structure with backend and frontend setup
- Created backend structure with Go, including main application logic and API endpoints.
- Added Docker support for both development and production environments.
- Introduced frontend using Nuxt 3 with Tailwind CSS for styling.
- Included configuration files for Docker and environment variables.
- Established basic documentation for contributing, development, and deployment processes.
- Set up .gitignore and .dockerignore files to manage ignored files in the repository.
2026-02-24 22:27:05 +03:00

3.9 KiB
Raw Blame History

Архитектура hnh-map

Обзор

hnh-map — сервер автомаппера для HnH: Go-бэкенд с хранилищем bbolt, сессиями, HTML-шаблонами и Nuxt 3 SPA по пути /map/. Данные гридов и тайлов хранятся в каталоге grids/ и в БД.

┌─────────────┐     HTTP/SSE      ┌──────────────────────────────────────┐
│   Браузер   │ ◄────────────────► │  Go-сервер (cmd/hnh-map)              │
│  (Nuxt SPA  │   /map/, /map/api │  • bbolt (users, sessions, grids,      │
│   по /map/) │   /map/updates    │    markers, tiles, maps, config)        │
│             │   /map/grids/     │  • Шаблоны (embed в webapp)             │
└─────────────┘                   │  • Статика фронта (frontend/)          │
                                  │  • internal/app — вся логика           │
                                  │  • webapp — рендер шаблонов            │
                                  └──────────────────────────────────────┘

Структура бэкенда

  • cmd/hnh-map/main.go — единственная точка входа (package main): парсинг флагов (-grids, -port) и переменных окружения (HNHMAP_PORT), открытие bbolt, запуск миграций, создание App, регистрация маршрутов, запуск HTTP-сервера. Пути к frontend/ и public/ задаются из рабочей директории при старте; шаблоны встроены в бинарник (webapp, //go:embed).

  • internal/app/ — пакет app с типом App и всей логикой:

    • app.go — структура App, общие типы (Character, Session, Coord, Position, Marker, User, MapInfo, GridData и т.д.), регистрация маршрутов (RegisterRoutes), хелперы сессий и страниц (getSession, getUser, serveMapFrontend, CleanChars).
    • api.go — HTTP API: авторизация (login, me, logout, setup), кабинет (tokens, password), админ (users, settings, maps, wipe, rebuildZooms, export, merge), редиректы и роутер /map/api/....
    • admin.go — админка: HTML-страницы и действия (wipe, setPrefix, setDefaultHide, setTitle, rebuildZooms, export, merge, adminMap, wipeTile, setCoords, hideMarker и т.д.).
    • client.go — хендлеры клиента маппера (/client/{token}/...): locate, gridUpdate, gridUpload, positionUpdate, markerUpdate, updateZoomLevel.
    • map.go — доступ к карте: canAccessMap, getChars, getMarkers, getMaps, config.
    • tile.go — тайлы и гриды: GetTile, SaveTile, watchGridUpdates (SSE), gridTile, reportMerge.
    • topic.go — типы topic и mergeTopic для рассылки обновлений тайлов и слияний карт.
    • manage.go — страницы управления: index, login, logout, generateToken, changePassword.
    • migrations.go — миграции bbolt; из main вызывается app.RunMigrations(db).
  • webapp/ — отдельный пакет в корне репозитория: загрузка и выполнение HTML-шаблонов. Импортируется из cmd/hnh-map и из internal/app.

Сборка из корня репозитория:

go build -o hnh-map ./cmd/hnh-map