Files
Hua.Todo/src/Hua.Todo.Application/Services/Meeting/Models/MeetingDtos.cs
T
ShaoHua 4fe0b5a963 feat: 完成云同步、语音控制与多平台扩展基础架构搭建
本次提交完成了项目核心基础架构升级:
1. 新增动态API中间件与权限控制系统,支持匿名/鉴权接口分离
2. 搭建云同步服务体系,包含认证、任务同步、安全策略等核心模块
3. 实现语音控制全链路,从STT/意图解析到命令执行
4. 新增任务类型、附件实体与相关仓储接口
5. 重构前端配置与代理规则,统一后端端口为5057
6. 新增多平台测试项目与CI脚本优化
7. 完善项目文档与代码注释规范

移除了旧版迁移文件与冗余代理配置,调整项目结构适配跨平台部署需求。
2026-06-21 03:26:04 +08:00

202 lines
4.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.ComponentModel.DataAnnotations;
using Hua.Todo.Application.Models;
using Hua.Todo.Core.Entities;
namespace Hua.Todo.Application.Services.Meeting.Models;
/// <summary>
/// 保存会议纪要请求。
/// </summary>
public class SaveNotesRequest
{
/// <summary>
/// 待办项 ID。
/// </summary>
[Required]
public Guid TaskId { get; set; }
/// <summary>
/// 会议纪要/转写文字内容。
/// </summary>
[Required]
[MaxLength(20000)]
public string Notes { get; set; } = string.Empty;
}
/// <summary>
/// 保存会议纪要响应。
/// </summary>
public class SaveNotesResponse
{
/// <summary>
/// 待办项 ID。
/// </summary>
public Guid TaskId { get; set; }
/// <summary>
/// 保存后的会议纪要内容。
/// </summary>
public string MeetingNotes { get; set; } = string.Empty;
}
/// <summary>
/// 会议详情响应(不含子任务递归)。
/// </summary>
public class MeetingDetailResponse
{
/// <summary>
/// 待办项 ID。
/// </summary>
public Guid TaskId { get; set; }
/// <summary>
/// 会议标题。
/// </summary>
public string Title { get; set; } = string.Empty;
/// <summary>
/// 会议纪要/转写文字。
/// </summary>
public string? MeetingNotes { get; set; }
/// <summary>
/// 录音时长(秒)。
/// </summary>
public double? AudioDuration { get; set; }
/// <summary>
/// 是否已完成。
/// </summary>
public bool IsCompleted { get; set; }
}
/// <summary>
/// 会议任务拆分建议(LLM 输出)。
/// </summary>
public class MeetingTaskSuggestion
{
/// <summary>建议的待办项标题</summary>
public string Title { get; set; } = string.Empty;
/// <summary>建议优先级</summary>
public TaskPriority Priority { get; set; } = TaskPriority.Medium;
/// <summary>拆分原因(LLM 输出,用于 UI 展示)</summary>
public string Reason { get; set; } = string.Empty;
}
/// <summary>
/// AI 拆分请求。
/// </summary>
public class BreakdownRequest
{
/// <summary>待办项 ID</summary>
[Required]
public Guid TaskId { get; set; }
/// <summary>会议纪要文字(可选,不传则使用已保存的 meetingNotes</summary>
public string? Notes { get; set; }
}
/// <summary>
/// AI 拆分响应。
/// </summary>
public class BreakdownResponse
{
/// <summary>待办项 ID</summary>
public Guid TaskId { get; set; }
/// <summary>拆分建议列表</summary>
public List<MeetingTaskSuggestion> Suggestions { get; set; } = new();
}
/// <summary>
/// 批量创建请求中的单个子任务项。
/// </summary>
public class SubTaskCreateItem
{
/// <summary>子任务标题</summary>
[Required]
public string Title { get; set; } = string.Empty;
/// <summary>子任务优先级</summary>
public TaskPriority Priority { get; set; } = TaskPriority.Medium;
}
/// <summary>
/// 批量确认拆分请求。
/// </summary>
public class ConfirmBreakdownRequest
{
/// <summary>待办项 ID</summary>
[Required]
public Guid TaskId { get; set; }
/// <summary>要创建的子任务列表</summary>
[Required]
public List<SubTaskCreateItem> SubTasks { get; set; } = new();
}
/// <summary>
/// 批量创建结果。
/// </summary>
public class BatchCreateResult
{
/// <summary>成功创建数量</summary>
public int CreatedCount { get; set; }
/// <summary>创建后的子任务 DTO 列表</summary>
public List<TaskDto> SubTasks { get; set; } = new();
}
/// <summary>
/// 语音转写请求。
/// 音频数据以 Base64 编码在 JSON 中传输,避免 DynamicApi 中间件处理 multipart/form-data 的兼容问题。
/// </summary>
public class TranscribeRequest
{
/// <summary>
/// 待办项 ID。
/// </summary>
[Required]
public Guid TaskId { get; set; }
/// <summary>
/// Base64 编码的音频数据。
/// </summary>
[Required]
public string AudioBase64 { get; set; } = string.Empty;
/// <summary>
/// 音频格式,例如 "webm"、"mp4"、"wav"。
/// </summary>
[Required]
public string Format { get; set; } = string.Empty;
/// <summary>
/// 音频时长(秒),由前端录制时计算。
/// </summary>
public double AudioDuration { get; set; }
}
/// <summary>
/// 语音转写响应。
/// </summary>
public class TranscribeResponse
{
/// <summary>
/// 待办项 ID。
/// </summary>
public Guid TaskId { get; set; }
/// <summary>
/// 转写后的文字内容。
/// </summary>
public string Transcript { get; set; } = string.Empty;
/// <summary>
/// 音频时长(秒)。
/// </summary>
public double AudioDuration { get; set; }
}