@plolink/sdk 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -343,7 +343,7 @@ var PsychologyTest = class {
343
343
  *
344
344
  * @description
345
345
  * 查询心理评测会话列表,支持分页和多条件筛选。
346
- * 此接口通常用于管理后台或业务系统查询评测记录。
346
+ * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。
347
347
  *
348
348
  * @param params - 查询参数
349
349
  * @returns 会话列表和分页信息
@@ -384,8 +384,7 @@ var PsychologyTest = class {
384
384
  if (params.analysisStatus) queryParams.append("analysisStatus", params.analysisStatus);
385
385
  if (params.startDate) queryParams.append("startDate", params.startDate);
386
386
  if (params.endDate) queryParams.append("endDate", params.endDate);
387
- if (params.teamId) queryParams.append("teamId", params.teamId);
388
- const url = `/api/admin/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ""}`;
387
+ const url = `/api/v1/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ""}`;
389
388
  const response = await this.client.axiosInstance.get(url);
390
389
  this.client.logger.info("Psychology test sessions listed successfully", {
391
390
  total: response.total,
@@ -402,7 +401,7 @@ var PsychologyTest = class {
402
401
  *
403
402
  * @description
404
403
  * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,
405
- * 但在正常查询中不会显示。此接口通常用于管理后台。
404
+ * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。
406
405
  *
407
406
  * @param sessionId - 评测会话ID
408
407
  * @returns void
@@ -425,7 +424,7 @@ var PsychologyTest = class {
425
424
  }
426
425
  try {
427
426
  await this.client.axiosInstance.delete(
428
- `/api/admin/psychology/test-sessions/${sessionId}`
427
+ `/api/v1/psychology/test-sessions/${sessionId}`
429
428
  );
430
429
  this.client.logger.info("Psychology test session deleted successfully", {
431
430
  sessionId
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/modules/psychology-test/index.ts"],"names":["PlolinkError"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 心理评测模块\n * \n * @description\n * 提供心理评测相关功能,包括:\n * - 发起心理评测会话\n * - 提交心理评测答题\n * - 获取评测详情和结果\n * - 获取答题记录\n * \n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * \n * const client = new PlolinkClient({\n * token: 'sk-your-api-key'\n * });\n * \n * // 发起心理评测\n * const initResult = await client.psychologyTest.initiate({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * console.log(`评测会话已创建: ${initResult.sessionId}`);\n * console.log(`共 ${initResult.totalCount} 道题目`);\n * \n * // 用户答题...\n * const answers = initResult.questions.map(q => ({\n * groupCode: q.groupCode,\n * bankId: q.bankId,\n * questionId: q.questionId,\n * questionCode: q.questionCode,\n * answer: getUserAnswer(q), // 获取用户答案\n * timeSpent: getTimeSpent(q) // 获取答题时间\n * }));\n * \n * // 提交心理评测\n * const submitResult = await client.psychologyTest.submit({\n * sessionId: initResult.sessionId,\n * answers,\n * duration: 480000\n * });\n * console.log('得分描述:', submitResult.scoreDescription);\n * \n * // 查询评测详情\n * const detail = await client.psychologyTest.getDetail(initResult.sessionId);\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * }\n * ```\n * \n * @module psychology-test\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type {\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n SubmitPsychologyTestParams,\n SubmitPsychologyTestResponse,\n PsychologyTestDetail,\n PsychologyTestAnswerDetail,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\nexport type {\n PsychologyTestStatus,\n PsychologyAnalysisStatus,\n QuestionType,\n QuestionDependency,\n QuestionOption,\n QuestionMetadata,\n QuestionInfo,\n GroupSummary,\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n AnswerRecord,\n SubmitPsychologyTestParams,\n TestCalculationResult,\n SubmitPsychologyTestResponse,\n PsychologyTestAnswerDetail,\n PsychologyTestDetail,\n PsychologyTestWebhookData,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\n/**\n * 心理评测模块\n */\nexport class PsychologyTest {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 创建心理评测会话\n * \n * @description\n * 创建心理评测会话记录(不返回题目)。\n * 创建后需要调用 getSessionQuestions() 获取题目列表。\n * \n * @param params - 创建会话参数\n * @returns 会话信息,包含会话ID\n * @throws {PlolinkError} 当参数验证失败或创建失败时抛出\n * \n * @example\n * ```typescript\n * // 1. 创建会话\n * const { sessionId } = await client.psychologyTest.createTestSession({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * \n * console.log(`评测会话已创建: ${sessionId}`);\n * \n * // 2. 获取题目\n * const questions = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n */\n public async createTestSession(params: CreatePsychologyTestSessionParams): Promise<CreatePsychologyTestSessionResponse> {\n this.client.logger.info('Creating psychology test session', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<CreatePsychologyTestSessionResponse>(\n '/api/v1/psychology/test-sessions',\n params\n );\n\n this.client.logger.info('Psychology test session created successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to create psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取会话题目\n * \n * @description\n * 获取心理评测会话的题目列表(动态生成,每次调用都会重新打乱题目顺序)。\n * \n * @param sessionId - 评测会话ID\n * @returns 题目列表和题组摘要\n * @throws {PlolinkError} 当会话不存在或获取失败时抛出\n * \n * @example\n * ```typescript\n * const questions = await client.psychologyTest.getSessionQuestions('clxxxx789012');\n * \n * console.log(`共 ${questions.totalCount} 道题目`);\n * console.log('题组摘要:', questions.groupSummary);\n * \n * // 展示题目\n * questions.questions.forEach((q, index) => {\n * console.log(`题目 ${index + 1}: ${q.content}`);\n * });\n * ```\n */\n public async getSessionQuestions(sessionId: string): Promise<GetSessionQuestionsResponse> {\n this.client.logger.info('Getting session questions', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError('sessionId is required', 'VALIDATION_ERROR');\n }\n\n try {\n const response = await this.client.axiosInstance.get<GetSessionQuestionsResponse>(\n `/api/v1/psychology/test-sessions/${sessionId}/questions`\n );\n\n this.client.logger.info('Session questions retrieved successfully', {\n sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get session questions', { error, sessionId });\n throw error;\n }\n }\n\n /**\n * 发起心理评测(已废弃)\n * \n * @deprecated 此方法已废弃,将在 v2.0 中移除。请使用 createTestSession() + getSessionQuestions() 替代。\n * \n * @description\n * 根据题组代码列表发起心理评测会话,系统会自动生成打乱后的题目列表并返回。\n * \n * **迁移建议**:\n * ```typescript\n * // 旧方式(已废弃)\n * const result = await client.psychologyTest.initiate(params);\n * \n * // 新方式(推荐)\n * const { sessionId } = await client.psychologyTest.createTestSession(params);\n * const result = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n * \n * @param params - 发起评测参数\n * @returns 评测会话信息,包含会话ID和题目列表\n * @throws {PlolinkError} 当参数验证失败或发起失败时抛出\n */\n public async initiate(params: InitiatePsychologyTestParams): Promise<InitiatePsychologyTestResponse> {\n this.client.logger.warn('Using deprecated initiate() method. Please use createTestSession() + getSessionQuestions() instead.');\n \n this.client.logger.info('Initiating psychology test (deprecated)', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n // 内部调用新方法实现兼容\n const { sessionId } = await this.createTestSession(params);\n const questionsData = await this.getSessionQuestions(sessionId);\n\n const response: InitiatePsychologyTestResponse = {\n sessionId,\n ...questionsData,\n };\n\n this.client.logger.info('Psychology test initiated successfully (deprecated)', {\n sessionId: response.sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to initiate psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 提交心理评测\n * \n * @description\n * 提交心理评测答题数据,系统会自动计算得分并生成 Markdown 描述。\n * 如需 AI 分析则会加入异步队列,分析完成后会通过 Webhook 通知。\n * \n * @param params - 提交评测参数\n * @returns 提交结果,包含计算结果和得分描述\n * @throws {PlolinkError} 当参数验证失败或提交失败时抛出\n * \n * @example\n * ```typescript\n * const result = await client.psychologyTest.submit({\n * sessionId: 'clxxxx789012',\n * answers: [\n * {\n * groupCode: 'family_parenting',\n * bankId: 'bank_123',\n * questionId: 'q_001',\n * questionCode: 'FP001A',\n * answer: '1',\n * timeSpent: 3500\n * },\n * // ... 更多答题记录\n * ],\n * duration: 480000\n * });\n * \n * console.log('得分描述:', result.scoreDescription);\n * console.log('计算结果:', result.calculationResults);\n * ```\n */\n public async submit(params: SubmitPsychologyTestParams): Promise<SubmitPsychologyTestResponse> {\n this.client.logger.info('Submitting psychology test', {\n sessionId: params.sessionId,\n answersCount: params.answers.length,\n });\n\n // 参数校验\n if (!params.sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.answers || params.answers.length === 0) {\n throw new PlolinkError(\n 'answers is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<SubmitPsychologyTestResponse>(\n '/api/v1/psychology/test-sessions/submit',\n params\n );\n\n this.client.logger.info('Psychology test submitted successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to submit psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测详情\n * \n * @description\n * 获取心理评测会话的完整信息,包括基本信息、计算结果、得分描述、AI分析结果等。\n * \n * @param sessionId - 评测会话ID\n * @returns 评测会话详情\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const detail = await client.psychologyTest.getDetail('clxxxx789012');\n * \n * console.log('评测状态:', detail.status);\n * console.log('得分描述:', detail.scoreDescription);\n * \n * // 检查分析状态\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * } else if (detail.analysisStatus === 'ANALYZING') {\n * console.log('AI分析进行中,请稍后查询');\n * } else if (detail.analysisStatus === 'FAILED') {\n * console.error('分析失败:', detail.analysisError);\n * }\n * ```\n */\n public async getDetail(sessionId: string): Promise<PsychologyTestDetail> {\n this.client.logger.info('Getting psychology test detail', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestDetail>(\n `/api/v1/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test detail retrieved successfully', {\n sessionId,\n status: response.status,\n analysisStatus: response.analysisStatus,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test detail', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测答题记录\n * \n * @description\n * 获取心理评测会话的所有答题记录。\n * \n * @param sessionId - 评测会话ID\n * @returns 答题记录列表\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const answers = await client.psychologyTest.getAnswers('clxxxx789012');\n * \n * console.log(`共 ${answers.length} 条答题记录`);\n * answers.forEach(answer => {\n * console.log(`题目 ${answer.questionCode}: ${answer.answer}`);\n * });\n * ```\n */\n public async getAnswers(sessionId: string): Promise<PsychologyTestAnswerDetail[]> {\n this.client.logger.info('Getting psychology test answers', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestAnswerDetail[]>(\n `/api/v1/psychology/test-sessions/${sessionId}/answers`\n );\n\n this.client.logger.info('Psychology test answers retrieved successfully', {\n sessionId,\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test answers', { error });\n throw error;\n }\n }\n\n /**\n * 列表查询心理评测会话\n * \n * @description\n * 查询心理评测会话列表,支持分页和多条件筛选。\n * 此接口通常用于管理后台或业务系统查询评测记录。\n * \n * @param params - 查询参数\n * @returns 会话列表和分页信息\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * // 查询所有评测会话\n * const result = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20\n * });\n * \n * console.log(`共 ${result.total} 条记录`);\n * result.list.forEach(session => {\n * console.log(`会话ID: ${session.id}, 状态: ${session.status}`);\n * });\n * \n * // 按条件筛选\n * const filtered = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20,\n * businessModule: 'talent_assessment',\n * status: 'COMPLETED',\n * analysisStatus: 'COMPLETED'\n * });\n * ```\n */\n public async listTestSessions(\n params: ListPsychologyTestSessionsParams = {}\n ): Promise<ListPsychologyTestSessionsResponse> {\n this.client.logger.info('Listing psychology test sessions', { params });\n\n try {\n // 构建查询参数\n const queryParams = new URLSearchParams();\n if (params.page !== undefined) queryParams.append('page', String(params.page));\n if (params.size !== undefined) queryParams.append('size', String(params.size));\n if (params.businessModule) queryParams.append('businessModule', params.businessModule);\n if (params.businessCode) queryParams.append('businessCode', params.businessCode);\n if (params.status) queryParams.append('status', params.status);\n if (params.analysisStatus) queryParams.append('analysisStatus', params.analysisStatus);\n if (params.startDate) queryParams.append('startDate', params.startDate);\n if (params.endDate) queryParams.append('endDate', params.endDate);\n if (params.teamId) queryParams.append('teamId', params.teamId);\n\n const url = `/api/admin/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\n const response = await this.client.axiosInstance.get<ListPsychologyTestSessionsResponse>(url);\n\n this.client.logger.info('Psychology test sessions listed successfully', {\n total: response.total,\n count: response.list.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology test sessions', { error });\n throw error;\n }\n }\n\n /**\n * 删除心理评测会话\n * \n * @description\n * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,\n * 但在正常查询中不会显示。此接口通常用于管理后台。\n * \n * @param sessionId - 评测会话ID\n * @returns void\n * @throws {PlolinkError} 当会话不存在或删除失败时抛出\n * \n * @example\n * ```typescript\n * // 删除评测会话\n * await client.psychologyTest.deleteTestSession('clxxxx789012');\n * console.log('评测会话已删除');\n * ```\n */\n public async deleteTestSession(sessionId: string): Promise<void> {\n this.client.logger.info('Deleting psychology test session', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n await this.client.axiosInstance.delete(\n `/api/admin/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test session deleted successfully', {\n sessionId,\n });\n } catch (error) {\n this.client.logger.error('Failed to delete psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取题库组列表\n * \n * @description\n * 获取所有启用状态的题库组列表,返回基本信息用于选择。\n * 此接口不需要管理员权限,普通用户即可调用。\n * \n * @returns 题库组列表\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * const groups = await client.psychologyTest.listBankGroups();\n * groups.forEach(g => {\n * console.log(`${g.name} (${g.code}): ${g.testObjective}`);\n * });\n * ```\n */\n public async listBankGroups(): Promise<PsychologyBankGroupSummary[]> {\n this.client.logger.info('Listing psychology bank groups');\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyBankGroupSummary[]>(\n '/api/v1/psychology/bank-groups'\n );\n\n this.client.logger.info('Psychology bank groups listed successfully', {\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology bank groups', { error });\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/modules/psychology-test/index.ts"],"names":["PlolinkError"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 心理评测模块\n * \n * @description\n * 提供心理评测相关功能,包括:\n * - 发起心理评测会话\n * - 提交心理评测答题\n * - 获取评测详情和结果\n * - 获取答题记录\n * \n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * \n * const client = new PlolinkClient({\n * token: 'sk-your-api-key'\n * });\n * \n * // 发起心理评测\n * const initResult = await client.psychologyTest.initiate({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * console.log(`评测会话已创建: ${initResult.sessionId}`);\n * console.log(`共 ${initResult.totalCount} 道题目`);\n * \n * // 用户答题...\n * const answers = initResult.questions.map(q => ({\n * groupCode: q.groupCode,\n * bankId: q.bankId,\n * questionId: q.questionId,\n * questionCode: q.questionCode,\n * answer: getUserAnswer(q), // 获取用户答案\n * timeSpent: getTimeSpent(q) // 获取答题时间\n * }));\n * \n * // 提交心理评测\n * const submitResult = await client.psychologyTest.submit({\n * sessionId: initResult.sessionId,\n * answers,\n * duration: 480000\n * });\n * console.log('得分描述:', submitResult.scoreDescription);\n * \n * // 查询评测详情\n * const detail = await client.psychologyTest.getDetail(initResult.sessionId);\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * }\n * ```\n * \n * @module psychology-test\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type {\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n SubmitPsychologyTestParams,\n SubmitPsychologyTestResponse,\n PsychologyTestDetail,\n PsychologyTestAnswerDetail,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\nexport type {\n PsychologyTestStatus,\n PsychologyAnalysisStatus,\n QuestionType,\n QuestionDependency,\n QuestionOption,\n QuestionMetadata,\n QuestionInfo,\n GroupSummary,\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n AnswerRecord,\n SubmitPsychologyTestParams,\n TestCalculationResult,\n SubmitPsychologyTestResponse,\n PsychologyTestAnswerDetail,\n PsychologyTestDetail,\n PsychologyTestWebhookData,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\n/**\n * 心理评测模块\n */\nexport class PsychologyTest {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 创建心理评测会话\n * \n * @description\n * 创建心理评测会话记录(不返回题目)。\n * 创建后需要调用 getSessionQuestions() 获取题目列表。\n * \n * @param params - 创建会话参数\n * @returns 会话信息,包含会话ID\n * @throws {PlolinkError} 当参数验证失败或创建失败时抛出\n * \n * @example\n * ```typescript\n * // 1. 创建会话\n * const { sessionId } = await client.psychologyTest.createTestSession({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * \n * console.log(`评测会话已创建: ${sessionId}`);\n * \n * // 2. 获取题目\n * const questions = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n */\n public async createTestSession(params: CreatePsychologyTestSessionParams): Promise<CreatePsychologyTestSessionResponse> {\n this.client.logger.info('Creating psychology test session', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<CreatePsychologyTestSessionResponse>(\n '/api/v1/psychology/test-sessions',\n params\n );\n\n this.client.logger.info('Psychology test session created successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to create psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取会话题目\n * \n * @description\n * 获取心理评测会话的题目列表(动态生成,每次调用都会重新打乱题目顺序)。\n * \n * @param sessionId - 评测会话ID\n * @returns 题目列表和题组摘要\n * @throws {PlolinkError} 当会话不存在或获取失败时抛出\n * \n * @example\n * ```typescript\n * const questions = await client.psychologyTest.getSessionQuestions('clxxxx789012');\n * \n * console.log(`共 ${questions.totalCount} 道题目`);\n * console.log('题组摘要:', questions.groupSummary);\n * \n * // 展示题目\n * questions.questions.forEach((q, index) => {\n * console.log(`题目 ${index + 1}: ${q.content}`);\n * });\n * ```\n */\n public async getSessionQuestions(sessionId: string): Promise<GetSessionQuestionsResponse> {\n this.client.logger.info('Getting session questions', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError('sessionId is required', 'VALIDATION_ERROR');\n }\n\n try {\n const response = await this.client.axiosInstance.get<GetSessionQuestionsResponse>(\n `/api/v1/psychology/test-sessions/${sessionId}/questions`\n );\n\n this.client.logger.info('Session questions retrieved successfully', {\n sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get session questions', { error, sessionId });\n throw error;\n }\n }\n\n /**\n * 发起心理评测(已废弃)\n * \n * @deprecated 此方法已废弃,将在 v2.0 中移除。请使用 createTestSession() + getSessionQuestions() 替代。\n * \n * @description\n * 根据题组代码列表发起心理评测会话,系统会自动生成打乱后的题目列表并返回。\n * \n * **迁移建议**:\n * ```typescript\n * // 旧方式(已废弃)\n * const result = await client.psychologyTest.initiate(params);\n * \n * // 新方式(推荐)\n * const { sessionId } = await client.psychologyTest.createTestSession(params);\n * const result = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n * \n * @param params - 发起评测参数\n * @returns 评测会话信息,包含会话ID和题目列表\n * @throws {PlolinkError} 当参数验证失败或发起失败时抛出\n */\n public async initiate(params: InitiatePsychologyTestParams): Promise<InitiatePsychologyTestResponse> {\n this.client.logger.warn('Using deprecated initiate() method. Please use createTestSession() + getSessionQuestions() instead.');\n \n this.client.logger.info('Initiating psychology test (deprecated)', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n // 内部调用新方法实现兼容\n const { sessionId } = await this.createTestSession(params);\n const questionsData = await this.getSessionQuestions(sessionId);\n\n const response: InitiatePsychologyTestResponse = {\n sessionId,\n ...questionsData,\n };\n\n this.client.logger.info('Psychology test initiated successfully (deprecated)', {\n sessionId: response.sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to initiate psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 提交心理评测\n * \n * @description\n * 提交心理评测答题数据,系统会自动计算得分并生成 Markdown 描述。\n * 如需 AI 分析则会加入异步队列,分析完成后会通过 Webhook 通知。\n * \n * @param params - 提交评测参数\n * @returns 提交结果,包含计算结果和得分描述\n * @throws {PlolinkError} 当参数验证失败或提交失败时抛出\n * \n * @example\n * ```typescript\n * const result = await client.psychologyTest.submit({\n * sessionId: 'clxxxx789012',\n * answers: [\n * {\n * groupCode: 'family_parenting',\n * bankId: 'bank_123',\n * questionId: 'q_001',\n * questionCode: 'FP001A',\n * answer: '1',\n * timeSpent: 3500\n * },\n * // ... 更多答题记录\n * ],\n * duration: 480000\n * });\n * \n * console.log('得分描述:', result.scoreDescription);\n * console.log('计算结果:', result.calculationResults);\n * ```\n */\n public async submit(params: SubmitPsychologyTestParams): Promise<SubmitPsychologyTestResponse> {\n this.client.logger.info('Submitting psychology test', {\n sessionId: params.sessionId,\n answersCount: params.answers.length,\n });\n\n // 参数校验\n if (!params.sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.answers || params.answers.length === 0) {\n throw new PlolinkError(\n 'answers is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<SubmitPsychologyTestResponse>(\n '/api/v1/psychology/test-sessions/submit',\n params\n );\n\n this.client.logger.info('Psychology test submitted successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to submit psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测详情\n * \n * @description\n * 获取心理评测会话的完整信息,包括基本信息、计算结果、得分描述、AI分析结果等。\n * \n * @param sessionId - 评测会话ID\n * @returns 评测会话详情\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const detail = await client.psychologyTest.getDetail('clxxxx789012');\n * \n * console.log('评测状态:', detail.status);\n * console.log('得分描述:', detail.scoreDescription);\n * \n * // 检查分析状态\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * } else if (detail.analysisStatus === 'ANALYZING') {\n * console.log('AI分析进行中,请稍后查询');\n * } else if (detail.analysisStatus === 'FAILED') {\n * console.error('分析失败:', detail.analysisError);\n * }\n * ```\n */\n public async getDetail(sessionId: string): Promise<PsychologyTestDetail> {\n this.client.logger.info('Getting psychology test detail', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestDetail>(\n `/api/v1/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test detail retrieved successfully', {\n sessionId,\n status: response.status,\n analysisStatus: response.analysisStatus,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test detail', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测答题记录\n * \n * @description\n * 获取心理评测会话的所有答题记录。\n * \n * @param sessionId - 评测会话ID\n * @returns 答题记录列表\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const answers = await client.psychologyTest.getAnswers('clxxxx789012');\n * \n * console.log(`共 ${answers.length} 条答题记录`);\n * answers.forEach(answer => {\n * console.log(`题目 ${answer.questionCode}: ${answer.answer}`);\n * });\n * ```\n */\n public async getAnswers(sessionId: string): Promise<PsychologyTestAnswerDetail[]> {\n this.client.logger.info('Getting psychology test answers', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestAnswerDetail[]>(\n `/api/v1/psychology/test-sessions/${sessionId}/answers`\n );\n\n this.client.logger.info('Psychology test answers retrieved successfully', {\n sessionId,\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test answers', { error });\n throw error;\n }\n }\n\n /**\n * 列表查询心理评测会话\n * \n * @description\n * 查询心理评测会话列表,支持分页和多条件筛选。\n * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。\n * \n * @param params - 查询参数\n * @returns 会话列表和分页信息\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * // 查询所有评测会话\n * const result = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20\n * });\n * \n * console.log(`共 ${result.total} 条记录`);\n * result.list.forEach(session => {\n * console.log(`会话ID: ${session.id}, 状态: ${session.status}`);\n * });\n * \n * // 按条件筛选\n * const filtered = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20,\n * businessModule: 'talent_assessment',\n * status: 'COMPLETED',\n * analysisStatus: 'COMPLETED'\n * });\n * ```\n */\n public async listTestSessions(\n params: ListPsychologyTestSessionsParams = {}\n ): Promise<ListPsychologyTestSessionsResponse> {\n this.client.logger.info('Listing psychology test sessions', { params });\n\n try {\n // 构建查询参数\n const queryParams = new URLSearchParams();\n if (params.page !== undefined) queryParams.append('page', String(params.page));\n if (params.size !== undefined) queryParams.append('size', String(params.size));\n if (params.businessModule) queryParams.append('businessModule', params.businessModule);\n if (params.businessCode) queryParams.append('businessCode', params.businessCode);\n if (params.status) queryParams.append('status', params.status);\n if (params.analysisStatus) queryParams.append('analysisStatus', params.analysisStatus);\n if (params.startDate) queryParams.append('startDate', params.startDate);\n if (params.endDate) queryParams.append('endDate', params.endDate);\n\n const url = `/api/v1/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\n const response = await this.client.axiosInstance.get<ListPsychologyTestSessionsResponse>(url);\n\n this.client.logger.info('Psychology test sessions listed successfully', {\n total: response.total,\n count: response.list.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology test sessions', { error });\n throw error;\n }\n }\n\n /**\n * 删除心理评测会话\n * \n * @description\n * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,\n * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。\n * \n * @param sessionId - 评测会话ID\n * @returns void\n * @throws {PlolinkError} 当会话不存在或删除失败时抛出\n * \n * @example\n * ```typescript\n * // 删除评测会话\n * await client.psychologyTest.deleteTestSession('clxxxx789012');\n * console.log('评测会话已删除');\n * ```\n */\n public async deleteTestSession(sessionId: string): Promise<void> {\n this.client.logger.info('Deleting psychology test session', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n await this.client.axiosInstance.delete(\n `/api/v1/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test session deleted successfully', {\n sessionId,\n });\n } catch (error) {\n this.client.logger.error('Failed to delete psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取题库组列表\n * \n * @description\n * 获取所有启用状态的题库组列表,返回基本信息用于选择。\n * 此接口不需要管理员权限,普通用户即可调用。\n * \n * @returns 题库组列表\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * const groups = await client.psychologyTest.listBankGroups();\n * groups.forEach(g => {\n * console.log(`${g.name} (${g.code}): ${g.testObjective}`);\n * });\n * ```\n */\n public async listBankGroups(): Promise<PsychologyBankGroupSummary[]> {\n this.client.logger.info('Listing psychology bank groups');\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyBankGroupSummary[]>(\n '/api/v1/psychology/bank-groups'\n );\n\n this.client.logger.info('Psychology bank groups listed successfully', {\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology bank groups', { error });\n throw error;\n }\n }\n}\n"]}
@@ -365,8 +365,6 @@ interface ListPsychologyTestSessionsParams {
365
365
  startDate?: string;
366
366
  /** 结束日期(ISO字符串) */
367
367
  endDate?: string;
368
- /** 团队ID */
369
- teamId?: string;
370
368
  }
371
369
  /**
372
370
  * 列表查询心理评测会话响应
@@ -611,7 +609,7 @@ declare class PsychologyTest {
611
609
  *
612
610
  * @description
613
611
  * 查询心理评测会话列表,支持分页和多条件筛选。
614
- * 此接口通常用于管理后台或业务系统查询评测记录。
612
+ * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。
615
613
  *
616
614
  * @param params - 查询参数
617
615
  * @returns 会话列表和分页信息
@@ -646,7 +644,7 @@ declare class PsychologyTest {
646
644
  *
647
645
  * @description
648
646
  * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,
649
- * 但在正常查询中不会显示。此接口通常用于管理后台。
647
+ * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。
650
648
  *
651
649
  * @param sessionId - 评测会话ID
652
650
  * @returns void
@@ -365,8 +365,6 @@ interface ListPsychologyTestSessionsParams {
365
365
  startDate?: string;
366
366
  /** 结束日期(ISO字符串) */
367
367
  endDate?: string;
368
- /** 团队ID */
369
- teamId?: string;
370
368
  }
371
369
  /**
372
370
  * 列表查询心理评测会话响应
@@ -611,7 +609,7 @@ declare class PsychologyTest {
611
609
  *
612
610
  * @description
613
611
  * 查询心理评测会话列表,支持分页和多条件筛选。
614
- * 此接口通常用于管理后台或业务系统查询评测记录。
612
+ * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。
615
613
  *
616
614
  * @param params - 查询参数
617
615
  * @returns 会话列表和分页信息
@@ -646,7 +644,7 @@ declare class PsychologyTest {
646
644
  *
647
645
  * @description
648
646
  * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,
649
- * 但在正常查询中不会显示。此接口通常用于管理后台。
647
+ * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。
650
648
  *
651
649
  * @param sessionId - 评测会话ID
652
650
  * @returns void
@@ -341,7 +341,7 @@ var PsychologyTest = class {
341
341
  *
342
342
  * @description
343
343
  * 查询心理评测会话列表,支持分页和多条件筛选。
344
- * 此接口通常用于管理后台或业务系统查询评测记录。
344
+ * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。
345
345
  *
346
346
  * @param params - 查询参数
347
347
  * @returns 会话列表和分页信息
@@ -382,8 +382,7 @@ var PsychologyTest = class {
382
382
  if (params.analysisStatus) queryParams.append("analysisStatus", params.analysisStatus);
383
383
  if (params.startDate) queryParams.append("startDate", params.startDate);
384
384
  if (params.endDate) queryParams.append("endDate", params.endDate);
385
- if (params.teamId) queryParams.append("teamId", params.teamId);
386
- const url = `/api/admin/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ""}`;
385
+ const url = `/api/v1/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ""}`;
387
386
  const response = await this.client.axiosInstance.get(url);
388
387
  this.client.logger.info("Psychology test sessions listed successfully", {
389
388
  total: response.total,
@@ -400,7 +399,7 @@ var PsychologyTest = class {
400
399
  *
401
400
  * @description
402
401
  * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,
403
- * 但在正常查询中不会显示。此接口通常用于管理后台。
402
+ * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。
404
403
  *
405
404
  * @param sessionId - 评测会话ID
406
405
  * @returns void
@@ -423,7 +422,7 @@ var PsychologyTest = class {
423
422
  }
424
423
  try {
425
424
  await this.client.axiosInstance.delete(
426
- `/api/admin/psychology/test-sessions/${sessionId}`
425
+ `/api/v1/psychology/test-sessions/${sessionId}`
427
426
  );
428
427
  this.client.logger.info("Psychology test session deleted successfully", {
429
428
  sessionId
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/modules/psychology-test/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 心理评测模块\n * \n * @description\n * 提供心理评测相关功能,包括:\n * - 发起心理评测会话\n * - 提交心理评测答题\n * - 获取评测详情和结果\n * - 获取答题记录\n * \n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * \n * const client = new PlolinkClient({\n * token: 'sk-your-api-key'\n * });\n * \n * // 发起心理评测\n * const initResult = await client.psychologyTest.initiate({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * console.log(`评测会话已创建: ${initResult.sessionId}`);\n * console.log(`共 ${initResult.totalCount} 道题目`);\n * \n * // 用户答题...\n * const answers = initResult.questions.map(q => ({\n * groupCode: q.groupCode,\n * bankId: q.bankId,\n * questionId: q.questionId,\n * questionCode: q.questionCode,\n * answer: getUserAnswer(q), // 获取用户答案\n * timeSpent: getTimeSpent(q) // 获取答题时间\n * }));\n * \n * // 提交心理评测\n * const submitResult = await client.psychologyTest.submit({\n * sessionId: initResult.sessionId,\n * answers,\n * duration: 480000\n * });\n * console.log('得分描述:', submitResult.scoreDescription);\n * \n * // 查询评测详情\n * const detail = await client.psychologyTest.getDetail(initResult.sessionId);\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * }\n * ```\n * \n * @module psychology-test\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type {\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n SubmitPsychologyTestParams,\n SubmitPsychologyTestResponse,\n PsychologyTestDetail,\n PsychologyTestAnswerDetail,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\nexport type {\n PsychologyTestStatus,\n PsychologyAnalysisStatus,\n QuestionType,\n QuestionDependency,\n QuestionOption,\n QuestionMetadata,\n QuestionInfo,\n GroupSummary,\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n AnswerRecord,\n SubmitPsychologyTestParams,\n TestCalculationResult,\n SubmitPsychologyTestResponse,\n PsychologyTestAnswerDetail,\n PsychologyTestDetail,\n PsychologyTestWebhookData,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\n/**\n * 心理评测模块\n */\nexport class PsychologyTest {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 创建心理评测会话\n * \n * @description\n * 创建心理评测会话记录(不返回题目)。\n * 创建后需要调用 getSessionQuestions() 获取题目列表。\n * \n * @param params - 创建会话参数\n * @returns 会话信息,包含会话ID\n * @throws {PlolinkError} 当参数验证失败或创建失败时抛出\n * \n * @example\n * ```typescript\n * // 1. 创建会话\n * const { sessionId } = await client.psychologyTest.createTestSession({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * \n * console.log(`评测会话已创建: ${sessionId}`);\n * \n * // 2. 获取题目\n * const questions = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n */\n public async createTestSession(params: CreatePsychologyTestSessionParams): Promise<CreatePsychologyTestSessionResponse> {\n this.client.logger.info('Creating psychology test session', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<CreatePsychologyTestSessionResponse>(\n '/api/v1/psychology/test-sessions',\n params\n );\n\n this.client.logger.info('Psychology test session created successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to create psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取会话题目\n * \n * @description\n * 获取心理评测会话的题目列表(动态生成,每次调用都会重新打乱题目顺序)。\n * \n * @param sessionId - 评测会话ID\n * @returns 题目列表和题组摘要\n * @throws {PlolinkError} 当会话不存在或获取失败时抛出\n * \n * @example\n * ```typescript\n * const questions = await client.psychologyTest.getSessionQuestions('clxxxx789012');\n * \n * console.log(`共 ${questions.totalCount} 道题目`);\n * console.log('题组摘要:', questions.groupSummary);\n * \n * // 展示题目\n * questions.questions.forEach((q, index) => {\n * console.log(`题目 ${index + 1}: ${q.content}`);\n * });\n * ```\n */\n public async getSessionQuestions(sessionId: string): Promise<GetSessionQuestionsResponse> {\n this.client.logger.info('Getting session questions', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError('sessionId is required', 'VALIDATION_ERROR');\n }\n\n try {\n const response = await this.client.axiosInstance.get<GetSessionQuestionsResponse>(\n `/api/v1/psychology/test-sessions/${sessionId}/questions`\n );\n\n this.client.logger.info('Session questions retrieved successfully', {\n sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get session questions', { error, sessionId });\n throw error;\n }\n }\n\n /**\n * 发起心理评测(已废弃)\n * \n * @deprecated 此方法已废弃,将在 v2.0 中移除。请使用 createTestSession() + getSessionQuestions() 替代。\n * \n * @description\n * 根据题组代码列表发起心理评测会话,系统会自动生成打乱后的题目列表并返回。\n * \n * **迁移建议**:\n * ```typescript\n * // 旧方式(已废弃)\n * const result = await client.psychologyTest.initiate(params);\n * \n * // 新方式(推荐)\n * const { sessionId } = await client.psychologyTest.createTestSession(params);\n * const result = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n * \n * @param params - 发起评测参数\n * @returns 评测会话信息,包含会话ID和题目列表\n * @throws {PlolinkError} 当参数验证失败或发起失败时抛出\n */\n public async initiate(params: InitiatePsychologyTestParams): Promise<InitiatePsychologyTestResponse> {\n this.client.logger.warn('Using deprecated initiate() method. Please use createTestSession() + getSessionQuestions() instead.');\n \n this.client.logger.info('Initiating psychology test (deprecated)', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n // 内部调用新方法实现兼容\n const { sessionId } = await this.createTestSession(params);\n const questionsData = await this.getSessionQuestions(sessionId);\n\n const response: InitiatePsychologyTestResponse = {\n sessionId,\n ...questionsData,\n };\n\n this.client.logger.info('Psychology test initiated successfully (deprecated)', {\n sessionId: response.sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to initiate psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 提交心理评测\n * \n * @description\n * 提交心理评测答题数据,系统会自动计算得分并生成 Markdown 描述。\n * 如需 AI 分析则会加入异步队列,分析完成后会通过 Webhook 通知。\n * \n * @param params - 提交评测参数\n * @returns 提交结果,包含计算结果和得分描述\n * @throws {PlolinkError} 当参数验证失败或提交失败时抛出\n * \n * @example\n * ```typescript\n * const result = await client.psychologyTest.submit({\n * sessionId: 'clxxxx789012',\n * answers: [\n * {\n * groupCode: 'family_parenting',\n * bankId: 'bank_123',\n * questionId: 'q_001',\n * questionCode: 'FP001A',\n * answer: '1',\n * timeSpent: 3500\n * },\n * // ... 更多答题记录\n * ],\n * duration: 480000\n * });\n * \n * console.log('得分描述:', result.scoreDescription);\n * console.log('计算结果:', result.calculationResults);\n * ```\n */\n public async submit(params: SubmitPsychologyTestParams): Promise<SubmitPsychologyTestResponse> {\n this.client.logger.info('Submitting psychology test', {\n sessionId: params.sessionId,\n answersCount: params.answers.length,\n });\n\n // 参数校验\n if (!params.sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.answers || params.answers.length === 0) {\n throw new PlolinkError(\n 'answers is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<SubmitPsychologyTestResponse>(\n '/api/v1/psychology/test-sessions/submit',\n params\n );\n\n this.client.logger.info('Psychology test submitted successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to submit psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测详情\n * \n * @description\n * 获取心理评测会话的完整信息,包括基本信息、计算结果、得分描述、AI分析结果等。\n * \n * @param sessionId - 评测会话ID\n * @returns 评测会话详情\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const detail = await client.psychologyTest.getDetail('clxxxx789012');\n * \n * console.log('评测状态:', detail.status);\n * console.log('得分描述:', detail.scoreDescription);\n * \n * // 检查分析状态\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * } else if (detail.analysisStatus === 'ANALYZING') {\n * console.log('AI分析进行中,请稍后查询');\n * } else if (detail.analysisStatus === 'FAILED') {\n * console.error('分析失败:', detail.analysisError);\n * }\n * ```\n */\n public async getDetail(sessionId: string): Promise<PsychologyTestDetail> {\n this.client.logger.info('Getting psychology test detail', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestDetail>(\n `/api/v1/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test detail retrieved successfully', {\n sessionId,\n status: response.status,\n analysisStatus: response.analysisStatus,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test detail', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测答题记录\n * \n * @description\n * 获取心理评测会话的所有答题记录。\n * \n * @param sessionId - 评测会话ID\n * @returns 答题记录列表\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const answers = await client.psychologyTest.getAnswers('clxxxx789012');\n * \n * console.log(`共 ${answers.length} 条答题记录`);\n * answers.forEach(answer => {\n * console.log(`题目 ${answer.questionCode}: ${answer.answer}`);\n * });\n * ```\n */\n public async getAnswers(sessionId: string): Promise<PsychologyTestAnswerDetail[]> {\n this.client.logger.info('Getting psychology test answers', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestAnswerDetail[]>(\n `/api/v1/psychology/test-sessions/${sessionId}/answers`\n );\n\n this.client.logger.info('Psychology test answers retrieved successfully', {\n sessionId,\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test answers', { error });\n throw error;\n }\n }\n\n /**\n * 列表查询心理评测会话\n * \n * @description\n * 查询心理评测会话列表,支持分页和多条件筛选。\n * 此接口通常用于管理后台或业务系统查询评测记录。\n * \n * @param params - 查询参数\n * @returns 会话列表和分页信息\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * // 查询所有评测会话\n * const result = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20\n * });\n * \n * console.log(`共 ${result.total} 条记录`);\n * result.list.forEach(session => {\n * console.log(`会话ID: ${session.id}, 状态: ${session.status}`);\n * });\n * \n * // 按条件筛选\n * const filtered = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20,\n * businessModule: 'talent_assessment',\n * status: 'COMPLETED',\n * analysisStatus: 'COMPLETED'\n * });\n * ```\n */\n public async listTestSessions(\n params: ListPsychologyTestSessionsParams = {}\n ): Promise<ListPsychologyTestSessionsResponse> {\n this.client.logger.info('Listing psychology test sessions', { params });\n\n try {\n // 构建查询参数\n const queryParams = new URLSearchParams();\n if (params.page !== undefined) queryParams.append('page', String(params.page));\n if (params.size !== undefined) queryParams.append('size', String(params.size));\n if (params.businessModule) queryParams.append('businessModule', params.businessModule);\n if (params.businessCode) queryParams.append('businessCode', params.businessCode);\n if (params.status) queryParams.append('status', params.status);\n if (params.analysisStatus) queryParams.append('analysisStatus', params.analysisStatus);\n if (params.startDate) queryParams.append('startDate', params.startDate);\n if (params.endDate) queryParams.append('endDate', params.endDate);\n if (params.teamId) queryParams.append('teamId', params.teamId);\n\n const url = `/api/admin/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\n const response = await this.client.axiosInstance.get<ListPsychologyTestSessionsResponse>(url);\n\n this.client.logger.info('Psychology test sessions listed successfully', {\n total: response.total,\n count: response.list.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology test sessions', { error });\n throw error;\n }\n }\n\n /**\n * 删除心理评测会话\n * \n * @description\n * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,\n * 但在正常查询中不会显示。此接口通常用于管理后台。\n * \n * @param sessionId - 评测会话ID\n * @returns void\n * @throws {PlolinkError} 当会话不存在或删除失败时抛出\n * \n * @example\n * ```typescript\n * // 删除评测会话\n * await client.psychologyTest.deleteTestSession('clxxxx789012');\n * console.log('评测会话已删除');\n * ```\n */\n public async deleteTestSession(sessionId: string): Promise<void> {\n this.client.logger.info('Deleting psychology test session', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n await this.client.axiosInstance.delete(\n `/api/admin/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test session deleted successfully', {\n sessionId,\n });\n } catch (error) {\n this.client.logger.error('Failed to delete psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取题库组列表\n * \n * @description\n * 获取所有启用状态的题库组列表,返回基本信息用于选择。\n * 此接口不需要管理员权限,普通用户即可调用。\n * \n * @returns 题库组列表\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * const groups = await client.psychologyTest.listBankGroups();\n * groups.forEach(g => {\n * console.log(`${g.name} (${g.code}): ${g.testObjective}`);\n * });\n * ```\n */\n public async listBankGroups(): Promise<PsychologyBankGroupSummary[]> {\n this.client.logger.info('Listing psychology bank groups');\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyBankGroupSummary[]>(\n '/api/v1/psychology/bank-groups'\n );\n\n this.client.logger.info('Psychology bank groups listed successfully', {\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology bank groups', { error });\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/modules/psychology-test/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 心理评测模块\n * \n * @description\n * 提供心理评测相关功能,包括:\n * - 发起心理评测会话\n * - 提交心理评测答题\n * - 获取评测详情和结果\n * - 获取答题记录\n * \n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * \n * const client = new PlolinkClient({\n * token: 'sk-your-api-key'\n * });\n * \n * // 发起心理评测\n * const initResult = await client.psychologyTest.initiate({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * console.log(`评测会话已创建: ${initResult.sessionId}`);\n * console.log(`共 ${initResult.totalCount} 道题目`);\n * \n * // 用户答题...\n * const answers = initResult.questions.map(q => ({\n * groupCode: q.groupCode,\n * bankId: q.bankId,\n * questionId: q.questionId,\n * questionCode: q.questionCode,\n * answer: getUserAnswer(q), // 获取用户答案\n * timeSpent: getTimeSpent(q) // 获取答题时间\n * }));\n * \n * // 提交心理评测\n * const submitResult = await client.psychologyTest.submit({\n * sessionId: initResult.sessionId,\n * answers,\n * duration: 480000\n * });\n * console.log('得分描述:', submitResult.scoreDescription);\n * \n * // 查询评测详情\n * const detail = await client.psychologyTest.getDetail(initResult.sessionId);\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * }\n * ```\n * \n * @module psychology-test\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type {\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n SubmitPsychologyTestParams,\n SubmitPsychologyTestResponse,\n PsychologyTestDetail,\n PsychologyTestAnswerDetail,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\nexport type {\n PsychologyTestStatus,\n PsychologyAnalysisStatus,\n QuestionType,\n QuestionDependency,\n QuestionOption,\n QuestionMetadata,\n QuestionInfo,\n GroupSummary,\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n AnswerRecord,\n SubmitPsychologyTestParams,\n TestCalculationResult,\n SubmitPsychologyTestResponse,\n PsychologyTestAnswerDetail,\n PsychologyTestDetail,\n PsychologyTestWebhookData,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\n/**\n * 心理评测模块\n */\nexport class PsychologyTest {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 创建心理评测会话\n * \n * @description\n * 创建心理评测会话记录(不返回题目)。\n * 创建后需要调用 getSessionQuestions() 获取题目列表。\n * \n * @param params - 创建会话参数\n * @returns 会话信息,包含会话ID\n * @throws {PlolinkError} 当参数验证失败或创建失败时抛出\n * \n * @example\n * ```typescript\n * // 1. 创建会话\n * const { sessionId } = await client.psychologyTest.createTestSession({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * \n * console.log(`评测会话已创建: ${sessionId}`);\n * \n * // 2. 获取题目\n * const questions = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n */\n public async createTestSession(params: CreatePsychologyTestSessionParams): Promise<CreatePsychologyTestSessionResponse> {\n this.client.logger.info('Creating psychology test session', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<CreatePsychologyTestSessionResponse>(\n '/api/v1/psychology/test-sessions',\n params\n );\n\n this.client.logger.info('Psychology test session created successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to create psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取会话题目\n * \n * @description\n * 获取心理评测会话的题目列表(动态生成,每次调用都会重新打乱题目顺序)。\n * \n * @param sessionId - 评测会话ID\n * @returns 题目列表和题组摘要\n * @throws {PlolinkError} 当会话不存在或获取失败时抛出\n * \n * @example\n * ```typescript\n * const questions = await client.psychologyTest.getSessionQuestions('clxxxx789012');\n * \n * console.log(`共 ${questions.totalCount} 道题目`);\n * console.log('题组摘要:', questions.groupSummary);\n * \n * // 展示题目\n * questions.questions.forEach((q, index) => {\n * console.log(`题目 ${index + 1}: ${q.content}`);\n * });\n * ```\n */\n public async getSessionQuestions(sessionId: string): Promise<GetSessionQuestionsResponse> {\n this.client.logger.info('Getting session questions', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError('sessionId is required', 'VALIDATION_ERROR');\n }\n\n try {\n const response = await this.client.axiosInstance.get<GetSessionQuestionsResponse>(\n `/api/v1/psychology/test-sessions/${sessionId}/questions`\n );\n\n this.client.logger.info('Session questions retrieved successfully', {\n sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get session questions', { error, sessionId });\n throw error;\n }\n }\n\n /**\n * 发起心理评测(已废弃)\n * \n * @deprecated 此方法已废弃,将在 v2.0 中移除。请使用 createTestSession() + getSessionQuestions() 替代。\n * \n * @description\n * 根据题组代码列表发起心理评测会话,系统会自动生成打乱后的题目列表并返回。\n * \n * **迁移建议**:\n * ```typescript\n * // 旧方式(已废弃)\n * const result = await client.psychologyTest.initiate(params);\n * \n * // 新方式(推荐)\n * const { sessionId } = await client.psychologyTest.createTestSession(params);\n * const result = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n * \n * @param params - 发起评测参数\n * @returns 评测会话信息,包含会话ID和题目列表\n * @throws {PlolinkError} 当参数验证失败或发起失败时抛出\n */\n public async initiate(params: InitiatePsychologyTestParams): Promise<InitiatePsychologyTestResponse> {\n this.client.logger.warn('Using deprecated initiate() method. Please use createTestSession() + getSessionQuestions() instead.');\n \n this.client.logger.info('Initiating psychology test (deprecated)', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n // 内部调用新方法实现兼容\n const { sessionId } = await this.createTestSession(params);\n const questionsData = await this.getSessionQuestions(sessionId);\n\n const response: InitiatePsychologyTestResponse = {\n sessionId,\n ...questionsData,\n };\n\n this.client.logger.info('Psychology test initiated successfully (deprecated)', {\n sessionId: response.sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to initiate psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 提交心理评测\n * \n * @description\n * 提交心理评测答题数据,系统会自动计算得分并生成 Markdown 描述。\n * 如需 AI 分析则会加入异步队列,分析完成后会通过 Webhook 通知。\n * \n * @param params - 提交评测参数\n * @returns 提交结果,包含计算结果和得分描述\n * @throws {PlolinkError} 当参数验证失败或提交失败时抛出\n * \n * @example\n * ```typescript\n * const result = await client.psychologyTest.submit({\n * sessionId: 'clxxxx789012',\n * answers: [\n * {\n * groupCode: 'family_parenting',\n * bankId: 'bank_123',\n * questionId: 'q_001',\n * questionCode: 'FP001A',\n * answer: '1',\n * timeSpent: 3500\n * },\n * // ... 更多答题记录\n * ],\n * duration: 480000\n * });\n * \n * console.log('得分描述:', result.scoreDescription);\n * console.log('计算结果:', result.calculationResults);\n * ```\n */\n public async submit(params: SubmitPsychologyTestParams): Promise<SubmitPsychologyTestResponse> {\n this.client.logger.info('Submitting psychology test', {\n sessionId: params.sessionId,\n answersCount: params.answers.length,\n });\n\n // 参数校验\n if (!params.sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.answers || params.answers.length === 0) {\n throw new PlolinkError(\n 'answers is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<SubmitPsychologyTestResponse>(\n '/api/v1/psychology/test-sessions/submit',\n params\n );\n\n this.client.logger.info('Psychology test submitted successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to submit psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测详情\n * \n * @description\n * 获取心理评测会话的完整信息,包括基本信息、计算结果、得分描述、AI分析结果等。\n * \n * @param sessionId - 评测会话ID\n * @returns 评测会话详情\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const detail = await client.psychologyTest.getDetail('clxxxx789012');\n * \n * console.log('评测状态:', detail.status);\n * console.log('得分描述:', detail.scoreDescription);\n * \n * // 检查分析状态\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * } else if (detail.analysisStatus === 'ANALYZING') {\n * console.log('AI分析进行中,请稍后查询');\n * } else if (detail.analysisStatus === 'FAILED') {\n * console.error('分析失败:', detail.analysisError);\n * }\n * ```\n */\n public async getDetail(sessionId: string): Promise<PsychologyTestDetail> {\n this.client.logger.info('Getting psychology test detail', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestDetail>(\n `/api/v1/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test detail retrieved successfully', {\n sessionId,\n status: response.status,\n analysisStatus: response.analysisStatus,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test detail', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测答题记录\n * \n * @description\n * 获取心理评测会话的所有答题记录。\n * \n * @param sessionId - 评测会话ID\n * @returns 答题记录列表\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const answers = await client.psychologyTest.getAnswers('clxxxx789012');\n * \n * console.log(`共 ${answers.length} 条答题记录`);\n * answers.forEach(answer => {\n * console.log(`题目 ${answer.questionCode}: ${answer.answer}`);\n * });\n * ```\n */\n public async getAnswers(sessionId: string): Promise<PsychologyTestAnswerDetail[]> {\n this.client.logger.info('Getting psychology test answers', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestAnswerDetail[]>(\n `/api/v1/psychology/test-sessions/${sessionId}/answers`\n );\n\n this.client.logger.info('Psychology test answers retrieved successfully', {\n sessionId,\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test answers', { error });\n throw error;\n }\n }\n\n /**\n * 列表查询心理评测会话\n * \n * @description\n * 查询心理评测会话列表,支持分页和多条件筛选。\n * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。\n * \n * @param params - 查询参数\n * @returns 会话列表和分页信息\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * // 查询所有评测会话\n * const result = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20\n * });\n * \n * console.log(`共 ${result.total} 条记录`);\n * result.list.forEach(session => {\n * console.log(`会话ID: ${session.id}, 状态: ${session.status}`);\n * });\n * \n * // 按条件筛选\n * const filtered = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20,\n * businessModule: 'talent_assessment',\n * status: 'COMPLETED',\n * analysisStatus: 'COMPLETED'\n * });\n * ```\n */\n public async listTestSessions(\n params: ListPsychologyTestSessionsParams = {}\n ): Promise<ListPsychologyTestSessionsResponse> {\n this.client.logger.info('Listing psychology test sessions', { params });\n\n try {\n // 构建查询参数\n const queryParams = new URLSearchParams();\n if (params.page !== undefined) queryParams.append('page', String(params.page));\n if (params.size !== undefined) queryParams.append('size', String(params.size));\n if (params.businessModule) queryParams.append('businessModule', params.businessModule);\n if (params.businessCode) queryParams.append('businessCode', params.businessCode);\n if (params.status) queryParams.append('status', params.status);\n if (params.analysisStatus) queryParams.append('analysisStatus', params.analysisStatus);\n if (params.startDate) queryParams.append('startDate', params.startDate);\n if (params.endDate) queryParams.append('endDate', params.endDate);\n\n const url = `/api/v1/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\n const response = await this.client.axiosInstance.get<ListPsychologyTestSessionsResponse>(url);\n\n this.client.logger.info('Psychology test sessions listed successfully', {\n total: response.total,\n count: response.list.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology test sessions', { error });\n throw error;\n }\n }\n\n /**\n * 删除心理评测会话\n * \n * @description\n * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,\n * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。\n * \n * @param sessionId - 评测会话ID\n * @returns void\n * @throws {PlolinkError} 当会话不存在或删除失败时抛出\n * \n * @example\n * ```typescript\n * // 删除评测会话\n * await client.psychologyTest.deleteTestSession('clxxxx789012');\n * console.log('评测会话已删除');\n * ```\n */\n public async deleteTestSession(sessionId: string): Promise<void> {\n this.client.logger.info('Deleting psychology test session', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n await this.client.axiosInstance.delete(\n `/api/v1/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test session deleted successfully', {\n sessionId,\n });\n } catch (error) {\n this.client.logger.error('Failed to delete psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取题库组列表\n * \n * @description\n * 获取所有启用状态的题库组列表,返回基本信息用于选择。\n * 此接口不需要管理员权限,普通用户即可调用。\n * \n * @returns 题库组列表\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * const groups = await client.psychologyTest.listBankGroups();\n * groups.forEach(g => {\n * console.log(`${g.name} (${g.code}): ${g.testObjective}`);\n * });\n * ```\n */\n public async listBankGroups(): Promise<PsychologyBankGroupSummary[]> {\n this.client.logger.info('Listing psychology bank groups');\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyBankGroupSummary[]>(\n '/api/v1/psychology/bank-groups'\n );\n\n this.client.logger.info('Psychology bank groups listed successfully', {\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology bank groups', { error });\n throw error;\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plolink/sdk",
3
- "version": "0.0.9",
3
+ "version": "0.0.10",
4
4
  "description": "Plolink 开放平台官方 SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -94,6 +94,7 @@
94
94
  "ts-jest": "^29.1.2",
95
95
  "tslib": "^2.8.1",
96
96
  "tsup": "^8.0.2",
97
+ "tsx": "^4.21.0",
97
98
  "typedoc": "^0.25.8",
98
99
  "typedoc-plugin-markdown": "^3.17.1",
99
100
  "typescript": "^5.3.3"