feat: 完成云同步、语音控制与多平台扩展基础架构搭建
本次提交完成了项目核心基础架构升级: 1. 新增动态API中间件与权限控制系统,支持匿名/鉴权接口分离 2. 搭建云同步服务体系,包含认证、任务同步、安全策略等核心模块 3. 实现语音控制全链路,从STT/意图解析到命令执行 4. 新增任务类型、附件实体与相关仓储接口 5. 重构前端配置与代理规则,统一后端端口为5057 6. 新增多平台测试项目与CI脚本优化 7. 完善项目文档与代码注释规范 移除了旧版迁移文件与冗余代理配置,调整项目结构适配跨平台部署需求。
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
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; }
|
||||
}
|
||||
Reference in New Issue
Block a user