feat: document versioning, templates, ZIP backup/restore, and Open/Edit workflow

Backend:
- schema.js: add document_templates, template_versions, document_versions tables;
  migrate documents with template_id/template_version_id columns;
  auto-seed Version 1 for all 190 existing documents
- templateController.js (NEW): full CRUD + file upload/download for templates
  and template versions
- templates.js route (NEW): /api/templates endpoints
- documentController.js: add getDocumentVersions, uploadDocumentVersion,
  downloadDocumentVersion; uploadDocument now seeds Version 1 on creation
- documents.js: wire GET /:id/versions, POST /:id/upload-version
- backupController.js: upgrade backup to ZIP archive (DB + student files +
  template files + SHA-256 manifest); restore handles ZIP and legacy .db;
  safety backup taken before every restore
- package.json: add archiver + unzipper dependencies

Frontend:
- template_model.dart (NEW): DocumentTemplateModel + TemplateVersionModel entities
- document_version_model.dart (NEW): DocumentVersionModel entity
- template_repository.dart (NEW): Dio-based template API client
- document_repository.dart: add getDocumentVersions, uploadDocumentVersion,
  downloadDocumentVersion methods
- document_preview_modal.dart: add Open / Open With (Windows rundll32
  OpenAs_RunDLL / Android chooser) / Edit (download-temp -> open -> upload
  prompt) / Upload New Version (FilePicker) / Version History actions
- document_version_history_sheet.dart (NEW): draggable bottom sheet listing
  all document versions with per-version Preview + Download
- file_folder_card.dart: add Open With, Edit, Upload New Version, Version
  History items to context menu
- documents_screen.dart: wire open_with, edit, upload_version, version_history,
  restore action cases; import version history sheet

Bugfix:
- student_profile_modal.dart: remove enrollment.status access that caused
  NoSuchMethodError (enrollments table has no status column)
This commit is contained in:
ssbg04 committed 2026-09-21 12:55:58 +08:00
1 parent e2f10f6260
commit 1a20994749
19 files changed
+2548 -297

No files matched your search

+3 -1
View File
@@ -19,6 +19,7 @@
"license": "ISC",
"type": "commonjs",
"dependencies": {
"archiver": "^8.0.0",
"bcrypt": "^6.0.0",
"better-sqlite3": "^12.9.0",
"cors": "^2.8.6",
@@ -30,7 +31,8 @@
"morgan": "^1.10.1",
"multer": "^2.1.1",
"nodemailer": "^9.0.6",
"sharp": "^0.35.4"
"sharp": "^0.35.4",
"unzipper": "^0.12.5"
},
"devDependencies": {
"nodemon": "^3.1.14"