Ai简历分析:interview schedule模块

interview-guide项目 面试安排模块的设计与接口实现

InterviewSchedule 面试安排模块设计与实现

这篇笔记记录我在 interview-guide 项目中对 InterviewSchedule 模块的实现思路。目标是把“邀约解析、记录管理、状态维护、提醒协同”整合成一条稳定可维护的链路。

模块能力概览

  • 邀请解析:规则引擎 + AI 双通道,支持飞书/腾讯会议/Zoom 文本格式,自动提取公司、岗位、时间、会议链接。
  • 日历管理:支持日/周/月视图、拖拽调整与列表视图协同。
  • 状态维护:支持手动标记与定时任务自动过期。
  • 提醒机制:支持可配置提醒,降低漏面试风险。

状态转换

关键接口设计

POST /api/interview-schedule/parse 解析面试邀约文本

核心逻辑:

parseService.parse(request.getRawText(), request.getSource());
tryRuleParsing(rawText, source);
parseWithAI(rawText, source);
  • 规则解析优先处理飞书/腾讯/Zoom 结构化片段。
  • AI 解析作为补充通道,增强对非标准文本的适配能力。
  • 在 AI 解析前做输入边界约束与注入防护。

POST /api/interview-schedule 创建面试记录

用途:

  • 支持用户直接输入信息创建面试安排。

调用链:

scheduleService.create(request);

请求体(核心字段):

public class CreateInterviewRequest {
    @NotBlank(message = "公司名称不能为空")
    private String companyName;

    @NotBlank(message = "岗位不能为空")
    private String position;

    @NotNull(message = "面试时间不能为空")
    @com.fasterxml.jackson.annotation.JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm[:ss]")
    private java.time.LocalDateTime interviewTime;

    private String interviewType; // ONSITE, VIDEO, PHONE
    private String meetingLink;
    private Integer roundNumber = 1;
    private String interviewer;
    private String notes;
}

GET /api/interview-schedule/{id} 根据 ID 获取面试记录

处理流程:

  • Controller 接收 id
  • 调用 scheduleService.getById(id)
  • Service 从 Repository 查询单条记录,不存在则抛业务异常
  • 返回 Result<InterviewScheduleDTO>

调用链:

scheduleService.getById(id);

GET /api/interview-schedule 获取面试记录列表

处理流程:

  • Controller 接收可选筛选参数:status/start/end
  • 调用 scheduleService.getAll(status, start, end)
  • Service 按条件查询并转换 DTO
  • 返回 Result<List<InterviewScheduleDTO>>

调用链:

scheduleService.getAll(status, start, end);

PUT /api/interview-schedule/{id} 更新面试记录

处理流程:

  • Controller 接收 id + CreateInterviewRequest@Valid 校验)
  • 调用 scheduleService.update(id, request)
  • Service 查询旧记录,更新字段并保存
  • 返回更新后的 Result<InterviewScheduleDTO>

调用链:

scheduleService.update(id, request);

DELETE /api/interview-schedule/{id} 删除面试记录

处理流程:

  • Controller 接收 id
  • 调用 scheduleService.delete(id)
  • Service 查到后删除,不存在则抛异常
  • 返回 Result<Void>

调用链:

scheduleService.delete(id);

PATCH/PUT /api/interview-schedule/{id}/status 更新面试状态

接口实现:

@RequestMapping(path = "/{id}/status", method = {RequestMethod.PATCH, RequestMethod.PUT})
public Result<InterviewScheduleDTO> updateStatus(
    @PathVariable Long id,
    @RequestParam InterviewStatus status
) {
    log.info("更新面试状态: ID={}, status={}", id, status);
    InterviewScheduleDTO dto = scheduleService.updateStatus(id, status);
    return Result.success(dto);
}

核心调用:

scheduleService.updateStatus(id, status);

小结

InterviewSchedule 模块的核心价值在于把“邀约文本理解”和“面试过程管理”连接起来。对我来说,这一层做好之后,前端日历交互、提醒策略和后续面试评估才能形成连续体验,避免信息散落在聊天记录和手工备忘里。