技术文档

星职技术概览

星职是职位发布、候选人投递、HR 初筛和管理员复核的招聘系统。当前流程覆盖录用与拒绝状态;面试排期、面试通知日历或自动入职办理不在已实现范围内。

入口与技术栈

公开入口为 星职。应用使用 Next.js App Router、React、TypeScript、Drizzle ORM 与 MySQL;私有简历文件存于兼容 S3 的对象存储,邮件通过 SMTP 发送。依赖声明为 Next.js 15.5.24、React 19.1.1、TypeScript 5.9.2、Drizzle 0.45.2。

候选人、HR 和管理员使用本系统的身份与会话能力。源码中独立的邮箱验证、密码重置、角色授权和会话检查,不能解释为已完成 Account 单点登录。候选人个人资料和简历均属于受限数据,不作为公开职位页面资源。

数据模型 关键关系
用户与候选人资料 身份、邮箱验证状态、姓名和联系方式等资料
员工账号 HR / ADMIN 角色及启用状态
职位与职位版本 发布指针引用已发布版本,投递关联具体版本
简历、上传意图、清理意图 数据库记录所有权和状态,对象存储保存私有文件
投递与状态历史 候选人、职位、职位版本、简历、当前状态、版本号
会话、邮件任务、审计事件 权限恢复、异步通知与变更追踪

发布与投递数据流

职位发布不是直接覆盖候选人已经投递时看到的全部数据。系统保留职位版本,投递时记录版本引用,使审核能够对应当时发布内容。同一候选人对同一职位受唯一约束,重复请求不能产生多份独立投递。

候选人提交申请时,服务端重新检查身份和邮箱验证、职位当前发布版本、简历所有权及上传状态,并确认必要的通知接收方。校验通过后,在事务中写入申请、初始版本、状态历史、审计和待发邮件任务。HTTP 成功代表业务写入成功;邮件任务入队不代表收件人已经收到通知。

角色与审核状态机

操作者 当前状态 允许的下一状态
HR APPLIED HR_SCREENING
HR HR_SCREENING PENDING_ADMIN_REVIEW 或 REJECTED
ADMIN PENDING_ADMIN_REVIEW HIRED 或 REJECTED

HIRED 与 REJECTED 为当前状态机的终点。管理员可以访问需要员工身份的范围,但不能越过状态机直接替 HR 完成任何阶段;角色能力与转换规则分别检查。未知角色、未知状态或不允许的转换都拒绝执行。

审核更新携带正整数 expectedVersion 和目标 to,使用乐观并发控制。两名员工打开同一份旧资料时,先完成的修改推进版本;后续旧版本请求返回冲突,须刷新后重新决定,不能悄悄覆盖他人审核。角色授权在服务端执行,隐藏按钮不是权限边界。

简历上传与下载

上传接口只允许候选人,在验证 Origin、Cookie 和请求体限制后接收单个 file。文件限制为 1 字节至 10 MiB,只接受 PDF 或 DOCX。PDF 检查文件头;DOCX 除 ZIP 结构外,检查条目路径、重复条目、加密、宏、ActiveX、嵌入对象和膨胀风险,并拒绝危险 XML 声明。压缩包最多 256 项、展开总量最多 32 MiB,并设压缩比例约束。

这些检查降低格式和压缩炸弹风险,不能当作完整恶意软件扫描。原始文件不放入公开静态目录。候选人只可下载自己的文件;员工下载需要关联有权访问的申请。下载响应使用附件、禁止缓存、nosniff 和沙箱等头,避免把简历作为可信站点内容执行。

上传和删除采用意图记录处理数据库与对象存储之间的中间状态;后台清理按批次推进,不能把一次数据库删除推断成对象已经物理清除。保留时间应以正式政策和实际配置为准,本页不自行给出统一清除期限。

接口、失败与发布边界

API 包括身份注册登录、邮箱验证与重置、申请提交、简历上传下载、职位和员工管理、申请审核,以及审计和邮件任务运维。写入接口检查精确 Origin 和请求大小,错误返回使用业务错误码,不回显数据库驱动详情。审核可能返回无效输入、未登录、无权限、记录不存在、版本冲突或服务不可用。

部署需要可用的 MySQL、私有对象存储、SMTP 和后台任务执行。页面可访问、数据库可连或 SMTP 接受请求均不能单独证明从职位发布到录用通知的完整链路可用。

资料依据 2026-10-23 源码整理。仓库有单元、集成、端到端与部署验收入口,历史结果须与对应环境查看;实际发布仍需验证简历隔离、并发审核、对象清理及通知到达。政策入口见 隐私中心,公司网站入口见 官网。

源码依据

实现位于 careers/src/domain/recruitment.ts、src/server/db/schema.ts、src/server/auth/authorization.ts、src/server/auth/http.ts、src/server/recruitment/application-service.ts、review-http.ts、src/server/storage/resume-validation.ts、http.ts 和清理服务;具体路由位于 src/app/api/。

Markdown 原文完整文档文本