Task 6 - 转换报告: - 扩展 ConversionReport 模型 - 添加 Id, ProjectId, SourceLanguage, TargetLanguage - 添加 IssueCount, TodoCount, ValidationStatus - 添加 CreatedAt, LastValidatedAt 时间戳 Task 7 - 存储服务: - IReportStorageService 接口 - ReportStorageService 内存实现 (MVP 版) - 支持保存/查询/删除报告 - 项目统计功能 WebAPI 项目: - CodePlay.WebAPI 项目创建 - JWT 认证配置 - AuthController (login, refresh, me) - ReportController (CRUD + stats) - Swagger 集成 测试:39 个测试全部通过 ✅ Co-authored-by: monkeycode-ai <[email protected]>
472 lines
9.5 KiB
C#
472 lines
9.5 KiB
C#
using CodePlay.Core.Common;
|
||
|
||
namespace CodePlay.Core.Models;
|
||
|
||
/// <summary>
|
||
/// 转换请求模型
|
||
/// </summary>
|
||
public class ConversionRequest
|
||
{
|
||
/// <summary>
|
||
/// 源代码
|
||
/// </summary>
|
||
public string SourceCode { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 源语言
|
||
/// </summary>
|
||
public LanguageType SourceLanguage { get; set; }
|
||
|
||
/// <summary>
|
||
/// 目标语言
|
||
/// </summary>
|
||
public LanguageType TargetLanguage { get; set; }
|
||
|
||
/// <summary>
|
||
/// 项目 ID(可选)
|
||
/// </summary>
|
||
public string? ProjectId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 验证轮次(1-3)
|
||
/// </summary>
|
||
public int ValidationRounds { get; set; } = 2;
|
||
|
||
/// <summary>
|
||
/// 转换选项
|
||
/// </summary>
|
||
public ConversionOptions? Options { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 转换选项
|
||
/// </summary>
|
||
public class ConversionOptions
|
||
{
|
||
/// <summary>
|
||
/// 保留注释
|
||
/// </summary>
|
||
public bool KeepComments { get; set; } = true;
|
||
|
||
/// <summary>
|
||
/// 保留文档字符串
|
||
/// </summary>
|
||
public bool KeepDocStrings { get; set; } = true;
|
||
|
||
/// <summary>
|
||
/// 保留代码格式
|
||
/// </summary>
|
||
public bool KeepFormatting { get; set; } = true;
|
||
|
||
/// <summary>
|
||
/// 缩进大小
|
||
/// </summary>
|
||
public int IndentSize { get; set; } = 4;
|
||
|
||
/// <summary>
|
||
/// 使用制表符缩进
|
||
/// </summary>
|
||
public bool UseTabs { get; set; } = false;
|
||
|
||
/// <summary>
|
||
/// 自动修复启用
|
||
/// </summary>
|
||
public bool EnableAutoFix { get; set; } = true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 转换结果模型
|
||
/// </summary>
|
||
public class ConversionResult
|
||
{
|
||
/// <summary>
|
||
/// 是否成功
|
||
/// </summary>
|
||
public bool Success { get; set; }
|
||
|
||
/// <summary>
|
||
/// 转换后的代码
|
||
/// </summary>
|
||
public string TransformedCode { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 转换报告
|
||
/// </summary>
|
||
public ConversionReport? Report { get; set; }
|
||
|
||
/// <summary>
|
||
/// 警告列表
|
||
/// </summary>
|
||
public List<ConversionWarning> Warnings { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 验证摘要
|
||
/// </summary>
|
||
public ValidationSummary? ValidationSummary { get; set; }
|
||
|
||
/// <summary>
|
||
/// 错误信息
|
||
/// </summary>
|
||
public string? ErrorMessage { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 转换报告
|
||
/// </summary>
|
||
public class ConversionReport
|
||
{
|
||
/// <summary>
|
||
/// 报告 ID
|
||
/// </summary>
|
||
public string Id { get; set; } = Guid.NewGuid().ToString("N")[..20];
|
||
|
||
/// <summary>
|
||
/// 项目 ID
|
||
/// </summary>
|
||
public string ProjectId { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 源语言
|
||
/// </summary>
|
||
public LanguageType SourceLanguage { get; set; }
|
||
|
||
/// <summary>
|
||
/// 目标语言
|
||
/// </summary>
|
||
public LanguageType TargetLanguage { get; set; }
|
||
|
||
/// <summary>
|
||
/// 转换的行数
|
||
/// </summary>
|
||
public int LinesConverted { get; set; }
|
||
|
||
/// <summary>
|
||
/// 转换的类数量
|
||
/// </summary>
|
||
public int ClassesConverted { get; set; }
|
||
|
||
/// <summary>
|
||
/// 转换的方法数量
|
||
/// </summary>
|
||
public int MethodsConverted { get; set; }
|
||
|
||
/// <summary>
|
||
/// 转换耗时
|
||
/// </summary>
|
||
public TimeSpan Duration { get; set; }
|
||
|
||
/// <summary>
|
||
/// 问题数量
|
||
/// </summary>
|
||
public int IssueCount { get; set; }
|
||
|
||
/// <summary>
|
||
/// TODO 数量
|
||
/// </summary>
|
||
public int TodoCount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 问题列表
|
||
/// </summary>
|
||
public List<ConversionIssue> Issues { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 转换日志
|
||
/// </summary>
|
||
public List<TransformationLog> TransformationLog { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// TODO 列表
|
||
/// </summary>
|
||
public List<TodoItem> TodoItems { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 验证状态
|
||
/// </summary>
|
||
public string ValidationStatus { get; set; } = "NotValidated";
|
||
|
||
/// <summary>
|
||
/// 最后验证时间
|
||
/// </summary>
|
||
public DateTime? LastValidatedAt { get; set; }
|
||
|
||
/// <summary>
|
||
/// 创建时间
|
||
/// </summary>
|
||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 转换警告
|
||
/// </summary>
|
||
public class ConversionWarning
|
||
{
|
||
/// <summary>
|
||
/// 警告代码
|
||
/// </summary>
|
||
public string Code { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 警告消息
|
||
/// </summary>
|
||
public string Message { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 行号
|
||
/// </summary>
|
||
public int LineNumber { get; set; }
|
||
|
||
/// <summary>
|
||
/// 列号
|
||
/// </summary>
|
||
public int ColumnNumber { get; set; }
|
||
|
||
/// <summary>
|
||
/// 建议
|
||
/// </summary>
|
||
public string? Suggestion { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 验证摘要
|
||
/// </summary>
|
||
public class ValidationSummary
|
||
{
|
||
/// <summary>
|
||
/// 是否通过验证
|
||
/// </summary>
|
||
public bool Passed { get; set; }
|
||
|
||
/// <summary>
|
||
/// 验证轮次
|
||
/// </summary>
|
||
public int RoundsExecuted { get; set; }
|
||
|
||
/// <summary>
|
||
/// 是否需要人工审查
|
||
/// </summary>
|
||
public bool NeedsManualReview { get; set; }
|
||
|
||
/// <summary>
|
||
/// 编译错误列表
|
||
/// </summary>
|
||
public List<CompilationError> CompilationErrors { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 验证日志
|
||
/// </summary>
|
||
public List<string> ValidationLog { get; set; } = new();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 转换问题
|
||
/// </summary>
|
||
public class ConversionIssue
|
||
{
|
||
/// <summary>
|
||
/// 问题类型
|
||
/// </summary>
|
||
public IssueType Type { get; set; }
|
||
|
||
/// <summary>
|
||
/// 问题严重程度
|
||
/// </summary>
|
||
public IssueSeverity Severity { get; set; }
|
||
|
||
/// <summary>
|
||
/// 问题描述
|
||
/// </summary>
|
||
public string Description { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 位置(行号)
|
||
/// </summary>
|
||
public int LineNumber { get; set; }
|
||
|
||
/// <summary>
|
||
/// 原始代码片段
|
||
/// </summary>
|
||
public string? OriginalCode { get; set; }
|
||
|
||
/// <summary>
|
||
/// 建议操作
|
||
/// </summary>
|
||
public string? Suggestion { get; set; }
|
||
|
||
/// <summary>
|
||
/// 源语言
|
||
/// </summary>
|
||
public LanguageType Language { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 问题严重程度
|
||
/// </summary>
|
||
public enum IssueSeverity
|
||
{
|
||
/// <summary>
|
||
/// 低优先级
|
||
/// </summary>
|
||
Low = 0,
|
||
|
||
/// <summary>
|
||
/// 中优先级
|
||
/// </summary>
|
||
Medium = 1,
|
||
|
||
/// <summary>
|
||
/// 高优先级
|
||
/// </summary>
|
||
High = 2
|
||
}
|
||
|
||
/// <summary>
|
||
/// 问题类型
|
||
/// </summary>
|
||
public enum IssueType
|
||
{
|
||
/// <summary>
|
||
/// 不可转换语法
|
||
/// </summary>
|
||
UnconvertibleSyntax = 0,
|
||
|
||
/// <summary>
|
||
/// 类型映射警告
|
||
/// </summary>
|
||
TypeMappingWarning = 1,
|
||
|
||
/// <summary>
|
||
/// API 差异
|
||
/// </summary>
|
||
ApiDifference = 2,
|
||
|
||
/// <summary>
|
||
/// 语义差异
|
||
/// </summary>
|
||
SemanticDifference = 3,
|
||
|
||
/// <summary>
|
||
/// 性能考虑
|
||
/// </summary>
|
||
PerformanceConsideration = 4
|
||
}
|
||
|
||
/// <summary>
|
||
/// 转换日志
|
||
/// </summary>
|
||
public class TransformationLog
|
||
{
|
||
/// <summary>
|
||
/// 时间戳
|
||
/// </summary>
|
||
public DateTime Timestamp { get; set; }
|
||
|
||
/// <summary>
|
||
/// 操作类型
|
||
/// </summary>
|
||
public string Operation { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 详情
|
||
/// </summary>
|
||
public string Details { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 日志级别
|
||
/// </summary>
|
||
public LogLevel Level { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 日志级别
|
||
/// </summary>
|
||
public enum LogLevel
|
||
{
|
||
/// <summary>
|
||
/// 信息
|
||
/// </summary>
|
||
Info = 0,
|
||
|
||
/// <summary>
|
||
/// 警告
|
||
/// </summary>
|
||
Warning = 1,
|
||
|
||
/// <summary>
|
||
/// 错误
|
||
/// </summary>
|
||
Error = 2,
|
||
|
||
/// <summary>
|
||
/// 调试
|
||
/// </summary>
|
||
Debug = 3
|
||
}
|
||
|
||
/// <summary>
|
||
/// TODO 项
|
||
/// </summary>
|
||
public class TodoItem
|
||
{
|
||
/// <summary>
|
||
/// TODO 描述
|
||
/// </summary>
|
||
public string Description { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 位置(行号)
|
||
/// </summary>
|
||
public int LineNumber { get; set; }
|
||
|
||
/// <summary>
|
||
/// 原始语法说明
|
||
/// </summary>
|
||
public string OriginalSyntax { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 为什么无法直接转换
|
||
/// </summary>
|
||
public string WhyNotDirect { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 推荐的替代方案
|
||
/// </summary>
|
||
public string RecommendedAlternative { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 参考代码位置
|
||
/// </summary>
|
||
public string? ReferenceLocation { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 编译错误
|
||
/// </summary>
|
||
public class CompilationError
|
||
{
|
||
/// <summary>
|
||
/// 错误 ID
|
||
/// </summary>
|
||
public string ErrorId { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 错误消息
|
||
/// </summary>
|
||
public string Message { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 行号
|
||
/// </summary>
|
||
public int LineNumber { get; set; }
|
||
|
||
/// <summary>
|
||
/// 列号
|
||
/// </summary>
|
||
public int ColumnNumber { get; set; }
|
||
|
||
/// <summary>
|
||
/// 错误级别(错误或警告)
|
||
/// </summary>
|
||
public bool IsError { get; set; } = true;
|
||
}
|