轻松聘AI开发
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

48 lines
2.4 KiB

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<ApiResponse<Map<String, Object>>> getPreferences(HttpServletRequest request) {
Long userId = currentUserAccessor.requireUserId();
Map<String, Object> 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<ApiResponse<Map<String, Object>>> savePreferences(
@Valid @RequestBody StudentPreferenceRequest req,
HttpServletRequest request) {
Long userId = currentUserAccessor.requireUserId();
Map<String, Object> view = preferenceService.savePreferences(userId, req);
return ResponseEntity.ok(ApiResponse.ok(view, requestIdAccessor.get(request)));
}
}