feat(challenges): 添加挑战源和分享代码字段,更新挑战详情和列表接口

This commit is contained in:
richarjiang
2025-11-26 17:26:27 +08:00
parent 029b8f46b9
commit 26e88ae610
4 changed files with 11 additions and 4 deletions

View File

@@ -178,6 +178,8 @@ export class ChallengesService {
isJoined: Boolean(participation), isJoined: Boolean(participation),
type: challenge.type, type: challenge.type,
badge: challenge.type === ChallengeType.SLEEP ? sleepBadge : undefined, badge: challenge.type === ChallengeType.SLEEP ? sleepBadge : undefined,
source: challenge.source,
shareCode: challenge.shareCode,
}; };
}); });
} }
@@ -284,6 +286,9 @@ export class ChallengesService {
unit: challenge.progressUnit, unit: challenge.progressUnit,
type: challenge.type, type: challenge.type,
badge, badge,
creatorId: challenge.creatorId,
shareCode: challenge.shareCode,
source: challenge.source,
}; };
} }

View File

@@ -1,5 +1,5 @@
import { ChallengeProgressDto, RankingItemDto } from './challenge-progress.dto'; import { ChallengeProgressDto, RankingItemDto } from './challenge-progress.dto';
import { ChallengeType } from '../models/challenge.model'; import { ChallengeSource, ChallengeType } from '../models/challenge.model';
export interface BadgeInfoDto { export interface BadgeInfoDto {
code: string; code: string;
@@ -29,4 +29,7 @@ export interface ChallengeDetailDto {
type: ChallengeType; type: ChallengeType;
unit: string; unit: string;
badge?: BadgeInfoDto; badge?: BadgeInfoDto;
creatorId: string | null;
shareCode?: string | null;
source: ChallengeSource;
} }

View File

@@ -1,4 +1,4 @@
import { ChallengeStatus, ChallengeType } from '../models/challenge.model'; import { ChallengeSource, ChallengeStatus, ChallengeType } from '../models/challenge.model';
import { ChallengeProgressDto } from './challenge-progress.dto'; import { ChallengeProgressDto } from './challenge-progress.dto';
export interface BadgeInfoDto { export interface BadgeInfoDto {
@@ -30,6 +30,7 @@ export interface ChallengeListItemDto {
type: ChallengeType; type: ChallengeType;
unit: string; unit: string;
badge?: BadgeInfoDto; badge?: BadgeInfoDto;
source: ChallengeSource;
} }
export interface ChallengeListResponseDto { export interface ChallengeListResponseDto {

View File

@@ -22,12 +22,10 @@ export class CreateCustomChallengeDto {
@ApiProperty({ description: '开始时间戳(毫秒)', example: 1704067200000 }) @ApiProperty({ description: '开始时间戳(毫秒)', example: 1704067200000 })
@IsNumber() @IsNumber()
@Min(Date.now())
startAt: number; startAt: number;
@ApiProperty({ description: '结束时间戳(毫秒)', example: 1705881600000 }) @ApiProperty({ description: '结束时间戳(毫秒)', example: 1705881600000 })
@IsNumber() @IsNumber()
@Min(Date.now() + 86400000) // 至少未来 1 天
endAt: number; endAt: number;
@ApiProperty({ description: '每日目标值如喝水8杯', example: 8, minimum: 1, maximum: 1000 }) @ApiProperty({ description: '每日目标值如喝水8杯', example: 8, minimum: 1, maximum: 1000 })