147 lines
4.9 KiB
C#
147 lines
4.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using iPackage.Extensions;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace iPackage.Models.Api
|
|
{
|
|
public enum ApiResultStatusCode
|
|
{
|
|
[Display(Name = "عملیات با موفقیت انجام شد")]
|
|
Success = 0,
|
|
|
|
[Display(Name = "خطایی در سرور رخ داده است")]
|
|
ServerError = 1,
|
|
|
|
[Display(Name = "پارامتر های ارسالی معتبر نیستند")]
|
|
BadRequest = 2,
|
|
|
|
[Display(Name = "یافت نشد")]
|
|
NotFound = 3,
|
|
|
|
[Display(Name = "لیست خالی است")]
|
|
ListEmpty = 4,
|
|
|
|
[Display(Name = "خطایی در پردازش رخ داد")]
|
|
LogicError = 5,
|
|
|
|
[Display(Name = "خطای احراز هویت")]
|
|
UnAuthorized = 6,
|
|
|
|
[Display(Name = "مقدار غذای درخواستی بیشتر است")]
|
|
FoodLimited = 7
|
|
}
|
|
public class ApiResult
|
|
{
|
|
public bool IsSuccess { get; set; }
|
|
public ApiResultStatusCode StatusCode { get; set; }
|
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
|
public string Message { get; set; }
|
|
public ApiResult(bool isSuccess, ApiResultStatusCode statusCode, string message = null)
|
|
{
|
|
IsSuccess = isSuccess;
|
|
StatusCode = statusCode;
|
|
Message = message ?? statusCode.ToDisplay();
|
|
}
|
|
|
|
#region Implicit Operators
|
|
public static implicit operator ApiResult(OkResult result)
|
|
{
|
|
return new ApiResult(true, ApiResultStatusCode.Success);
|
|
}
|
|
|
|
public static implicit operator ApiResult(BadRequestResult result)
|
|
{
|
|
return new ApiResult(false, ApiResultStatusCode.BadRequest);
|
|
}
|
|
|
|
public static implicit operator ApiResult(BadRequestObjectResult result)
|
|
{
|
|
var message = result.Value.ToString();
|
|
if (result.Value is SerializableError errors)
|
|
{
|
|
var errorMessages = errors.SelectMany(p => (string[])p.Value).Distinct();
|
|
message = string.Join(" | ", errorMessages);
|
|
}
|
|
return new ApiResult(false, ApiResultStatusCode.BadRequest, message);
|
|
}
|
|
|
|
public static implicit operator ApiResult(ContentResult result)
|
|
{
|
|
return new ApiResult(true, ApiResultStatusCode.Success, result.Content);
|
|
}
|
|
|
|
public static implicit operator ApiResult(NotFoundResult result)
|
|
{
|
|
return new ApiResult(false, ApiResultStatusCode.NotFound);
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
public class ApiResult<TData> : ApiResult
|
|
where TData : class
|
|
{
|
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
|
public TData Data { get; set; }
|
|
|
|
public ApiResult(bool isSuccess, ApiResultStatusCode statusCode, TData data, string message = null)
|
|
: base(isSuccess, statusCode, message)
|
|
{
|
|
Data = data;
|
|
}
|
|
|
|
#region Implicit Operators
|
|
public static implicit operator ApiResult<TData>(TData data)
|
|
{
|
|
return new ApiResult<TData>(true, ApiResultStatusCode.Success, data);
|
|
}
|
|
|
|
public static implicit operator ApiResult<TData>(OkResult result)
|
|
{
|
|
return new ApiResult<TData>(true, ApiResultStatusCode.Success, null);
|
|
}
|
|
|
|
public static implicit operator ApiResult<TData>(OkObjectResult result)
|
|
{
|
|
return new ApiResult<TData>(true, ApiResultStatusCode.Success, (TData)result.Value);
|
|
}
|
|
|
|
public static implicit operator ApiResult<TData>(BadRequestResult result)
|
|
{
|
|
return new ApiResult<TData>(false, ApiResultStatusCode.BadRequest, null);
|
|
}
|
|
|
|
public static implicit operator ApiResult<TData>(BadRequestObjectResult result)
|
|
{
|
|
var message = result.Value.ToString();
|
|
if (result.Value is SerializableError errors)
|
|
{
|
|
var errorMessages = errors.SelectMany(p => (string[])p.Value).Distinct();
|
|
message = string.Join(" | ", errorMessages);
|
|
}
|
|
return new ApiResult<TData>(false, ApiResultStatusCode.BadRequest, null, message);
|
|
}
|
|
|
|
public static implicit operator ApiResult<TData>(ContentResult result)
|
|
{
|
|
return new ApiResult<TData>(true, ApiResultStatusCode.Success, null, result.Content);
|
|
}
|
|
|
|
public static implicit operator ApiResult<TData>(NotFoundResult result)
|
|
{
|
|
return new ApiResult<TData>(false, ApiResultStatusCode.NotFound, null);
|
|
}
|
|
|
|
public static implicit operator ApiResult<TData>(NotFoundObjectResult result)
|
|
{
|
|
return new ApiResult<TData>(false, ApiResultStatusCode.NotFound, (TData)result.Value);
|
|
}
|
|
#endregion
|
|
}
|
|
}
|
|
|