``` @startuml class UserAccount { - Long id - String name - String email - Role role - UserStatus status - Integer gridX - Integer gridY + isAccountLocked(): boolean + hasSkill(String skill): boolean } enum Role { ADMIN, SUPERVISOR, GRID_WORKER } enum UserStatus { ACTIVE, INACTIVE, SUSPENDED } UserAccount *-- Role UserAccount *-- UserStatus @enduml ``` @startuml class Feedback { - Long id - String eventId - String title - PollutionType pollutionType - SeverityLevel severityLevel - FeedbackStatus status - Long submitterId + updateStatus(newStatus) + isHighPriority(): boolean } class Attachment { + id: Long + fileName: String + fileType: String + storedFileName: String } enum FeedbackStatus { PENDING_REVIEW, PROCESSED, AI_REJECTED, TASK_CREATED, CLOSED } Feedback "1" -- "*" Attachment : has Feedback *-- FeedbackStatus UserAccount "1" -- "*" Feedback : submits @enduml @startuml class Task { - Long id - Long feedbackId - Long assigneeId - Long creatorId - TaskStatus status - SeverityLevel priority + assignTo(userId) + markAsCompleted() } class Assignment { - Long id - Long taskId - Long assigneeId - AssignmentStatus status + accept() } class TaskHistory { - Long id - Task task - TaskStatus oldStatus - TaskStatus newStatus - UserAccount changedBy } enum TaskStatus { CREATED, ASSIGNED, IN_PROGRESS, SUBMITTED, APPROVED, REJECTED, CANCELED } Task "1" -- "1" Feedback : created_from Task "1" -- "*" Assignment Task "1" -- "*" TaskHistory UserAccount "1" -- "*" Task : assigned_to Task *-- TaskStatus @enduml @startuml class Grid { - Long id - Integer gridX - Integer gridY - String cityName - boolean isObstacle } class MapGrid { - Long id - int x - int y - boolean isObstacle - String terrainType } @enduml ``` @startuml class AqiData { - Long id - Grid grid - Long reporterId - Integer aqiValue - String primaryPollutant } class AqiRecord { - Long id - String cityName - Integer aqiValue - LocalDateTime recordTime } class PollutantThreshold { - Long id - String pollutantName - Double threshold - String unit } @enduml ``` @startuml class OperationLog { - Long id - UserAccount user - OperationType operationType - String description - LocalDateTime createdAt } class PasswordResetToken { - Long id - String token - UserAccount user - LocalDateTime expiryDate + isExpired(): boolean } class TaskSubmission { - Long id - Task task - String notes - LocalDateTime submittedAt } class AssignmentRecord { - Long id - Feedback feedback - UserAccount gridWorker - UserAccount admin - AssignmentMethod assignmentMethod } @enduml