- 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.
3.9 KiB
3.9 KiB
Архитектура 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).
- app.go — структура
-
webapp/ — отдельный пакет в корне репозитория: загрузка и выполнение HTML-шаблонов. Импортируется из
cmd/hnh-mapи изinternal/app.
Сборка из корня репозитория:
go build -o hnh-map ./cmd/hnh-map