210 lines
6.0 KiB
TypeScript
210 lines
6.0 KiB
TypeScript
import { ApiProperty } from '@midwayjs/swagger';
|
|
import { Rule, RuleType } from '@midwayjs/validate';
|
|
|
|
/**
|
|
* 批量操作错误项
|
|
*/
|
|
export interface BatchErrorItem {
|
|
// 错误项标识(可以是ID、邮箱等)
|
|
identifier: string;
|
|
// 错误信息
|
|
error: string;
|
|
}
|
|
|
|
/**
|
|
* 批量操作结果基础接口
|
|
*/
|
|
export interface BatchOperationResult {
|
|
// 总处理数量
|
|
total: number;
|
|
// 成功处理数量
|
|
processed: number;
|
|
// 创建数量
|
|
created?: number;
|
|
// 更新数量
|
|
updated?: number;
|
|
// 删除数量
|
|
deleted?: number;
|
|
// 跳过的数量(如数据已存在或无需处理)
|
|
skipped?: number;
|
|
// 错误列表
|
|
errors: BatchErrorItem[];
|
|
}
|
|
|
|
/**
|
|
* 同步操作结果接口
|
|
*/
|
|
export interface SyncOperationResult extends BatchOperationResult {
|
|
// 同步成功数量
|
|
synced: number;
|
|
}
|
|
|
|
/**
|
|
* 批量操作错误项DTO
|
|
*/
|
|
export class BatchErrorItemDTO {
|
|
@ApiProperty({ description: '错误项标识(如ID、邮箱等)', type: String })
|
|
@Rule(RuleType.string().required())
|
|
identifier: string;
|
|
|
|
@ApiProperty({ description: '错误信息', type: String })
|
|
@Rule(RuleType.string().required())
|
|
error: string;
|
|
}
|
|
|
|
/**
|
|
* 批量操作结果基础DTO
|
|
*/
|
|
export class BatchOperationResultDTO {
|
|
@ApiProperty({ description: '总处理数量', type: Number })
|
|
total: number;
|
|
|
|
@ApiProperty({ description: '成功处理数量', type: Number })
|
|
processed: number;
|
|
|
|
@ApiProperty({ description: '创建数量', type: Number, required: false })
|
|
created?: number;
|
|
|
|
@ApiProperty({ description: '更新数量', type: Number, required: false })
|
|
updated?: number;
|
|
|
|
@ApiProperty({ description: '删除数量', type: Number, required: false })
|
|
deleted?: number;
|
|
|
|
@ApiProperty({ description: '跳过的数量', type: Number, required: false })
|
|
skipped?: number;
|
|
|
|
@ApiProperty({ description: '错误列表', type: [BatchErrorItemDTO] })
|
|
errors: BatchErrorItemDTO[];
|
|
}
|
|
|
|
/**
|
|
* 同步操作结果DTO
|
|
*/
|
|
export class SyncOperationResultDTO extends BatchOperationResultDTO {
|
|
@ApiProperty({ description: '同步成功数量', type: Number })
|
|
synced: number;
|
|
}
|
|
|
|
/**
|
|
* 批量创建DTO
|
|
*/
|
|
export class BatchCreateDTO<T = any> {
|
|
@ApiProperty({ description: '要创建的数据列表', type: Array })
|
|
@Rule(RuleType.array().required())
|
|
items: T[];
|
|
}
|
|
|
|
/**
|
|
* 批量更新DTO
|
|
*/
|
|
export class BatchUpdateDTO<T = any> {
|
|
@ApiProperty({ description: '要更新的数据列表', type: Array })
|
|
@Rule(RuleType.array().required())
|
|
items: T[];
|
|
}
|
|
|
|
/**
|
|
* 批量删除DTO
|
|
*/
|
|
export class BatchDeleteDTO {
|
|
@ApiProperty({ description: '要删除的ID列表', type: [String, Number] })
|
|
@Rule(RuleType.array().items(RuleType.alternatives().try(RuleType.string(), RuleType.number())).required())
|
|
ids: Array<string | number>;
|
|
}
|
|
|
|
/**
|
|
* 批量操作请求DTO(包含增删改)
|
|
*/
|
|
export class BatchOperationDTO<T = any> {
|
|
@ApiProperty({ description: '要创建的数据列表', type: Array, required: false })
|
|
@Rule(RuleType.array().optional())
|
|
create?: T[];
|
|
|
|
@ApiProperty({ description: '要更新的数据列表', type: Array, required: false })
|
|
@Rule(RuleType.array().optional())
|
|
update?: T[];
|
|
|
|
@ApiProperty({ description: '要删除的ID列表', type: [String, Number], required: false })
|
|
@Rule(RuleType.array().items(RuleType.alternatives().try(RuleType.string(), RuleType.number())).optional())
|
|
delete?: Array<string | number>;
|
|
}
|
|
|
|
/**
|
|
* 分页批量操作DTO
|
|
*/
|
|
export class PaginatedBatchOperationDTO<T = any> {
|
|
@ApiProperty({ description: '页码', type: Number, required: false, default: 1 })
|
|
@Rule(RuleType.number().integer().min(1).optional())
|
|
page?: number = 1;
|
|
|
|
@ApiProperty({ description: '每页数量', type: Number, required: false, default: 100 })
|
|
@Rule(RuleType.number().integer().min(1).max(1000).optional())
|
|
pageSize?: number = 100;
|
|
|
|
@ApiProperty({ description: '要创建的数据列表', type: Array, required: false })
|
|
@Rule(RuleType.array().optional())
|
|
create?: T[];
|
|
|
|
@ApiProperty({ description: '要更新的数据列表', type: Array, required: false })
|
|
@Rule(RuleType.array().optional())
|
|
update?: T[];
|
|
|
|
@ApiProperty({ description: '要删除的ID列表', type: [String, Number], required: false })
|
|
@Rule(RuleType.array().items(RuleType.alternatives().try(RuleType.string(), RuleType.number())).optional())
|
|
delete?: Array<string | number>;
|
|
}
|
|
|
|
/**
|
|
* 同步参数DTO
|
|
*/
|
|
export class SyncParamsDTO {
|
|
@ApiProperty({ description: '页码', type: Number, required: false, default: 1 })
|
|
@Rule(RuleType.number().integer().min(1).optional())
|
|
page?: number = 1;
|
|
|
|
@ApiProperty({ description: '每页数量', type: Number, required: false, default: 100 })
|
|
@Rule(RuleType.number().integer().min(1).max(1000).optional())
|
|
pageSize?: number = 100;
|
|
|
|
@ApiProperty({ description: '开始时间', type: String, required: false })
|
|
@Rule(RuleType.string().optional())
|
|
startDate?: string;
|
|
|
|
@ApiProperty({ description: '结束时间', type: String, required: false })
|
|
@Rule(RuleType.string().optional())
|
|
endDate?: string;
|
|
|
|
@ApiProperty({ description: '强制同步(忽略缓存)', type: Boolean, required: false, default: false })
|
|
@Rule(RuleType.boolean().optional())
|
|
force?: boolean = false;
|
|
}
|
|
|
|
/**
|
|
* 批量查询DTO
|
|
*/
|
|
export class BatchQueryDTO {
|
|
@ApiProperty({ description: 'ID列表', type: [String, Number] })
|
|
@Rule(RuleType.array().items(RuleType.alternatives().try(RuleType.string(), RuleType.number())).required())
|
|
ids: Array<string | number>;
|
|
|
|
@ApiProperty({ description: '包含关联数据', type: Boolean, required: false, default: false })
|
|
@Rule(RuleType.boolean().optional())
|
|
includeRelations?: boolean = false;
|
|
}
|
|
|
|
/**
|
|
* 批量操作结果类(泛型支持)
|
|
*/
|
|
export class BatchOperationResultDTOGeneric<T> extends BatchOperationResultDTO {
|
|
@ApiProperty({ description: '操作成功的数据列表', type: Array })
|
|
data?: T[];
|
|
}
|
|
|
|
/**
|
|
* 同步操作结果类(泛型支持)
|
|
*/
|
|
export class SyncOperationResultDTOGeneric<T> extends SyncOperationResultDTO {
|
|
@ApiProperty({ description: '同步成功的数据列表', type: Array })
|
|
data?: T[];
|
|
} |