You need to sign in before continuing.
VoiceListResponseDTO.java 2.56 KB
package com.xly.tts.bean;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 语音列表响应数据传输对象
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class VoiceListResponseDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 语音列表
     */
    private List<VoiceInfoDTO> voices;

    /**
     * 当前页码
     */
    private Integer currentPage;

    /**
     * 每页大小
     */
    private Integer pageSize;

    /**
     * 总记录数
     */
    private Long totalCount;

    /**
     * 总页数
     */
    private Integer totalPages;

    /**
     * 是否有下一页
     */
    private Boolean hasNext;

    /**
     * 是否有上一页
     */
    private Boolean hasPrevious;

    /**
     * 查询条件
     */
    private VoiceQueryDTO query;

    /**
     * 按语言分组的数据
     */
    private List<VoiceGroupDTO> groups;

    /**
     * 推荐的默认语音
     */
    private VoiceInfoDTO defaultVoice;

    /**
     * 时间戳
     */
    private Long timestamp;

    /**
     * 状态码
     */
    @Builder.Default
    private Integer code = 200;

    /**
     * 状态消息
     */
    @Builder.Default
    private String message = "success";

    /**
     * 创建成功响应
     */
    public static VoiceListResponseDTO success(List<VoiceInfoDTO> voices, VoiceQueryDTO query,
                                               Long totalCount) {
        int pageSize = query != null ? query.getPageSize() : 20;
        int currentPage = query != null ? query.getPage() : 1;
        int totalPages = (int) Math.ceil((double) totalCount / pageSize);

        return VoiceListResponseDTO.builder()
                .voices(voices)
                .currentPage(currentPage)
                .pageSize(pageSize)
                .totalCount(totalCount)
                .totalPages(totalPages)
                .hasNext(currentPage < totalPages)
                .hasPrevious(currentPage > 1)
                .query(query)
                .timestamp(System.currentTimeMillis())
                .code(200)
                .message("获取成功")
                .build();
    }

    /**
     * 创建失败响应
     */
    public static VoiceListResponseDTO error(String message) {
        return VoiceListResponseDTO.builder()
                .code(500)
                .message(message)
                .timestamp(System.currentTimeMillis())
                .build();
    }
}