| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using System.Text.Json.Serialization;
- namespace Web.Api.Common;
- public sealed class ApiResponse
- {
- [JsonPropertyName("success")]
- public bool Success { get; init; }
- [JsonPropertyName("data")]
- [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
- public object? Data { get; init; }
- [JsonPropertyName("status")]
- [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
- public int Status { get; init; }
- [JsonPropertyName("message")]
- [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
- public string? Message { get; init; }
- [JsonPropertyName("errors")]
- [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
- public object? Errors { get; init; }
- public static IResult Ok(object? data = null)
- {
- string? message = null;
- if (data is not null)
- {
- var type = data.GetType();
- var msgProp = type.GetProperty("message", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase);
- if (msgProp is not null && msgProp.PropertyType == typeof(string))
- {
- message = msgProp.GetValue(data) as string;
- // message 외 다른 속성이 없으면 data를 null로 설정
- var otherProps = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).Where(p => !string.Equals(p.Name, "message", StringComparison.OrdinalIgnoreCase));
- if (!otherProps.Any())
- {
- data = null;
- }
- }
- }
- return Results.Ok(new ApiResponse
- {
- Success = true,
- Message = message,
- Data = data
- });
- }
- public static IResult Created(object? data = null)
- {
- return Results.Json(new ApiResponse
- {
- Success = true,
- Data = data
- }, statusCode: StatusCodes.Status201Created);
- }
- public static IResult Fail(int status, string message, object? errors = null)
- {
- return Results.Json(new ApiResponse
- {
- Success = false,
- Status = status,
- Message = message,
- Errors = errors
- }, statusCode: status);
- }
- }
|