Ever Gauzy 职位搜索插件(@gauzy/plugin-job-search)实战指南:构建、测试、发布与集成原理
后端前端企业应用MCP 服务【免费下载链接】ever-gauzyEver® Gauzy™ - Open Business Management Platform (ERP/CRM/HRM/ATS/PM) - https://gauzy.co项目地址https://gitcode.com/GitHub_Trending/ev/ever-gauzy点击查看免费下载导读gauzy/plugin-job-search是 Ever Gauzy 开放业务管理平台ERP/CRM/HRM/ATS/PM中的职位搜索Job Search插件为求职者与雇主双方提供职位检索、匹配与申请能力。本文以插件官方 READMEpackages/plugins/job-search/README.md为核心骨架结合仓库源码深入讲解其安装、构建、单元测试、发布流程以及背后基于 NestJS、CQRS 与 Gauzy AI 的匹配实现原理帮助你将该插件正确集成到自己的 Gauzy 部署中。插件定位与功能概览面向双方的一站式职位工具根据 README 概述该插件被定位为增强职位搜索体验的强大工具无论使用者是求职者还是雇主都能借助它简化流程、提升效率。它对外公开的两大核心特性包括高级搜索Advanced Search利用高级筛选条件查找符合个人偏好的职位列表职位提醒Job Alerts设置职位提醒当出现符合条件的新职位时接收通知。在 package.json 的keywords中插件被标注为job-search、recruitment、employment、NestJS、microservices等可见其定位是一个部署在服务端、面向招聘与求职场景的 NestJS 微服务模块。插件在整个平台中的角色从 project.json 可以确认它是一个type:plugin类型的 Nx 库且声明了隐式依赖common、config、contracts、core、plugin、plugin-integration-ai、utils。这意味着插件深度复用了 Gauzy 核心包、契约类型定义以及 Gauzy AI 集成插件——职位匹配的核心逻辑正是交由 Gauzy AI 服务完成的下文详述。环境要求与依赖在安装和构建前请先确认运行环境满足 package.json 中声明的引擎要求项目要求Node.js22Yarn1.22运行时 peer 依赖nestjs/common ^11.1.26、nestjs/core ^11.1.26主要运行时依赖还包括gauzy/common、gauzy/config、gauzy/contracts、gauzy/core、gauzy/plugin、gauzy/plugin-integration-ai、mikro-orm/nestjs、nestjs/cqrs、nestjs/swagger、nestjs/typeorm、html-to-text、class-validator等。其中nestjs/cqrs用于命令/查询总线html-to-text用于将职位申请提案的 HTML 内容转为纯文本见 employee-job.service.ts。安装插件根据 README 安装章节在终端中执行以下任一命令即可安装npm install gauzy/plugin-job-search # 或 yarn add gauzy/plugin-job-search注当前仓库内该包标记为private: true见 package.json因此其发布版gauzy/plugin-job-search面向 npm 上的公开发行版本。在仓库内本地联调时也可通过工作区直接引用源码库。构建插件库使用 Nx 构建README 构建章节 给出的构建命令是yarn nx build plugin-job-search该命令由 project.json 中的buildtarget 驱动采用nx/js:tsc执行器关键配置如下输出目录dist/packages/plugins/job-searchTypeScript 配置tsconfig.lib.json入口文件packages/plugins/job-search/src/index.ts资源拷贝将packages/plugins/job-search/*.md即 README、CHANGELOG 等文档一并复制到产物目录依赖顺序dependsOn: [^build]会先构建其依赖库common、core、plugin-integration-ai 等。仓库内 package.json 还提供了三个便捷脚本与 Nx 命令等价scripts: { lib:build: yarn nx build plugin-job-search, lib:build:prod: yarn nx build plugin-job-search, lib:watch: yarn nx build plugin-job-search --watch }lib:build/lib:build:prod普通构建与生产构建lib:watch开启 watch 模式源码变更时增量编译适合开发调试。构建产物的清单入口main指向./src/index.js类型声明为./src/index.d.ts见 package.json。插件的公开 API 面插件的唯一公开导出在 src/index.tsexport * from ./lib/job-search.plugin;也就是说使用方只需引入JobSearchPlugin类并将其注册进 Gauzy 应用即可。其内部结构employee-job、employee-job-preset 两个子模块均为实现细节不对外暴露。运行单元测试README 测试章节 给出的测试命令为yarn nx test plugin-job-search测试通过 Jestmodule.exports { displayName: plugin-job-search, preset: ../../../jest.preset.js, testEnvironment: node, transform: { ^.\\.[tj]s$: [ts-jest, { tsconfig: rootDir/tsconfig.spec.json }] }, moduleFileExtensions: [ts, js, html], coverageDirectory: ../../../coverage/packages/plugins/job-search };要点说明testEnvironment: node该插件是纯服务端库测试运行在 Node 环境而非 jsdom使用ts-jest配合 tsconfig.spec.json 编译 TypeScript覆盖率报告输出至coverage/packages/plugins/job-search。在 project.json 中testtarget 使用nx/jest:jest执行器并同样输出覆盖率到coverage/{projectRoot}。发布到 npmREADME 发布章节 给出了发布步骤先执行构建yarn nx build plugin-job-search进入产物目录dist/packages/plugins/job-search执行发布npm publish。由于构建 target 配置了assets: [packages/plugins/job-search/*.md]发布包中会携带 README 与 CHANGELOG 文档。仓库侧还通过 project.json 的nx-release-publishtarget 支持 Nx 的发布流程发布根目录同样指向dist/{projectRoot}版本号通过 git tag 解析currentVersionResolver: git-tag。发布前请按需修改 package.json 中的version字段当前为0.1.0。源码级原理插件如何工作插件生命周期与种子数据JobSearchPlugin见 job-search.plugin.ts实现了IOnPluginBootstrap、IOnPluginDestroy、IOnPluginSeedable三个生命周期接口通过Plugin()装饰器声明其构成Plugin({ imports: [EmployeeJobPostModule, EmployeeJobPresetModule, SeederModule], entities: [...entities], configuration: (config: ApplicationPluginConfig) { config.customFields.Employee.push({ name: jobPresets, type: relation, relationType: many-to-many, pivotTable: employee_job_preset, joinColumn: jobPresetId, inverseJoinColumn: employeeId, entity: JobPreset, inverseSide: (it: JobPreset) it.employees }); return config; }, providers: [JobSeederService] }) export class JobSearchPlugin implements IOnPluginBootstrap, IOnPluginDestroy, IOnPluginSeedable生命周期钩子onPluginBootstrap/onPluginDestroy分别在插件启动、销毁时通过 chalk 输出绿色/红色日志自定义字段插件启动时向Employee实体注入jobPresets多对多关系字段中间表为employee_job_preset关联JobPreset实体——这是职位预设Preset与员工关联的底层机制种子数据onPluginDefaultSeed调用JobSeederService.seedDefaultJobsData()写入默认职位搜索类别与职业类别详见 job-seeder.service.tsonPluginRandomSeed则预留随机数据填充逻辑。entities数组来自 employee-job-preset.module.ts包含五个实体JobPreset、JobPresetUpworkJobSearchCriterion、EmployeeUpworkJobsSearchCriterion、JobSearchOccupation、JobSearchCategory它们构成职位预设、筛选条件、职业类别与搜索类别的数据模型。两个子模块职位发布与职位预设插件内部拆分为两个 NestJS 模块1. EmployeeJobPostModuleemployee-job.module.ts负责员工—职位匹配业务导入EmployeeModule、IntegrationTenantModule、TenantModule、RolePermissionModule、GauzyAIModule.forRoot()与CqrsModule注册了EmployeeJobPostController、EmployeeJobPostService以及一组命令/查询处理器。2. EmployeeJobPresetModuleemployee-job-preset.module.ts负责职位搜索预设Preset体系同时注册 TypeORM 与 MikroORM 两套实体特性TypeOrmModule.forFeature与MikroOrmModule.forFeature暴露四个控制器JobSearchOccupationController、JobSearchCategoryController、EmployeePresetController、JobSearchPresetController并向外部导出JobPresetService、JobSearchCategoryService、JobSearchOccupationService。职位 API 端点一览EmployeeJobPostController 挂载于/employee-job路径全部端点受TenantPermissionGuard与PermissionGuard保护并按权限细分HTTP 方法与路径权限用途GET /employee-job/ORG_JOB_SEARCH分页查询员工职位列表GET /employee-job/statisticsORG_JOB_EMPLOYEE_VIEW员工职位统计PUT /employee-job/:id/job-search-statusORG_EMPLOYEES_EDIT、PROFILE_EDIT更新员工职位搜索状态POST /employee-job/applyORG_JOB_APPLY申请职位POST /employee-job/updateAppliedORG_JOB_APPLY更新申请状态POST /employee-job/hideORG_JOB_EDIT隐藏/恢复职位可见性POST /employee-job/pre-processORG_JOB_APPLY创建职位申请预记录GET /employee-job/application/:employeeJobApplicationIdORG_JOB_APPLY获取 AI 生成的申请提案POST /employee-job/generate-proposal/:employeeJobApplicationIdORG_JOB_APPLY生成 AI 申请提案代码风格上命令类操作如更新搜索状态通过CommandBus派发 CQRS 命令查询类操作如统计通过QueryBus派发查询服务层则承担与 Gauzy AI 的实际交互。与 Gauzy AI 的协作高级搜索与职位提醒的底层支撑高级搜索与职位提醒是 README 宣传的两大特性它们在源码中主要由 EmployeeJobPostService 与 Gauzy AI 集成插件协同实现职位匹配findAll方法首先通过EmployeeService.findAllActive()获取活跃员工再检测配置项env.gauzyAIGraphQLEndpoint来自gauzy/config是否可用若可用则校验GAUZY_AI集成与JOB_MATCHING实体同步状态最终调用GauzyAIService.getEmployeesJobPosts(data)获取匹配职位。若用户缺少CHANGE_SELECTED_EMPLOYEE权限则自动将筛选范围限定为当前员工 ID——从源码结构看这是权限控制与数据隔离的默认策略。职位申请apply方法先将proposal字段中的 HTML 通过html-to-text转为无换行纯文本再交给 Gauzy AI 服务执行申请。可见性与申请状态updateVisibility、updateApplied均直接委托GauzyAIService对应隐藏职位与标记已申请两个动作其中是否针对单个员工生效取决于请求中是否携带employeeId。可见该插件的定位是一个厚集成层对外提供 REST API 与数据模型对内将职位匹配、申请等重活委托给 Gauzy AI 服务这与 project.json 中声明的plugin-integration-ai隐式依赖完全吻合。预设Preset体系与种子数据职位预设体系让雇主可批量定义搜索偏好JobPreset与JobPresetUpworkJobSearchCriterion、EmployeeUpworkJobsSearchCriterion实体用于存储预设及其 Upwork 搜索条件JobSearchCategory、JobSearchOccupation提供类别与职业维度。配套的命令处理器见 commands/handlers包括CreateJobPresetHandler、SaveEmployeePresetHandler、SaveEmployeeCriterionHandler、SavePresetCriterionHandler覆盖预设创建、员工预设保存、员工条件保存、预设条件保存等场景。默认数据方面JobSeederService.seedDefaultJobsData()job-seeder.service.ts在插件默认种子阶段执行通过createDefaultJobSearchCategories与createDefaultJobSearchOccupations定义于 job-search-category.seed.ts 与 job-search-occupation.seed.ts写入默认类别与职业数据并区分生产与非生产环境的日志输出。常见问题与注意事项构建失败先查依赖由于buildtarget 带有dependsOn: [^build]一次构建会级联编译 common、core、plugin-integration-ai 等上游库耗时较长属正常现象测试环境为 Node插件不含任何浏览器相关代码测试必须运行在testEnvironment: node下职位匹配依赖 Gauzy AI若未配置gauzyAIGraphQLEndpoint或未建立GAUZY_AI集成与JOB_MATCHING实体同步findAll将退化为仅返回本地员工列表见 employee-job.service.ts无法获得 AI 匹配职位发布前版本管理仓库内该包为private正式对外发布需先在 npm 上具备gauzy/plugin-job-search的发布权限并按 project.json 的 release 配置管理版本号。参考文件索引官方说明packages/plugins/job-search/README.md包元数据packages/plugins/job-search/package.jsonNx 工程配置packages/plugins/job-search/project.json插件入口与生命周期src/index.ts、job-search.plugin.ts职位匹配模块employee-job.module.ts、employee-job.controller.ts、employee-job.service.ts职位预设模块employee-job-preset.module.ts、job-seeder.service.ts测试配置jest.config.ts赞分享后端前端企业应用MCP 服务【免费下载链接】ever-gauzyEver® Gauzy™ - Open Business Management Platform (ERP/CRM/HRM/ATS/PM) - https://gauzy.co项目地址https://gitcode.com/GitHub_Trending/ev/ever-gauzy点击查看免费下载相关推荐Ever Gauzy 的 Hubstaff 集成 UI 插件构建、发布与前端集成实战指南Ever Gauzy 的 Hubstaff 集成 UI 插件构建、发布与前端集成实战指南 gauzy/plugin integration hubstaff后端前端企业应用MCP 服务Ever Gauzy Plane 集成 UI 插件指南构建、发布、安装与配置实战Ever Gauzy Plane 集成 UI 插件指南构建、发布、安装与配置实战 Ever® Gauzy™ 是开源的商业管理平台ERP/CRM/HRM/AT后端前端企业应用MCP 服务Ever Gauzy AI 集成 UI 插件gauzy/plugin-integration-ai-ui开发实践与源码解析Ever Gauzy AI 集成 UI 插件gauzy/plugin integration ai ui开发实践与源码解析 Ever® Gauzy™ 的后端前端企业应用MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →