- Полный backend на Hono + TypeScript - SQLite база данных с 38 записями - 3 пользователя: admin, aknaproff, kasutaja - Модальное окно reportModal (4 шага) - Docker конфигурация для Synology ARM - Все миграции (0001-0017) - Frontend: vanilla HTML/JS (original.html)
123 lines
7.5 KiB
Markdown
Executable File
123 lines
7.5 KiB
Markdown
Executable File
# Aknaproff Backend Restoration
|
||
|
||
This repository contains the Cloudflare Pages/Workers backend implementation required to restore the Aknaproff production tracker service to its historical state (**v3.20.8**) while keeping the provided HTML/JS/CSS frontend unchanged.
|
||
|
||
## Project Summary
|
||
- **Goal:** полностью восстановить API, миграции и бизнес-логику для фронтенда `AKNAPROFF Tootmine`.
|
||
- **Текущая внутренняя версия:** `v1.0.0` (см. `docs/CHECKLIST.md`).
|
||
- **Технологии:** Hono (TypeScript), Cloudflare Pages + Workers, D1 (SQLite), Wrangler, Vite.
|
||
- **Документация:**
|
||
- [Техническое задание](docs/TECH_SPEC.md)
|
||
- [Чек-лист и прогресс](docs/CHECKLIST.md)
|
||
|
||
## Структура проекта
|
||
```
|
||
backend/
|
||
├── docs/ # TECH_SPEC.md, CHECKLIST.md и вспомогательные заметки
|
||
├── migrations/ # Миграции D1 (0001 …)
|
||
├── public/ # Статический фронтенд (HTML, CSS, JS)
|
||
├── src/ # Код Hono (TypeScript)
|
||
├── seed.sql # Начальные данные
|
||
├── package.json # Скрипты npm и зависимости
|
||
├── wrangler.toml # Конфигурация Wrangler (Pages + D1)
|
||
└── README.md # Этот файл
|
||
```
|
||
|
||
## Быстрый старт
|
||
```bash
|
||
npm install
|
||
npm run db:migrate:local
|
||
npm run db:seed
|
||
npm run dev
|
||
```
|
||
- Dev-сервер доступен по адресу http://localhost:5173 (Vite) или через Wrangler Pages dev (см. ниже).
|
||
|
||
## Сборка и предпросмотр
|
||
```bash
|
||
npm run build # Сборка статики и worker-кода (dist/)
|
||
npm run preview # Wrangler Pages dev с собранным билдом
|
||
```
|
||
|
||
## Деплой
|
||
```bash
|
||
npm run deploy # npm run build && wrangler pages deploy dist
|
||
```
|
||
> Перед деплоем убедитесь, что настроены Cloudflare credentials (`setup_cloudflare_api_key`) и определён `cloudflare_project_name`.
|
||
|
||
## Запуск в Docker / Synology
|
||
Эти файлы входят в пакет `backend` и готовы к импорту в Docker UI:
|
||
- `Dockerfile`
|
||
- `docker-compose.yml`
|
||
- `.dockerignore`
|
||
- `docker-entrypoint.sh`
|
||
- `wrangler.toml`
|
||
|
||
### Как использовать на Synology (через Docker UI без консоли)
|
||
1. Скопируйте папку `backend/` (или подготовленный архив) на NAS Synology.
|
||
2. В *Container Manager* → **Projects** → **Create** укажите `docker-compose.yml` (можно выбрать напрямую или загрузить `.tar.gz`, содержащий compose-файл).
|
||
3. Отредактируйте переменные окружения при необходимости:
|
||
- `PORT` — внешний порт сервиса (по умолчанию 3000).
|
||
- `SEED_DATA` — поставьте `true` только на первом запуске, если хотите автоматически выполнить `seed.sql`.
|
||
- `PERSIST_PATH` — путь хранения локальной базы (по умолчанию `/data`).
|
||
- `WRANGLER_SEND_METRICS` — необязательно, по умолчанию отключено.
|
||
4. После старта контейнер выполнит полный цикл автоматически (весь конфиг берёт из `/app/wrangler.toml`, поэтому ошибка
|
||
«Pages does not support custom paths for the Wrangler configuration file» больше не появляется):
|
||
- применит миграции D1 через `wrangler d1 migrations apply --persist-to /data`;
|
||
- один раз (при `SEED_DATA=true`) импортирует `seed.sql` и создаст маркер `/data/.seeded`;
|
||
- запустит `wrangler pages dev dist --local` на порту `PORT`.
|
||
5. Интерфейс будет доступен по адресу `http://<IP Synology>:<открытый порт>`.
|
||
6. После успешного запуска установите `SEED_DATA=false` и перезапустите проект (чтобы повторное наполнение не выполнялось).
|
||
|
||
> Том `d1-data` в `docker-compose.yml` монтируется в `/data`, поэтому локальная SQLite-база (D1 local) и маркер `/.seeded` сохраняются между перезапусками.
|
||
|
||
## Работа с миграциями и данными
|
||
```bash
|
||
npm run db:migrate:local # Применить все миграции локально
|
||
npm run db:migrate:prod # Применить миграции в продакшн D1
|
||
npm run db:seed # Заселить тестовые данные (локально)
|
||
```
|
||
|
||
## Тестовые учётные записи
|
||
| Пользователь | Пароль | Роль |
|
||
|--------------|--------|------|
|
||
| `admin` | `demo123` | Admin |
|
||
| `aknaproff` | `demo123` | Admin |
|
||
| `tootmine` | `demo123` | Пользователь (только просмотр) |
|
||
|
||
## API Overview
|
||
| Method & Path | Описание | Требует токен |
|
||
|---------------|----------|---------------|
|
||
| `POST /api/auth/login` | Логин, выдача токена | Нет |
|
||
| `GET /api/years` | Список годов с данными | Опционально |
|
||
| `GET /api/records` | Получение заявок (фильтры `month`, `year`) | Опционально |
|
||
| `POST /api/records` | Создание заявки | Admin |
|
||
| `PUT /api/records/:id` | Обновление заявки | Admin |
|
||
| `DELETE /api/records/:id` | Soft delete заявки | Admin |
|
||
| `PATCH /api/records/:id/status` | Тоггл дат (MAT/LÕI/KLA/VAL/VÄL) | Да |
|
||
| `PATCH /api/records/:id/material-confirmed` | Подтверждение MAT-1 | Admin |
|
||
| `PATCH /api/records/:id/material2-confirmed` | Подтверждение MAT-2 | Admin |
|
||
| `PATCH /api/records/:id/worksheets-cycle` | 3-стадийный цикл töölehti | Да |
|
||
| `PATCH /api/records/:id/notes` | Заметки + дата | Да |
|
||
| `PATCH /api/records/:id/problems` | Проблемы + error flags | Да |
|
||
| `PATCH /api/records/:id/price-paid` | Тоггл оплаты/арве | Admin |
|
||
| `GET /api/reports/master` | Агрегированные данные по месяцам | Опционально |
|
||
| `GET /api/reports/accountant` | Детализированный отчёт (нужны `month`, `year`) | Опционально |
|
||
| `PATCH /api/users/profile` | Смена ФИО и пароля | Да |
|
||
|
||
## Запуск dev-сервера (Wrangler Pages)
|
||
```bash
|
||
npm run build
|
||
fuser -k 3000/tcp 2>/dev/null || true
|
||
pm2 start npm --name aknaproff-backend -- run dev:sandbox
|
||
# остановить: pm2 delete aknaproff-backend
|
||
```
|
||
Dev-сервер будет доступен по http://127.0.0.1:3000 (или через выданный URL `GetServiceUrl`). Логи: `pm2 logs aknaproff-backend --nostream`.
|
||
|
||
## Контроль прогресса
|
||
Каждый завершённый чекпоинт фиксируется в `docs/CHECKLIST.md` с обновлением версии (v0.x.0). После CP9 проект готов к финальному деплою.
|
||
|
||
## Полезные ссылки
|
||
- [Cloudflare Wrangler Docs](https://developers.cloudflare.com/workers/wrangler/)
|
||
- [Hono Documentation](https://hono.dev)
|
||
- [Cloudflare D1](https://developers.cloudflare.com/d1/)
|