package com.mydreamjob.preference; import com.mydreamjob.common.api.ApiResponse; import com.mydreamjob.common.logging.RequestIdAccessor; import com.mydreamjob.preference.dto.StudentPreferenceRequest; import com.mydreamjob.security.CurrentUserAccessor; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.Map; @Tag(name = "求职偏好", description = "学生求职偏好查询与保存") @RestController @RequestMapping("/profile/me") @RequiredArgsConstructor public class PreferenceController { private final PreferenceService preferenceService; private final CurrentUserAccessor currentUserAccessor; private final RequestIdAccessor requestIdAccessor; @Operation(summary = "查询求职偏好", description = "仅 STUDENT;无记录时返回空偏好对象") @GetMapping("/preferences") public ResponseEntity>> getPreferences(HttpServletRequest request) { Long userId = currentUserAccessor.requireUserId(); Map view = preferenceService.getPreferences(userId); return ResponseEntity.ok(ApiResponse.ok(view, requestIdAccessor.get(request))); } @Operation(summary = "保存求职偏好", description = "仅 STUDENT;upsert,仅更新非 null 字段,薪资单位为元/月;" + "按合并后的期望薪资区间校验,非法返回 400/1001 且无部分更新。" + "已有在线简历时必须携带最近 GET /profile/me/online-resume 的 revision,缺少或过期返回 409/6002;" + "成功写入推进在线简历 revision,随后重新 GET 获取最新版本。" + "未建立在线简历时兼容不传 revision,显式 revision 只能为 0。") @PutMapping("/preferences") public ResponseEntity>> savePreferences( @Valid @RequestBody StudentPreferenceRequest req, HttpServletRequest request) { Long userId = currentUserAccessor.requireUserId(); Map view = preferenceService.savePreferences(userId, req); return ResponseEntity.ok(ApiResponse.ok(view, requestIdAccessor.get(request))); } }