Files
dukang/server/dukang-api/src/modules/common/dto/support-ticket.dto.ts
T
jacy 02d89e6385 feat(ops): kb doc edit, validation auto-tickets, support batch ops
Add knowledge document GET/PUT and admin edit UI; auto-create support tickets on client 400 validation errors across user/shop/partner apps; batch create tasks and publish from support tickets; restore mini-user store env single-column layout.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-05 00:08:40 +08:00

137 lines
2.5 KiB
TypeScript

import { ArrayMinSize, IsArray, IsBoolean, IsIn, IsNotEmpty, IsOptional, IsString, MaxLength, ValidateIf, ValidateNested } from 'class-validator';
import { Type } from 'class-transformer';
import { IsInt, Min } from 'class-validator';
export class SupportTicketListQueryDto {
@IsOptional()
@IsIn(['BUG', 'SUGGESTION', 'OTHER'])
ticketType?: string;
@IsOptional()
@IsIn(['PENDING_REVIEW', 'REJECTED', 'DEVELOPING', 'TESTING', 'PASSED'])
status?: string;
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
page?: number = 1;
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
pageSize?: number = 20;
}
export class CreateSupportTicketDto {
@IsIn(['BUG', 'SUGGESTION', 'OTHER'])
ticketType: string;
@IsString()
@IsNotEmpty()
@MaxLength(128)
title: string;
@IsOptional()
@IsString()
content?: string;
@IsOptional()
@IsString()
@MaxLength(512)
remark?: string;
@IsOptional()
@IsArray()
@IsString({ each: true })
attachmentUrls?: string[];
}
export class UpdateSupportTicketDto {
@IsOptional()
@IsIn(['BUG', 'SUGGESTION', 'OTHER'])
ticketType?: string;
@IsOptional()
@IsString()
@IsNotEmpty()
@MaxLength(128)
title?: string;
@IsOptional()
@IsString()
content?: string;
@IsOptional()
@IsString()
@MaxLength(512)
remark?: string;
@IsOptional()
@IsArray()
@IsString({ each: true })
attachmentUrls?: string[];
}
export class BatchUpdateSupportTicketStatusDto {
@IsArray()
@ArrayMinSize(1)
@IsString({ each: true })
ticketIds!: string[];
@IsIn(['PENDING_REVIEW', 'REJECTED', 'DEVELOPING', 'TESTING', 'PASSED'])
status!: string;
@ValidateIf((o: BatchUpdateSupportTicketStatusDto) => o.status === 'REJECTED')
@IsString()
@IsNotEmpty()
@MaxLength(512)
rejectReason?: string;
@IsOptional()
@IsString()
@MaxLength(512)
note?: string;
}
export class BatchCreateSupportTicketTasksDto {
@IsArray()
@ArrayMinSize(1)
@IsString({ each: true })
ticketIds!: string[];
}
export class BatchPublishSupportTicketsDto {
@IsArray()
@ArrayMinSize(1)
@IsString({ each: true })
ticketIds!: string[];
@IsString()
@IsNotEmpty()
versionId!: string;
@IsOptional()
@IsBoolean()
dispatchToWecom?: boolean;
@IsOptional()
@IsString()
dispatchSupplement?: string;
}
export class RejectSupportTicketDto {
@IsString()
@IsNotEmpty()
@MaxLength(512)
rejectReason: string;
}
export class SupportTicketRemarkDto {
@IsOptional()
@IsString()
@MaxLength(512)
remark?: string;
}