package com.emoon.okr.dto; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.Size; import lombok.Data; import java.util.ArrayList; import java.util.List; public final class PeerReviewDto { private PeerReviewDto() { } @Data public static class SubmitListRequest { @NotNull private Long periodId; @NotEmpty @Size(min = 3, max = 5) private List reviewerIds; } @Data public static class ReviewListRequest { @NotNull private Boolean approved; @Size(max = 300) private String reason; } @Data public static class DeclineRequest { @NotBlank @Size(max = 300) private String reason; } @Data public static class SupplementRequest { @NotNull private Long periodId; @NotNull private Long reviewerId; } @Data public static class SaveResponseRequest { @Min(1) @Max(5) private Integer goalContributionScore; @Min(1) @Max(5) private Integer collaborationScore; @Min(1) @Max(5) private Integer accountabilityScore; @Size(max = 300) private String strengths; @Size(max = 300) private String improvementSuggestion; } @Data public static class ReviewerWorkspace { private Long invitationId; private Long subjectUserId; private String subjectName; private String status; private List objectives = new ArrayList<>(); private List workResults = new ArrayList<>(); private SaveResponseRequest response; } @Data public static class ObjectiveSummary { private String title; private Double progress; private List keyResults = new ArrayList<>(); } @Data public static class KrSummary { private String title; private Double currentValue; private Double targetValue; private String status; } @Data public static class WorkResultSummary { private String name; private String description; } @Data public static class Candidate { private Long userId; private String realName; private Long departmentId; private String relationType; } @Data public static class EmployeeProgress { private Long requestId; private String status; private String rejectionReason; private int invitedCount; private int submittedCount; private List invitations = new ArrayList<>(); } @Data public static class InvitationSummary { private Long invitationId; private Long reviewerId; private String reviewerName; private String relationType; private String status; private String declineReason; } @Data public static class LeaderSummary { private Long requestId; private Long subjectUserId; private String status; private int invitedCount; private int submittedCount; private boolean canFinalize; private Double averageGoalContributionScore; private Double averageCollaborationScore; private Double averageAccountabilityScore; private List invitations = new ArrayList<>(); private List responses = new ArrayList<>(); } @Data public static class LeaderResponse { private Long reviewerId; private String reviewerName; private Integer goalContributionScore; private Integer collaborationScore; private Integer accountabilityScore; private String strengths; private String improvementSuggestion; } @Data public static class LeaderQueueItem { private Long requestId; private Long subjectUserId; private String status; private int submittedCount; private boolean canFinalize; } @Data public static class AdminStatistics { private int requestedEmployeeCount; private int submittedResponseCount; private int blockedEmployeeCount; private List blockedSubjectUserIds = new ArrayList<>(); } }