Backend Management API implementation for self-service user portal: ✅ Task 2: Token Generation (already implemented in Phase 1) - UUID v4 generated at upload - Stored in groups.management_token - Returned in upload response ✅ Task 3: Token Validation API - GET /api/manage/:token - Validates token and loads complete group data - Returns group with images, consents, metadata - 404 for invalid/missing tokens ✅ Task 4: Consent Revocation API - PUT /api/manage/:token/consents - Revoke/restore workshop consent - Revoke/restore social media platform consents - Sets revoked=1, revoked_timestamp - Full error handling and validation ✅ Task 5: Metadata Edit API - PUT /api/manage/:token/metadata - Update title, description, name - Supports partial updates - Automatically sets approved=0 (returns to moderation) ✅ Task 6: Add Images API - POST /api/manage/:token/images - Upload new images to existing group - Calculates correct upload_order - Sets approved=0 on changes - Max 50 images per group validation - Preview generation support ✅ Task 7: Delete Image API - DELETE /api/manage/:token/images/:imageId - Deletes original and preview files - Removes DB entry - Sets approved=0 if group was approved - Prevents deletion of last image ⏳ Task 8: Delete Group API (in progress) - DELETE /api/manage/:token route created - Integration with existing GroupRepository.deleteGroup - Needs testing Technical Changes: - Created backend/src/routes/management.js - Added getGroupByManagementToken() to GroupRepository - Registered /api/manage routes in index.js - Installed uuid package for token generation - All routes use token validation helper - Docker-only development workflow Tested Features: - Token validation with real uploads - Workshop consent revoke/restore - Social media consent management - Metadata updates (full and partial) - Image upload with multipart/form-data - Image deletion with file cleanup - Error handling and edge cases
34 lines
880 B
JSON
34 lines
880 B
JSON
{
|
|
"name": "backend",
|
|
"version": "1.0.0",
|
|
"description": "",
|
|
"main": "src/index.js",
|
|
"scripts": {
|
|
"start": "node src/index.js",
|
|
"server": "nodemon src/index.js",
|
|
"client": "npm run dev --prefix ../frontend",
|
|
"client-build": "cd ../frontend && npm run build && serve -s build -l 80",
|
|
"dev": "concurrently \"npm run server\" \"npm run client\"",
|
|
"build": "concurrently \"npm run server\" \"npm run client-build\""
|
|
},
|
|
"keywords": [],
|
|
"author": "",
|
|
"license": "ISC",
|
|
"dependencies": {
|
|
"dotenv": "^8.2.0",
|
|
"express": "^4.17.1",
|
|
"express-fileupload": "^1.2.1",
|
|
"find-remove": "^2.0.3",
|
|
"fs": "^0.0.1-security",
|
|
"node-cron": "^4.2.1",
|
|
"sharp": "^0.34.4",
|
|
"shortid": "^2.2.16",
|
|
"sqlite3": "^5.1.7",
|
|
"uuid": "^13.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"concurrently": "^6.0.0",
|
|
"nodemon": "^2.0.7"
|
|
}
|
|
}
|