Overview
After events conclude, organizers must submit comprehensive post-event reports including attendance records, photos, feedback, and budget information. Administrators review and approve these reports before issuing participation certificates.
Youth Union Requires 5 photos, 14-day deadline
Student Association Requires 10 photos + 50% feedback, 7-day deadline
Get Report by Event
Retrieve the post-event report for a specific event.
Endpoint
GET /api/reports/{eventID}
Response
{
"statusCode" : 200 ,
"message" : "Report retrieved successfully" ,
"data" : {
"reportID" : 89 ,
"eventID" : 123 ,
"eventType" : "YOUTH_UNION" ,
"affiliatedOrg" : "Computer Science Club" ,
"status" : "NOT_SUBMITTED" ,
"deadlineAt" : "2024-04-29T23:59:00" ,
"isLate" : false ,
"organizerCount" : null ,
"attendeeCount" : null ,
"photos" : [],
"createdAt" : "2024-04-15T18:00:00"
},
"timestamp" : "2024-04-16T10:00:00"
}
Submit Post-Event Report
Submit a comprehensive post-event report with attendance, photos, and feedback.
Endpoint
POST /api/reports/{eventID}/submit
ID of the completed event
Authorization
Required Role: ORGANIZERMust be the event organizer
Content-Type: multipart/form-data
Required Parameters
Event photos (5 for Youth Union, 10 for Student Association) Naming Convention:
Youth Union: EVT{id}_{EventName}_01 through _05 (2-digit padded)
Student Association: EVT{id}_{EventName}_1 through _10
Excel file containing attendance records Must include columns: MSSV (Student ID), Full Name, Faculty/Class
Number of organizers who managed the event
Total number of attendees (registered + walk-in)
Number of walk-in participants
Optional Parameters
Compiled feedback document
Number of feedback responses collected Required for Student Association: Must be at least 50% of attendeeCount
URL to IUYouth article covering the event
URL to social media posts about the event
Google Drive link to additional event materials
Total budget spent (numeric string)
Name of person submitting the report
Role of person submitting (e.g., “President”, “Event Coordinator”)
Request Example
curl -X POST http://localhost:8080/api/reports/123/submit \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-F 'photos=@EVT123_Workshop_01.jpg' \
-F 'photos=@EVT123_Workshop_02.jpg' \
-F 'photos=@EVT123_Workshop_03.jpg' \
-F 'photos=@EVT123_Workshop_04.jpg' \
-F 'photos=@EVT123_Workshop_05.jpg' \
-F '[email protected] ' \
-F '[email protected] ' \
-F 'organizerCount=5' \
-F 'attendeeCount=42' \
-F 'walkInCount=8' \
-F 'feedbackCount=30' \
-F 'totalBudget=500000' \
-F 'submitterName=John Doe' \
-F 'submitterRole=Event Coordinator'
Response
{
"statusCode" : 200 ,
"message" : "Report submitted successfully" ,
"data" : {
"reportID" : 89 ,
"eventID" : 123 ,
"eventType" : "YOUTH_UNION" ,
"status" : "SUBMITTED" ,
"organizerCount" : 5 ,
"attendeeCount" : 42 ,
"walkInCount" : 8 ,
"feedbackCount" : 30 ,
"totalBudget" : 500000 ,
"photos" : [
{
"photoID" : 1 ,
"fileID" : "/uploads/reports/123/photos/EVT123_Workshop_01.jpg" ,
"label" : "Photo 1" ,
"orderIndex" : 0
}
],
"attendeeCountTotal" : 42 ,
"certEligibleCount" : 38 ,
"submittedAt" : "2024-04-20T14:30:00" ,
"deadlineAt" : "2024-04-29T23:59:00" ,
"isLate" : false
},
"timestamp" : "2024-04-20T14:30:00"
}
Validation Rules
Photo Count Validation:
Youth Union events: Exactly 5 photos required
Student Association events: Exactly 10 photos required
Feedback Threshold (Student Association only):
Must collect feedback from at least 50% of attendees
Example: 42 attendees requires minimum 21 feedback responses
Get All Reports (Admin)
Retrieve all post-event reports, optionally filtered by status.
Endpoint
Authorization
Required Role: ADMINDepartment-based filtering applies automatically
Query Parameters
Filter by report status Values: NOT_SUBMITTED, SUBMITTED, LATE_SUBMITTED, APPROVED, REJECTED, CERT_TEMPLATE_PENDING
Request Example
curl -X GET "http://localhost:8080/api/reports?status=SUBMITTED" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
Response
{
"statusCode" : 200 ,
"message" : "Reports retrieved successfully" ,
"data" : [
{
"reportID" : 89 ,
"eventID" : 123 ,
"eventType" : "YOUTH_UNION" ,
"affiliatedOrg" : "Computer Science Club" ,
"status" : "SUBMITTED" ,
"attendeeCount" : 42 ,
"submittedAt" : "2024-04-20T14:30:00" ,
"deadlineAt" : "2024-04-29T23:59:00" ,
"isLate" : false
}
],
"timestamp" : "2024-04-21T09:00:00"
}
Admins only see reports for events matching their department (Youth Union or Student Association).
Get Report Details
Retrieve detailed information about a specific report.
Endpoint
GET /api/reports/detail/{reportID}
Authorization
Response
{
"statusCode" : 200 ,
"message" : "Report retrieved" ,
"data" : {
"reportID" : 89 ,
"eventID" : 123 ,
"eventType" : "YOUTH_UNION" ,
"affiliatedOrg" : "Computer Science Club" ,
"submitterEmail" : "[email protected] " ,
"submitterName" : "John Doe" ,
"submitterRole" : "Event Coordinator" ,
"organizerCount" : 5 ,
"attendeeCount" : 42 ,
"walkInCount" : 8 ,
"iuyouthArticleURL" : "https://iuyouth.com/article/123" ,
"socialMediaURL" : "https://facebook.com/post/456" ,
"driveLink" : "https://drive.google.com/folder/789" ,
"totalBudget" : 500000 ,
"feedbackCount" : 30 ,
"feedbackFileID" : "/uploads/reports/123/feedback/feedback.pdf" ,
"status" : "SUBMITTED" ,
"photos" : [
{
"photoID" : 1 ,
"fileID" : "/uploads/reports/123/photos/EVT123_Workshop_01.jpg" ,
"label" : "Photo 1" ,
"orderIndex" : 0
}
],
"walkInAttendees" : [
{
"recordID" : 1 ,
"studentID" : "S123456" ,
"fullName" : "Jane Smith" ,
"className" : "CS2024" ,
"attendanceType" : "WALK_IN"
}
],
"attendeeCountTotal" : 42 ,
"certEligibleCount" : 38 ,
"submittedAt" : "2024-04-20T14:30:00" ,
"deadlineAt" : "2024-04-29T23:59:00" ,
"isLate" : false
},
"timestamp" : "2024-04-21T10:00:00"
}
Approve Report
Approve a submitted post-event report.
Endpoint
POST /api/reports/{reportID}/approve
ID of the report to approve
Authorization
Required Role: ADMINMust match event’s organization type
Query Parameters
ID of the approving administrator
Response
{
"statusCode" : 200 ,
"message" : "Report approved successfully" ,
"data" : {
"reportID" : 89 ,
"status" : "APPROVED" ,
"approvedAt" : "2024-04-21T15:00:00" ,
"approvedBy" : 5
},
"timestamp" : "2024-04-21T15:00:00"
}
Organizer receives email notification upon approval.
Reject Report
Reject a submitted report with a reason.
Endpoint
POST /api/reports/{reportID}/reject
ID of the report to reject
Authorization
Query Parameters
Explanation for rejection
ID of the rejecting administrator
Request Example
curl -X POST "http://localhost:8080/api/reports/89/reject?reason=Insufficient%20photo%20quality&adminID=5" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
Response
{
"statusCode" : 200 ,
"message" : "Report rejected" ,
"data" : {
"reportID" : 89 ,
"status" : "REJECTED" ,
"rejectionReason" : "Insufficient photo quality"
},
"timestamp" : "2024-04-21T15:30:00"
}
Resubmit Report
Resubmit a rejected report with corrections.
Endpoint
POST /api/reports/{reportID}/resubmit
ID of the rejected report
Authorization
Required Role: ORGANIZERMust be the event organizer
Same as initial submission - all parameters from /submit endpoint apply.
Cannot modify photos, feedback, or attendance if certExportLocked is true (after certificate template download).
Response
{
"statusCode" : 200 ,
"message" : "Report resubmitted successfully" ,
"data" : {
"reportID" : 89 ,
"status" : "SUBMITTED" ,
"submittedAt" : "2024-04-22T10:00:00" ,
"rejectionReason" : null ,
"previousRejectionReason" : "Insufficient photo quality"
},
"timestamp" : "2024-04-22T10:00:00"
}
Upload Certificate Template
Upload the certificate template for approved reports.
Endpoint
POST /api/reports/{reportID}/upload-cert-template
ID of the approved report
Authorization
Request Parameters
Excel template with student names for certificates
ID of the uploading administrator
Response
{
"statusCode" : 200 ,
"message" : "Cert template uploaded successfully" ,
"data" : {
"reportID" : 89 ,
"status" : "CERT_TEMPLATE_PENDING" ,
"certExportLocked" : true ,
"certTemplateFileID" : "/uploads/reports/89/cert-templates/template.xlsx"
},
"timestamp" : "2024-04-23T11:00:00"
}
Organizer receives email notification when template is ready for download.
Download Certificate Template
Download the certificate template to fill in student information.
Endpoint
GET /api/reports/{reportID}/download-cert-template
Authorization
Required Role: ORGANIZERMust be the event organizer
Response
{
"statusCode" : 200 ,
"message" : "Certificate template download initiated" ,
"data" : "/api/uploads/cert-templates/template_123.xlsx" ,
"timestamp" : "2024-04-23T14:00:00"
}
First download locks the report - photos, feedback, and attendance cannot be modified after this point.
Workflow
Event Completion
Event concludes and status changes to COMPLETED. Report deadline is set (7 or 14 days).
Report Submission
Organizer uploads photos, attendance Excel, feedback, and budget information.
Validation
System validates photo count, feedback threshold, and required fields.
Admin Review
Administrator reviews accuracy of attendance, photos, and documentation.
Approval/Rejection
Admin approves or rejects with feedback. Organizer can resubmit if rejected.
Certificate Generation
Admin uploads certificate template. Organizer downloads and completes.
Report Statuses
Status Description NOT_SUBMITTEDReport created but not yet submitted SUBMITTEDReport submitted on time, awaiting review LATE_SUBMITTEDReport submitted after deadline APPROVEDReport approved by administrator REJECTEDReport rejected, needs resubmission CERT_TEMPLATE_PENDINGCertificate template uploaded, awaiting organizer download
Best Practices
Submit Early: Don’t wait until the deadline. Submit as soon as possible after the event.
Photo Naming: Follow the exact naming convention for your organization type to ensure proper processing.
Attendance Accuracy: Double-check attendance Excel for completeness and accuracy before submission.
Feedback Collection: For Student Association events, collect feedback during the event to meet the 50% threshold.
Error Responses
400 Bad Request - Photo Count Mismatch
{
"statusCode" : 400 ,
"message" : "Photo count validation failed. YOUTH_UNION requires exactly 5 photos, but got 3" ,
"timestamp" : "2024-04-20T14:30:00"
}
400 Bad Request - Insufficient Feedback
{
"statusCode" : 400 ,
"message" : "Feedback count insufficient. Required: at least 21 (50% of 42 attendees), got 15" ,
"timestamp" : "2024-04-20T14:30:00"
}
400 Bad Request - Already Submitted
{
"statusCode" : 400 ,
"message" : "Report has already been submitted" ,
"timestamp" : "2024-04-20T14:30:00"
}
400 Bad Request - Invalid Excel
{
"statusCode" : 400 ,
"message" : "Failed to parse attendance Excel: Missing required column MSSV" ,
"timestamp" : "2024-04-20T14:30:00"
}
Organizer Guide Complete guide for submitting reports
Admin Guide Administrator review process
Events API Event management endpoints
File Upload Guide File storage configuration