- Реструктуризация: src/ разбит на middleware/, utils/, repositories/ (удалены), routes/ (удалены) - Добавлен src/original-html.ts — полный HTML с reportModal - Добавлен src/index.tsx.backup — React-компонент с reportModal - Миграции переименованы (0001_initial_schema.sql) - Добавлена миграция 0018 (удалена позже) - Docker: multi-stage build, wrangler.toml - Frontend: public/static/app.js + style.css - seed.sql добавлен - Документация: CHANGELOG, CHANGES_v4.1.0-4.1.9, PROJECT_STRUCTURE
12 KiB
12 KiB
AKNAPROFF Tootmine - Структура проекта
Версия: v4.0.13 (28.11.2025)
📁 Структура директорий
webapp/
├── src/ # Backend исходники (Hono + TypeScript)
│ ├── index.tsx # Главный файл приложения (26 API endpoints)
│ ├── original-html.ts # Embedded HTML для главной страницы
│ ├── middleware/ # Middleware для аутентификации
│ │ └── auth.ts # authMiddleware, optionalAuthMiddleware
│ └── utils/ # Утилиты
│ └── auth.ts # JWT, password hashing
│
├── public/ # Статические файлы
│ ├── original.html # Исходный HTML шаблон
│ ├── test-datepicker.html # Тестовая страница для date picker
│ └── static/ # Статические ресурсы (доступны как /static/*)
│ ├── app.js # Главный JavaScript файл (1500+ строк)
│ └── styles.css # Дополнительные стили
│
├── migrations/ # D1 Database миграции
│ ├── 0001_initial_schema.sql
│ ├── 0002_add_user_profiles.sql
│ └── meta/
│
├── dist/ # Build output (создаётся при npm run build)
│ ├── _worker.js # Скомпилированный Cloudflare Worker
│ └── _routes.json # Cloudflare routing config
│
├── .wrangler/ # Wrangler development state
│ └── state/v3/d1/ # Локальная D1 база данных
│
├── node_modules/ # NPM зависимости
│
├── .git/ # Git repository
│
├── package.json # NPM конфигурация и скрипты
├── wrangler.jsonc # Cloudflare Workers конфигурация
├── tsconfig.json # TypeScript конфигурация
├── vite.config.ts # Vite build конфигурация
├── ecosystem.config.cjs # PM2 конфигурация (для development)
├── .gitignore # Git ignore файл
├── seed.sql # Demo данные для локальной разработки
│
├── README.md # Основная документация проекта
├── FULL_DEVELOPMENT_HISTORY.md # Полная история разработки (25KB)
├── VERSION_SUMMARY.md # Краткая сводка версий (3KB)
└── PROJECT_STRUCTURE.md # Этот файл
📄 Ключевые файлы
Backend (src/)
src/index.tsx (главный файл)
// 665 строк кода
// 26 API endpoints
// Hono framework + Cloudflare Workers
// D1 Database integration
Основные секции:
- Type Bindings (D1Database, Variables)
- CORS middleware
- Static file serving
- Auth routes (login, profile)
- Data routes (CRUD для records)
- Status checkbox routes
- Material confirmed routes
- Main page route
src/middleware/auth.ts
// JWT authentication middleware
// authMiddleware - требует токен
// optionalAuthMiddleware - опциональный токен
src/utils/auth.ts
// JWT token generation
// Password hashing/verification (bcrypt-style)
src/original-html.ts
// Embedded HTML template
// Создаётся из public/original.html
// Содержит полный HTML главной страницы
Frontend (public/)
public/original.html
<!-- Главный HTML шаблон -->
<!-- ~700 строк -->
<!-- Tailwind CSS (CDN) -->
<!-- FontAwesome icons -->
<!-- Axios для HTTP запросов -->
public/static/app.js
// Главный JavaScript файл
// ~1500 строк кода
Основные функции:
- loadRecords() - загрузка records из API
- renderRecords() - рендеринг таблицы
- renderCalendarCell() - calendar picker для MAT-1/MAT-2
- renderDateCell() - 3-step toggle для других полей
- toggleDate() - toggle date fields
- toggleMaterialConfirmed() - toggle MAT-1 checkbox
- toggleMaterial2Confirmed() - toggle MAT-2 checkbox
- openModal() - открытие модального окна
- editRecord() - редактирование record
- deleteRecord() - удаление record
- handleLogin() - логин
- initFilters() - инициализация фильтров
Database (migrations/)
migrations/0001_initial_schema.sql
-- production_records table
-- status_checkboxes table
-- users table
-- audit_log table
-- Indexes
Configuration
package.json
{
"scripts": {
"dev": "vite",
"dev:sandbox": "wrangler pages dev dist --ip 0.0.0.0 --port 3000",
"build": "vite build",
"deploy": "npm run build && wrangler pages deploy dist",
"db:migrate:local": "wrangler d1 migrations apply webapp-production --local",
"db:migrate:prod": "wrangler d1 migrations apply webapp-production"
},
"dependencies": {
"hono": "^4.0.0"
},
"devDependencies": {
"@cloudflare/workers-types": "4.20250705.0",
"@hono/vite-cloudflare-pages": "^0.4.2",
"vite": "^5.0.0",
"wrangler": "^3.78.0"
}
}
wrangler.jsonc
{
"name": "webapp",
"compatibility_date": "2024-01-01",
"pages_build_output_dir": "./dist",
"d1_databases": [
{
"binding": "DB",
"database_name": "webapp-production",
"database_id": "your-database-id"
}
]
}
ecosystem.config.cjs (PM2)
module.exports = {
apps: [{
name: 'webapp',
script: 'npx',
args: 'wrangler pages dev dist --ip 0.0.0.0 --port 3000',
env: {
NODE_ENV: 'development',
PORT: 3000
}
}]
}
📊 Статистика кода
| Файл | Строки | Тип | Назначение |
|---|---|---|---|
| src/index.tsx | ~665 | TypeScript | Backend API |
| public/static/app.js | ~1500 | JavaScript | Frontend logic |
| public/original.html | ~700 | HTML | UI template |
| src/middleware/auth.ts | ~50 | TypeScript | Authentication |
| src/utils/auth.ts | ~80 | TypeScript | JWT & passwords |
| migrations/0001_*.sql | ~100 | SQL | Database schema |
| FULL_DEVELOPMENT_HISTORY.md | ~790 | Markdown | Documentation |
Всего: ~3885 строк кода (без node_modules, dist, .wrangler)
🔌 API Endpoints (26 шт)
Authentication (2)
POST /api/auth/login - Логин пользователя
PATCH /api/users/profile - Обновление профиля (требует auth)
Data CRUD (5)
GET /api/years - Получить список доступных годов
GET /api/records - Получить records (по месяцу/году)
GET /api/records/:id - Получить один record
POST /api/records - Создать новый record
PUT /api/records/:id - Обновить record
DELETE /api/records/:id - Удалить record (soft delete)
Status Management (13)
PATCH /api/records/:id/status - Toggle date field
PATCH /api/records/:id/worksheets-cycle - 3-step worksheets cycle
PATCH /api/records/:id/notes - Обновить notes
PATCH /api/records/:id/problems - Обновить problems + error flags
PATCH /api/records/:id/material-confirmed - Toggle MAT-1 checkbox
PATCH /api/records/:id/material2-confirmed - Toggle MAT-2 checkbox
PATCH /api/records/:id/price-paid - Обновить price paid status
PATCH /api/status/:recordId/:field - Обновить date field
PATCH /api/status/:recordId/:field/error - Обновить error flag
PATCH /api/status/:recordId/:field/confirm - Обновить confirmation flag
Pages (6)
GET / - Главная страница (HTML)
GET /test-click - Тестовая страница для clicks
GET /test-datepicker - Тестовая страница для date picker
GET /static/* - Статические файлы (app.js, styles.css)
GET /favicon.ico - Favicon (empty response)
🗄️ Database Schema
Tables (4)
production_records
- id INTEGER PRIMARY KEY
- month INTEGER -- 1-12
- year INTEGER -- 2024, 2025, etc.
- client_name TEXT
- type TEXT
- offer_number TEXT
- work_number TEXT
- quantity INTEGER
- color TEXT
- notes TEXT
- problems TEXT
- installer TEXT
- price REAL
- created_at DATETIME
- updated_at DATETIME
- deleted_at DATETIME
- deleted_by INTEGER
status_checkboxes
- id INTEGER PRIMARY KEY
- record_id INTEGER (FK → production_records.id)
- material_date DATE
- material2_date DATE
- package_date DATE
- worksheets_date DATE
- cutting_date DATE
- glazing_date DATE
- ready_date DATE
- issued_date DATE
- worksheets_error BOOLEAN
- cutting_error BOOLEAN
- glazing_error BOOLEAN
- ready_error BOOLEAN
- issued_error BOOLEAN
- material_confirmed BOOLEAN
- material2_confirmed BOOLEAN
- worksheets_confirmed BOOLEAN
users
- id INTEGER PRIMARY KEY
- username TEXT UNIQUE
- password_hash TEXT
- full_name TEXT
- role TEXT (admin/user)
- created_at DATETIME
- updated_at DATETIME
- deleted_at DATETIME
audit_log
- id INTEGER PRIMARY KEY
- user_id INTEGER (FK → users.id)
- record_id INTEGER (FK → production_records.id)
- field_name TEXT
- old_value TEXT
- new_value TEXT
- action_type TEXT
- created_at DATETIME
🔄 Development Workflow
1. Локальная разработка
# 1. Build проекта
npm run build
# 2. Запуск с PM2
pm2 start ecosystem.config.cjs
# 3. Миграции базы данных
npm run db:migrate:local
# 4. Тестирование
curl http://localhost:3000/api/records?month=1&year=2025
# 5. Логи
pm2 logs webapp --nostream
2. Обновление кода
# 1. Изменить код
nano public/static/app.js
# 2. Обновить версию
sed -i 's/app.js?v=4.0.13/app.js?v=4.0.14/' public/original.html
# 3. Пересоздать embedded HTML
node -e "..."
# 4. Rebuild
npm run build
# 5. Restart PM2
pm2 restart webapp
3. Git workflow
git add .
git commit -m "Fix: описание изменения"
git push origin main
4. Deployment на Cloudflare
# 1. Build
npm run build
# 2. Deploy
npx wrangler pages deploy dist --project-name webapp
🔗 Важные ссылки
- Sandbox URL: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai
- Local URL: http://localhost:3000
- Git Repository: /home/user/webapp
- Cloudflare Pages: (при деплое)
📚 Документация
| Файл | Размер | Описание |
|---|---|---|
| README.md | ~5KB | Основная документация |
| FULL_DEVELOPMENT_HISTORY.md | 25KB | Детальная история всех версий |
| VERSION_SUMMARY.md | 3KB | Краткая сводка версий |
| PROJECT_STRUCTURE.md | Этот файл | Структура проекта |
Конец документа