import axios, { AxiosResponse } from 'axios'; import { MissionDetailRequestData, MissionDetailResponseData, ActivityDataResponseData } from '../types/mission'; import { MissionProcessor } from '../processors/mission-processor'; import { ProcessedActivityResult } from '../classes/ProcessedActivityResult'; /** * 任务API配置 */ export interface MissionApiConfig { /** 基础URL,默认为 LOFTER 官方接口 */ baseURL?: string; /** 默认请求头 */ headers?: Record; /** 活动代码 */ activityCode?: string; } /** * 任务API服务类 */ export class MissionApiService { private readonly activityCode?: string; constructor(activityCodeOrConfig?: string | MissionApiConfig) { if (typeof activityCodeOrConfig === 'string') { this.activityCode = activityCodeOrConfig; } else if (activityCodeOrConfig?.activityCode) { this.activityCode = activityCodeOrConfig.activityCode; } } /** * 获取活动概览数据(预处理版本) */ async getProcessedActivityData(activityCode?: string): Promise { const code = activityCode || this.activityCode; if (!code) { throw new Error('Activity code is required. Please provide it in constructor or method parameter.'); } const rawData = await this.getActivityData(code); return MissionProcessor.processActivityData(rawData); } /** * 获取活动概览数据(原始版本) * 使用 GET 请求和查询参数调用真实的 LOFTER 接口 */ async getActivityData(activityCode?: string): Promise { const code = activityCode || this.activityCode; if (!code) { throw new Error('Activity code is required. Please provide it in constructor or method parameter.'); } const url = `/spread/mission/overview.json`; return axios.get(url, { params: { activityCode: code }, }).then((res: AxiosResponse) => { return res.data; }); } /** * 获取任务防刷token */ async getMissionToken(missionCode: string): Promise { const params: MissionDetailRequestData = { missionCode }; const url = `/spread/mission/detail.json`; return axios.post(url, params, { }).then((res: AxiosResponse) => { return res.data; }); } /** * 便捷方法:获取活动概览 */ async getActivityOverview(activityCode?: string) { const processedData = await this.getProcessedActivityData(activityCode); return processedData.getActivityOverview(); } /** * 便捷方法:获取可用奖品 */ async getAvailablePrizes(activityCode?: string) { const processedData = await this.getProcessedActivityData(activityCode); return processedData.awardActivity.getAvailablePrizes(); } /** * 便捷方法:获取用户信息 */ async getUserInfo(activityCode?: string) { const processedData = await this.getProcessedActivityData(activityCode); return processedData.userInfo; } }