Files
Hua.Todo/src/Hua.Todo.Application/CloudSync/Models/TaskSyncDtos.cs
T
ShaoHua 14868c45c7 feat: 实现v1.2.0云同步与实体重构核心功能
1.  重构用户与任务实体:UserEntity实现IUser<Guid>,TaskEntity继承ABP风格FullAuditedEntityWithUser,主键从int改为Guid
2.  新增云同步代理系统:嵌入式WebServer支持CloudSyncProxy转发云同步请求,新增配置API与持久化
3.  完善前端适配:新增Guid工具函数,更新任务类型定义与API交互逻辑,调整云同步设置弹窗适配本地代理
4.  文档与配置优化:更新文档结构,新增部署文档、版本记录,统一各项目配置项
5.  补充测试与迁移:新增单元测试,更新EF Core数据库迁移快照
2026-06-14 04:51:22 +08:00

174 lines
4.2 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.Text.Json.Serialization;
using Hua.Todo.Core.Entities;
namespace Hua.Todo.Application.CloudSync.Models;
/// <summary>
/// 云同步任务条目(ABP 标准)。
/// </summary>
public class CloudTaskItem
{
/// <summary>
/// 任务 ID(服务端分配,Guid)。
/// </summary>
[JsonPropertyName("id")]
public Guid Id { get; set; }
/// <summary>
/// 标题。
/// </summary>
[JsonPropertyName("title")]
public string Title { get; set; } = string.Empty;
/// <summary>
/// 优先级。
/// </summary>
[JsonPropertyName("priority")]
public TaskPriority Priority { get; set; }
/// <summary>
/// 是否完成。
/// </summary>
[JsonPropertyName("isCompleted")]
public bool IsCompleted { get; set; }
/// <summary>
/// 任务编号(用户级自增字符串)。
/// </summary>
[JsonPropertyName("code")]
public string Code { get; set; } = string.Empty;
/// <summary>
/// 父任务 IDGuid)。
/// </summary>
[JsonPropertyName("parentTaskId")]
public Guid? ParentTaskId { get; set; }
// === ABP 审计字段 ===
/// <summary>
/// 创建时间。
/// </summary>
[JsonPropertyName("creationTime")]
public DateTime CreationTime { get; set; }
/// <summary>
/// 创建人 ID。
/// </summary>
[JsonPropertyName("creatorId")]
public Guid? CreatorId { get; set; }
/// <summary>
/// 最后修改时间(用于 LWW 冲突判断)。
/// </summary>
[JsonPropertyName("lastModificationTime")]
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 最后修改人 ID。
/// </summary>
[JsonPropertyName("lastModifierId")]
public Guid? LastModifierId { get; set; }
/// <summary>
/// 软删除标记。
/// </summary>
[JsonPropertyName("isDeleted")]
public bool IsDeleted { get; set; }
/// <summary>
/// 删除时间。
/// </summary>
[JsonPropertyName("deletionTime")]
public DateTime? DeletionTime { get; set; }
/// <summary>
/// 删除人 ID。
/// </summary>
[JsonPropertyName("deleterId")]
public Guid? DeleterId { get; set; }
}
/// <summary>
/// 任务 Upsert DTO(客户端提交)。
/// </summary>
public class CloudTaskUpsert
{
/// <summary>
/// 任务 ID;为 null 表示新建。
/// </summary>
[JsonPropertyName("id")]
public Guid? Id { get; set; }
/// <summary>
/// 标题。
/// </summary>
[JsonPropertyName("title")]
public string Title { get; set; } = string.Empty;
/// <summary>
/// 优先级。
/// </summary>
[JsonPropertyName("priority")]
public TaskPriority Priority { get; set; } = TaskPriority.Medium;
/// <summary>
/// 是否完成。
/// </summary>
[JsonPropertyName("isCompleted")]
public bool IsCompleted { get; set; }
/// <summary>
/// 任务编号。
/// </summary>
[JsonPropertyName("code")]
public string Code { get; set; } = string.Empty;
/// <summary>
/// 父任务 ID(可选)。
/// </summary>
[JsonPropertyName("parentTaskId")]
public Guid? ParentTaskId { get; set; }
/// <summary>
/// 客户端发起变更时写入的时间戳(UTC),用于 LWW 冲突判断。
/// </summary>
[JsonPropertyName("lastModificationTime")]
public DateTime? LastModificationTime { get; set; }
}
/// <summary>
/// 同步请求(增改删)。
/// </summary>
public class SyncRequest
{
/// <summary>
/// 新增或更新的任务列表。
/// </summary>
[JsonPropertyName("upserts")]
public List<CloudTaskUpsert> Upserts { get; set; } = new();
/// <summary>
/// 需要逻辑删除的任务 ID 列表。
/// </summary>
[JsonPropertyName("deletes")]
public List<Guid> Deletes { get; set; } = new();
}
/// <summary>
/// 同步响应。
/// </summary>
public class SyncResponse
{
/// <summary>
/// 服务端时间(UTC)。
/// </summary>
[JsonPropertyName("serverTimeUtc")]
public DateTime ServerTimeUtc { get; set; }
/// <summary>
/// 当前用户的任务全量(含 Tombstone)。
/// </summary>
[JsonPropertyName("tasks")]
public List<CloudTaskItem> Tasks { get; set; } = new();
}