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.
This commit is contained in:
2026-02-24 22:27:05 +03:00
commit 605a31567e
97 changed files with 18350 additions and 0 deletions

51
docs/api.md Normal file
View File

@@ -0,0 +1,51 @@
# HTTP API
API доступно по префиксу `/map/api/`. Для запросов, требующих авторизации, используется cookie `session` (устанавливается при логине).
## Авторизация
- **POST /map/api/login** — вход. Тело: `{"user":"...","pass":"..."}`. При успехе возвращается JSON с данными пользователя и выставляется cookie сессии. При первом запуске возможен bootstrap: логин `admin` и пароль из `HNHMAP_BOOTSTRAP_PASSWORD` создают первого админа.
- **GET /map/api/me** — текущий пользователь (по сессии). Ответ: `username`, `auths`, при необходимости `tokens`, `prefix`.
- **POST /map/api/logout** — выход (инвалидация сессии).
- **GET /map/api/setup** — проверка, нужна ли первичная настройка. Ответ: `{"setupRequired": true|false}`.
## Кабинет
- **POST /map/api/me/tokens** — сгенерировать новый токен загрузки (требуется право `upload`). Ответ: `{"tokens": ["...", ...]}`.
- **POST /map/api/me/password** — сменить пароль. Тело: `{"pass":"..."}`.
## Карта и данные
- **GET /map/api/config** — конфиг для клиента (title, auths). Требуется сессия.
- **GET /map/api/v1/characters** — список персонажей на карте (требуется право `map` и при необходимости `markers`).
- **GET /map/api/v1/markers** — маркеры (требуется право `map` и при необходимости `markers`).
- **GET /map/api/maps** — список карт (с учётом прав и скрытых карт).
## Админ (все эндпоинты ниже требуют право `admin`)
- **GET /map/api/admin/users** — список имён пользователей.
- **POST /map/api/admin/users** — создать/обновить пользователя. Тело: `{"user":"...","pass":"...","auths":["admin","map",...]}`.
- **GET /map/api/admin/users/:name** — данные пользователя.
- **DELETE /map/api/admin/users/:name** — удалить пользователя.
- **GET /map/api/admin/settings** — настройки (prefix, defaultHide, title).
- **POST /map/api/admin/settings** — сохранить настройки. Тело: `{"prefix":"...","defaultHide":true|false,"title":"..."}` (поля опциональны).
- **GET /map/api/admin/maps** — список карт для админки.
- **POST /map/api/admin/maps/:id** — обновить карту (name, hidden, priority).
- **POST /map/api/admin/maps/:id/toggle-hidden** — переключить скрытие карты.
- **POST /map/api/admin/wipe** — очистить гриды, маркеры, тайлы, карты в БД.
- **POST /map/api/admin/rebuildZooms** — пересобрать зум-уровни тайлов.
- **GET /map/api/admin/export** — скачать экспорт данных (ZIP).
- **POST /map/api/admin/merge** — загрузить и применить merge (ZIP с гридами и маркерами).
Дополнительные админ-действия (формы или внутренние вызовы): wipeTile, setCoords, hideMarker — см. реализацию в `internal/app/api.go` и `admin.go`.
## Коды ответов
- **200** — успех.
- **400** — неверный запрос (метод, тело, параметры).
- **401** — не авторизован (нет или недействительная сессия).
- **403** — нет прав.
- **404** — не найдено.
- **500** — внутренняя ошибка.
Формат ошибок — текст в теле ответа или стандартные HTTP-статусы без тела.