namespace OrpaonVision.Core.Results; /// /// 非泛型统一返回结果。 /// /// 约束: /// - 普通业务失败使用 Result 返回,不建议抛异常; /// - 异常场景请由上层捕获后转换为统一错误码与消息。 /// public class Result { /// /// 是否成功。 /// public bool Succeeded { get; init; } /// /// 业务编码(成功或失败编码)。 /// public string Code { get; init; } = string.Empty; /// /// 业务消息。 /// public string Message { get; init; } = string.Empty; /// /// 错误明细。 /// public IReadOnlyCollection Errors { get; init; } = Array.Empty(); /// /// 跟踪 ID,用于日志链路关联。 /// public string? TraceId { get; init; } /// /// 创建成功结果。 /// public static Result Success(string code = "OK", string message = "Success") { return new Result { Succeeded = true, Code = code, Message = message }; } /// /// 创建成功结果(携带 TraceId)。 /// public static Result SuccessWithTrace(string traceId, string code = "OK", string message = "Success") { return new Result { Succeeded = true, Code = code, Message = message, TraceId = traceId }; } /// /// 创建失败结果。 /// public static Result Fail(string code, string message, params string[] errors) { return new Result { Succeeded = false, Code = code, Message = message, Errors = errors }; } /// /// 创建失败结果(携带 TraceId)。 /// public static Result FailWithTrace(string code, string message, string traceId, params string[] errors) { return new Result { Succeeded = false, Code = code, Message = message, Errors = errors, TraceId = traceId }; } /// /// 由异常创建失败结果。 /// public static Result FromException(Exception exception, string code = "UNHANDLED_EXCEPTION", string message = "系统出现未处理异常。", string? traceId = null) { var errors = new List(); var current = exception; while (current is not null) { errors.Add(current.Message); current = current.InnerException; } return new Result { Succeeded = false, Code = code, Message = message, Errors = errors, TraceId = traceId }; } } /// /// 泛型统一返回结果。 /// public sealed class Result : Result { /// /// 业务数据。 /// public T? Data { get; init; } /// /// 创建成功结果。 /// public static Result Success(T data, string code = "OK", string message = "Success") { return new Result { Succeeded = true, Code = code, Message = message, Data = data }; } /// /// 创建成功结果(携带 TraceId)。 /// public static Result SuccessWithTrace(T data, string traceId, string code = "OK", string message = "Success") { return new Result { Succeeded = true, Code = code, Message = message, Data = data, TraceId = traceId }; } /// /// 创建失败结果。 /// public static new Result Fail(string code, string message, params string[] errors) { return new Result { Succeeded = false, Code = code, Message = message, Errors = errors }; } /// /// 创建失败结果(携带 TraceId)。 /// public static new Result FailWithTrace(string code, string message, string traceId, params string[] errors) { return new Result { Succeeded = false, Code = code, Message = message, Errors = errors, TraceId = traceId }; } }