zksu
/
API
forked from yoone/API
1
0
Fork 0
API/src/dto/customer.dto.ts

364 lines
10 KiB
TypeScript

import { ApiProperty } from '@midwayjs/swagger';
import { UnifiedSearchParamsDTO } from './api.dto';
import { Customer } from '../entity/customer.entity';
// 客户基本信息DTO(用于响应)
export class CustomerDTO extends Customer{
@ApiProperty({ description: '客户ID' })
id: number;
@ApiProperty({ description: '站点ID', required: false })
site_id: number;
@ApiProperty({ description: '原始ID', required: false })
origin_id: string;
@ApiProperty({ description: '站点创建时间', required: false })
site_created_at: Date;
@ApiProperty({ description: '站点更新时间', required: false })
site_updated_at: Date;
@ApiProperty({ description: '邮箱' })
email: string;
@ApiProperty({ description: '名字', required: false })
first_name: string;
@ApiProperty({ description: '姓氏', required: false })
last_name: string;
@ApiProperty({ description: '全名', required: false })
fullname: string;
@ApiProperty({ description: '用户名', required: false })
username: string;
@ApiProperty({ description: '电话', required: false })
phone: string;
@ApiProperty({ description: '头像URL', required: false })
avatar: string;
@ApiProperty({ description: '账单信息', type: 'object', required: false })
billing: any;
@ApiProperty({ description: '配送信息', type: 'object', required: false })
shipping: any;
@ApiProperty({ description: '原始数据', type: 'object', required: false })
raw: any;
@ApiProperty({ description: '创建时间' })
created_at: Date;
@ApiProperty({ description: '更新时间' })
updated_at: Date;
@ApiProperty({ description: '评分' })
rate: number;
@ApiProperty({ description: '标签列表', type: [String], required: false })
tags: string[];
}
// ====================== 单条操作 ======================
// 创建客户请求DTO
export class CreateCustomerDTO {
@ApiProperty({ description: '站点ID' })
site_id: number;
@ApiProperty({ description: '原始ID', required: false })
origin_id?: string;
@ApiProperty({ description: '邮箱' })
email: string;
@ApiProperty({ description: '名字', required: false })
first_name?: string;
@ApiProperty({ description: '姓氏', required: false })
last_name?: string;
@ApiProperty({ description: '全名', required: false })
fullname?: string;
@ApiProperty({ description: '用户名', required: false })
username?: string;
@ApiProperty({ description: '电话', required: false })
phone?: string;
@ApiProperty({ description: '头像URL', required: false })
avatar?: string;
@ApiProperty({ description: '账单信息', type: 'object', required: false })
billing?: any;
@ApiProperty({ description: '配送信息', type: 'object', required: false })
shipping?: any;
@ApiProperty({ description: '原始数据', type: 'object', required: false })
raw?: any;
@ApiProperty({ description: '评分', required: false })
rate?: number;
@ApiProperty({ description: '标签列表', type: [String], required: false })
tags?: string[];
@ApiProperty({ description: '站点创建时间', required: false })
site_created_at?: Date;
@ApiProperty({ description: '站点更新时间', required: false })
site_updated_at?: Date;
}
// 更新客户请求DTO
export class UpdateCustomerDTO {
@ApiProperty({ description: '站点ID', required: false })
site_id?: number;
@ApiProperty({ description: '原始ID', required: false })
origin_id?: string;
@ApiProperty({ description: '邮箱', required: false })
email?: string;
@ApiProperty({ description: '名字', required: false })
first_name?: string;
@ApiProperty({ description: '姓氏', required: false })
last_name?: string;
@ApiProperty({ description: '全名', required: false })
fullname?: string;
@ApiProperty({ description: '用户名', required: false })
username?: string;
@ApiProperty({ description: '电话', required: false })
phone?: string;
@ApiProperty({ description: '头像URL', required: false })
avatar?: string;
@ApiProperty({ description: '账单信息', type: 'object', required: false })
billing?: any;
@ApiProperty({ description: '配送信息', type: 'object', required: false })
shipping?: any;
@ApiProperty({ description: '原始数据', type: 'object', required: false })
raw?: any;
@ApiProperty({ description: '评分', required: false })
rate?: number;
@ApiProperty({ description: '标签列表', type: [String], required: false })
tags?: string[];
}
// 查询单个客户响应DTO(继承基本信息)
export class GetCustomerDTO extends CustomerDTO {
// 可以添加额外的详细信息字段
}
// 客户统计信息DTO(包含订单统计)
export class CustomerStatisticDTO extends CustomerDTO {
@ApiProperty({ description: '创建日期' })
date_created: Date;
@ApiProperty({ description: '首次购买日期' })
first_purchase_date: Date;
@ApiProperty({ description: '最后购买日期' })
last_purchase_date: Date;
@ApiProperty({ description: '订单数量' })
orders: number;
@ApiProperty({ description: '总消费金额' })
total: number;
@ApiProperty({ description: 'Yoone订单数量', required: false })
yoone_orders?: number;
@ApiProperty({ description: 'Yoone总金额', required: false })
yoone_total?: number;
}
// 客户统计查询条件DTO
export class CustomerStatisticWhereDTO {
@ApiProperty({ description: '邮箱筛选', required: false })
email?: string;
@ApiProperty({ description: '标签筛选', required: false })
tags?: string;
@ApiProperty({ description: '首次购买日期筛选', required: false })
first_purchase_date?: string;
@ApiProperty({ description: '评分筛选', required: false })
rate?: number;
@ApiProperty({ description: '客户ID筛选', required: false })
customerId?: number;
}
// 客户统计查询参数DTO(继承通用查询参数)
export type CustomerStatisticQueryParamsDTO = UnifiedSearchParamsDTO<CustomerStatisticWhereDTO>;
// 客户统计列表响应DTO
export class CustomerStatisticListResponseDTO {
@ApiProperty({ description: '客户统计列表', type: [CustomerStatisticDTO] })
items: CustomerStatisticDTO[];
@ApiProperty({ description: '总数', example: 100 })
total: number;
@ApiProperty({ description: '当前页', example: 1 })
current: number;
@ApiProperty({ description: '每页数量', example: 20 })
pageSize: number;
}
// ====================== 批量操作 ======================
// 批量创建客户请求DTO
export class BatchCreateCustomerDTO {
@ApiProperty({ description: '客户列表', type: [CreateCustomerDTO] })
customers: CreateCustomerDTO[];
}
// 单个客户更新项DTO
export class UpdateCustomerItemDTO {
@ApiProperty({ description: '客户ID' })
id: number;
@ApiProperty({ description: '更新字段', type: UpdateCustomerDTO })
update_data: Partial<Customer>;
}
// 批量更新客户请求DTO - 每个对象包含id和要更新的字段
export class BatchUpdateCustomerDTO {
@ApiProperty({ description: '客户更新列表', type: [UpdateCustomerItemDTO] })
customers: UpdateCustomerItemDTO[];
}
// 批量删除客户请求DTO
export class BatchDeleteCustomerDTO {
@ApiProperty({ description: '客户ID列表', type: [Number] })
ids: number[];
}
// ====================== 查询操作 ======================
// 客户查询条件DTO(用于UnifiedSearchParamsDTO的where参数)
export class CustomerWhereDTO {
@ApiProperty({ description: '邮箱筛选', required: false })
email?: string;
@ApiProperty({ description: '标签筛选', required: false })
tags?: string;
@ApiProperty({ description: '评分筛选', required: false })
rate?: number;
@ApiProperty({ description: '站点ID筛选', required: false })
site_id?: number;
@ApiProperty({ description: '客户ID筛选', required: false })
customerId?: number;
@ApiProperty({ description: '首次购买日期筛选', required: false })
first_purchase_date?: string;
@ApiProperty({ description: '角色筛选', required: false })
role?: string;
}
// 客户查询参数DTO(继承通用查询参数)
export type CustomerQueryParamsDTO = UnifiedSearchParamsDTO<CustomerWhereDTO>;
// 客户列表响应DTO(参考site-api.dto.ts中的分页格式)
export class CustomerListResponseDTO {
@ApiProperty({ description: '客户列表', type: [CustomerDTO] })
items: CustomerDTO[];
@ApiProperty({ description: '总数', example: 100 })
total: number;
@ApiProperty({ description: '页码', example: 1 })
page: number;
@ApiProperty({ description: '每页数量', example: 20 })
per_page: number;
@ApiProperty({ description: '总页数', example: 5 })
total_pages: number;
}
// ====================== 客户标签相关 ======================
// 客户标签基本信息DTO
export class CustomerTagBasicDTO {
@ApiProperty({ description: '标签ID' })
id: number;
@ApiProperty({ description: '客户ID' })
customer_id: number;
@ApiProperty({ description: '标签名称' })
tag: string;
@ApiProperty({ description: '创建时间', required: false })
created_at?: string;
}
// 添加客户标签请求DTO
export class AddCustomerTagDTO {
@ApiProperty({ description: '客户ID' })
customer_id: number;
@ApiProperty({ description: '标签名称' })
tag: string;
}
// 批量添加客户标签请求DTO
export class BatchAddCustomerTagDTO {
@ApiProperty({ description: '客户ID' })
customer_id: number;
@ApiProperty({ description: '标签列表', type: [String] })
tags: string[];
}
// 删除客户标签请求DTO
export class DeleteCustomerTagDTO {
@ApiProperty({ description: '标签ID' })
tag_id: number;
}
// 批量删除客户标签请求DTO
export class BatchDeleteCustomerTagDTO {
@ApiProperty({ description: '标签ID列表', type: [Number] })
tag_ids: number[];
}
// ====================== 同步操作 ======================
// 同步客户数据请求DTO
export class SyncCustomersDTO {
@ApiProperty({ description: '站点ID' })
siteId: number;
@ApiProperty({ description: '查询参数(支持where和orderBy)', type: UnifiedSearchParamsDTO, required: false })
params?: UnifiedSearchParamsDTO<CustomerWhereDTO>;
}