package com.mydreamjob.preference.dto; import jakarta.validation.constraints.AssertTrue; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.Size; import lombok.Data; import java.util.List; @Data public class StudentPreferenceRequest { /** 已保存在线简历时必填;从 GET /profile/me/online-resume 获取。 */ @jakarta.validation.constraints.PositiveOrZero @io.swagger.v3.oas.annotations.media.Schema(minimum = "0", description = "已保存在线简历时必填,取自 GET /profile/me/online-resume;缺少或过期返回409/6002。尚无在线记录时可省略或传0。成功后重新GET获取新版本。") private Long revision; @Min(value = 0, message = "expectedSalaryMin must not be negative") private Integer expectedSalaryMin; @Min(value = 0, message = "expectedSalaryMax must not be negative") private Integer expectedSalaryMax; @Size(max = 20, message = "preferredCities must have at most 20 items") private List<@Size(min = 1, max = 100, message = "each city must be 1-100 chars") String> preferredCities; @Size(max = 20, message = "employmentTypes must have at most 20 items") private List<@Size(min = 1, max = 100, message = "each employment type must be 1-100 chars") String> employmentTypes; @Size(max = 20, message = "preferredIndustries must have at most 20 items") private List<@Size(min = 1, max = 100, message = "each industry must be 1-100 chars") String> preferredIndustries; @Size(max = 20, message = "preferredJobTypes must have at most 20 items") private List<@Size(min = 1, max = 100, message = "each job type must be 1-100 chars") String> preferredJobTypes; private Boolean remoteAllowed; @AssertTrue(message = "expectedSalaryMin must not be greater than expectedSalaryMax") public boolean isSalaryRangeValid() { if (expectedSalaryMin == null || expectedSalaryMax == null) return true; return expectedSalaryMin <= expectedSalaryMax; } }