Files
TIS_RMS/backend/package.json
T
ssbg04 1a20994749 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)
2026-09-21 12:55:58 +08:00

47 lines
1.2 KiB
JSON

{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "echo \"Error: no test specified\" && exit 1",
"service:install": "install_service.bat",
"service:uninstall": "uninstall_service.bat",
"service:start": "bin\\nssm.exe start TIS.RMS.ServerService",
"service:stop": "bin\\nssm.exe stop TIS.RMS.ServerService",
"service:restart": "bin\\nssm.exe restart TIS.RMS.ServerService",
"service:status": "sc query TIS.RMS.ServerService"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs",
"dependencies": {
"archiver": "^8.0.0",
"bcrypt": "^6.0.0",
"better-sqlite3": "^12.9.0",
"cors": "^2.8.6",
"dotenv": "^17.4.2",
"exceljs": "^4.4.0",
"express": "^5.2.1",
"firebase-admin": "^14.2.0",
"jsonwebtoken": "^9.0.3",
"morgan": "^1.10.1",
"multer": "^2.1.1",
"nodemailer": "^9.0.6",
"sharp": "^0.35.4",
"unzipper": "^0.12.5"
},
"devDependencies": {
"nodemon": "^3.1.14"
},
"allowScripts": {
"@firebase/util@1.15.2": true,
"bcrypt@6.0.0": true,
"better-sqlite3@12.9.0": true,
"protobufjs@7.6.5": true
}
}