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
};
}
}