update mobile response base format

This commit is contained in:
dibakor 2026-07-07 12:15:19 +06:00
parent 89ef87fb18
commit ad9694f85d
5 changed files with 62 additions and 62 deletions

View File

@ -1,5 +1,6 @@
using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Systems;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.Common;
using System.ComponentModel.DataAnnotations;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Integrations;
@ -11,23 +12,30 @@ public class IntegrationLoginRequest : AuthLoginRequest
public class IntegrationRefreshTokenRequest
{
[Required]
public string RefreshToken { get; set; }
}
public class InsertRefreshTokenRequest : RefreshToken
{
[Required]
public string RefreshToken { get; set; }
}
public class RevokedRefreshTokenRequest
{
[Required]
public string RefreshToken { get; set; }
[Required]
public int UserId { get; set; }
}
public class GenerateRefreshTokenRequest
{
[Required]
public int UserId { get; set; }
[Required]
public string IpAddress { get; set; }
[Required]
public string RawRefreshToken { get; set; }
}

View File

@ -11,12 +11,19 @@ public class IntegrationLoginResponse : ResponseBase
public DateTime AccessTokenExpiry { get; set; }
}
public class IntegrationRrefreshTokenResponse : ResponseBase
{
public string AccessToken { get; set; } = string.Empty;
public string RefreshToken { get; set; } = string.Empty;
}
public class MobileRrefreshTokenResponse
{
public string AccessToken { get; set; } = string.Empty;
public string RefreshToken { get; set; } = string.Empty;
}
public class RefreshTokenResponse : ResponseBase
{
public int UserId { get; set; }

View File

@ -4,7 +4,7 @@ using System;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Responses.MobileApp;
public class AppAuthUserResponse : ResponseBase
public class AppAuthUserResponse
{
public int UserId { get; set; }
public string LoginId { get; set; }
@ -26,14 +26,14 @@ public class AppAuthUserResponse : ResponseBase
}
public class AuthLogoutResponse : ResponseBase
public class AuthLogoutResponse
{
public int UserId { get; set; }
public string LoginId { get; set; }
public bool IsSuccess { get; set; }
}
public class AppChangePasswordResponse : ResponseBase
public class AppChangePasswordResponse
{
public int UserId { get; set; }
public string LoginId { get; set; }

View File

@ -12,7 +12,21 @@ namespace OnlineSalesAutoCrop.CoreAPI.Models.Responses
public List<string> ReturnMessage { get; set; } = [];
}
public abstract class TotalRowsResponseBase : ResponseBase
public class MobileResponseBase<T>
{
public int ReturnStatus { get; set; }
public List<string> ReturnMessage { get; set; } = [];
public T? Data { get; set; }
public static MobileResponseBase<T> Success(T data, string message = "Success") =>
new() { ReturnStatus = 200, ReturnMessage = [message], Data = data };
public static MobileResponseBase<T> Failure(string message, int status = 400 ) =>
new() { ReturnStatus = status, ReturnMessage = [message], Data = default };
}
public abstract class TotalRowsResponseBase : ResponseBase
{
public int TotalRows { get; set; }
}

View File

@ -12,6 +12,7 @@ using OnlineSalesAutoCrop.CoreAPI.Models.Objects.Systems;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.Common;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.Integrations;
using OnlineSalesAutoCrop.CoreAPI.Models.Requests.MobileApp;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Integrations;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.MobileApp;
using OnlineSalesAutoCrop.CoreAPI.Models.Responses.Systems;
@ -74,16 +75,14 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
if (string.IsNullOrEmpty(request.LoginId))
{
loginReponse.ReturnStatus = StatusCodes.Status417ExpectationFailed;
loginReponse.ReturnMessage.Add("Login ID is required.");
return StatusCode(StatusCodes.Status417ExpectationFailed, loginReponse);
string message = "Login ID is required.";
return BadRequest(MobileResponseBase<AppAuthUserResponse>.Failure(message, StatusCodes.Status417ExpectationFailed));
}
if (string.IsNullOrEmpty(request.Password))
{
loginReponse.ReturnStatus = StatusCodes.Status417ExpectationFailed;
loginReponse.ReturnMessage.Add("Password is required.");
return StatusCode(StatusCodes.Status417ExpectationFailed, loginReponse);
string message = "Password is required.";
return BadRequest(MobileResponseBase<AppAuthUserResponse>.Failure(message, StatusCodes.Status417ExpectationFailed));
}
@ -104,38 +103,29 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
if (loginReponse == null || loginReponse.UserId == 0)
{
loginReponse.LoginStatus = EnumLoginStatus.Error;
loginReponse.ReturnStatus = StatusCodes.Status403Forbidden;
loginReponse.ReturnMessage.Add(checkPwd ? "Login ID/Password is invalid." : "You are not Authorized to login into the System");
return StatusCode(StatusCodes.Status417ExpectationFailed, loginReponse);
string message = "Login ID/Password is invalid.\" : \"You are not Authorized to login into the System.";
return Unauthorized(MobileResponseBase<AppAuthUserResponse>.Failure(message, StatusCodes.Status403Forbidden));
}
if (loginReponse.LoginStatus == EnumLoginStatus.Unsuccessful)
{
loginReponse.LoginStatus = loginReponse.LoginStatus;
loginReponse.ReturnStatus = StatusCodes.Status403Forbidden;
loginReponse.ReturnMessage.Add(checkPwd ? $"Login ID/Password is invalid for {request.LoginId}." : "You are not Authorized to login into the System");
return StatusCode(StatusCodes.Status417ExpectationFailed, loginReponse);
string message = checkPwd ? $"Login ID/Password is invalid for {request.LoginId}." : "You are not Authorized to login into the System";
return Unauthorized(MobileResponseBase<AppAuthUserResponse>.Failure(message, StatusCodes.Status403Forbidden));
}
if (loginReponse.IsLocked)
{
loginReponse.LoginStatus = loginReponse.LoginStatus;
loginReponse.ReturnStatus = StatusCodes.Status403Forbidden;
loginReponse.ReturnMessage.Add($"Your Account is locked . Please try again after few minutes");
return StatusCode(StatusCodes.Status417ExpectationFailed, loginReponse);
string message =$"Your Account is locked . Please try again after few minutes";
return Unauthorized(MobileResponseBase<AppAuthUserResponse>.Failure(message, StatusCodes.Status403Forbidden));
}
if (!loginReponse.IsAuthorized )
{
loginReponse.LoginStatus = loginReponse.LoginStatus;
loginReponse.ReturnStatus = StatusCodes.Status403Forbidden;
loginReponse.ReturnMessage.Add("You are not Authorized to Login into the System, Please contact with System Administrator.");
return StatusCode(StatusCodes.Status417ExpectationFailed, loginReponse);
string message = $"You are not Authorized to Login into the System, Please contact with System Administrator.";
return Unauthorized(MobileResponseBase<AppAuthUserResponse>.Failure(message, StatusCodes.Status403Forbidden));
}
loginReponse.ReturnStatus = StatusCodes.Status200OK;
string pwdSecretKey = GlobalFunctions.ConvertFromBase64String(_appSettings.PwdSecretKey);
string userPwd = Ease.NetCore.Utility.Global.CipherFunctions.EncryptByAES(privateKey: pwdSecretKey, publicKey: pwdSecretKey, data: request.Password);
byte[] key = Encoding.ASCII.GetBytes(_appSettings.JwtCryptoKey);
@ -168,29 +158,25 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
//because cookie can not store more than 4KB data and we are storing this token in cookie for authentication
if (userToken.Length >= 4096) //4Kb
{
loginReponse.LoginStatus = loginReponse.LoginStatus;
loginReponse.ReturnStatus = StatusCodes.Status431RequestHeaderFieldsTooLarge;
loginReponse.ReturnMessage.Add("Authentication Token is too large for cookie.");
return StatusCode(StatusCodes.Status431RequestHeaderFieldsTooLarge, loginReponse);
string message = $"Authentication Token is too large for cookie.";
return StatusCode(StatusCodes.Status431RequestHeaderFieldsTooLarge, MobileResponseBase<AppAuthUserResponse>.Failure(message, StatusCodes.Status431RequestHeaderFieldsTooLarge));
}
loginReponse.ReturnStatus = loginReponse.ReturnStatus;
loginReponse.ReturnMessage = loginReponse.ReturnMessage;
loginReponse.LoginId = loginReponse.LoginId;
loginReponse.AccessToken = userToken;
loginReponse.RefreshToken = refreshToken.RefreshToken;
loginReponse.AccessTokenExpiryTime = DateTime.UtcNow.AddHours(12);
loginReponse.RefreshTokenExpiryTime = refreshToken.ExpireTime;
return StatusCode(StatusCodes.Status200OK, loginReponse);
return Ok(MobileResponseBase<AppAuthUserResponse>.Success(loginReponse));
}
catch (Exception ex)
{
string msg = $"{request?.LoginId}~{ipAddress}";
_logger.LogError(exception: ex, message: msg);
loginReponse.ReturnStatus = StatusCodes.Status500InternalServerError;
loginReponse.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, loginReponse);
string mesgae= ex.InnerException != null ? ex.InnerException.Message : ex.Message;
return StatusCode(StatusCodes.Status500InternalServerError, MobileResponseBase<AppAuthUserResponse>.Failure(mesgae, StatusCodes.Status500InternalServerError));
}
}
@ -206,10 +192,10 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
[HttpPost("RefreshToken")]
[AllowAnonymous]
[IgnoreAntiforgeryToken]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IntegrationLoginResponse))]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(MobileRrefreshTokenResponse))]
public async Task<IActionResult> GetRefreshToken([FromBody] IntegrationRefreshTokenRequest request)
{
IntegrationRrefreshTokenResponse response = new();
MobileRrefreshTokenResponse response = new();
try
{
var userRefreshToken = await _refreshTokenService.GetUserByRefreshTokenAsync(request.RefreshToken);
@ -217,9 +203,7 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
{
string msg = $"Refresh Token is not active: {request?.RefreshToken}";
_logger.LogError(message: msg);
response.ReturnStatus = StatusCodes.Status401Unauthorized;
response.ReturnMessage.Add(msg);
return StatusCode(StatusCodes.Status401Unauthorized, response);
return Unauthorized( MobileResponseBase<AppAuthUserResponse>.Failure(msg, StatusCodes.Status401Unauthorized));
}
byte[] key = Encoding.ASCII.GetBytes(_appSettings.JwtCryptoKey);
@ -246,16 +230,13 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
response.AccessToken = userToken;
response.RefreshToken = refreshToken;
return StatusCode(StatusCodes.Status200OK, response);
return Ok(MobileResponseBase<MobileRrefreshTokenResponse>.Success(response));
}
catch (Exception ex)
{
string msg = $"{request?.RefreshToken}";
_logger.LogError(exception: ex, message: msg);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
return StatusCode(StatusCodes.Status500InternalServerError, MobileResponseBase<AppAuthUserResponse>.Failure(ex.InnerException != null ? ex.InnerException.Message : ex.Message, StatusCodes.Status500InternalServerError));
}
}
@ -279,19 +260,14 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
{
string ipAddress = Request.HttpContext.GetIpAddress();
response = await _service.LogoutAsync(request, ipAddress);
response.ReturnStatus = StatusCodes.Status200OK;
response.ReturnMessage.Add("Successfully Logout");
return StatusCode(StatusCodes.Status200OK, response);
return Ok(MobileResponseBase<AuthLogoutResponse>.Success(response, "Successfully Logout"));
}
catch (Exception ex)
{
string msg = $"Exception occur on logout {request?.LoginId}";
_logger.LogError(exception: ex, message: msg);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
return StatusCode(StatusCodes.Status500InternalServerError, MobileResponseBase<AppAuthUserResponse>.Failure(ex.InnerException != null ? ex.InnerException.Message : ex.Message, StatusCodes.Status500InternalServerError));
}
}
@ -315,19 +291,14 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
{
string ipAddress = Request.HttpContext.GetIpAddress();
response = await _service.ChangePasswordAsync(request, ipAddress);
response.ReturnStatus = StatusCodes.Status200OK;
response.ReturnMessage.Add("Successfully Changed the Password");
return StatusCode(StatusCodes.Status200OK, response);
return Ok(MobileResponseBase<AppChangePasswordResponse>.Success(response, "Successfully Changed the Password"));
}
catch (Exception ex)
{
string msg = $"Exception occur on logout {request?.LoginId}";
_logger.LogError(exception: ex, message: msg);
response.ReturnStatus = StatusCodes.Status500InternalServerError;
response.ReturnMessage.Add(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, response);
return StatusCode(StatusCodes.Status500InternalServerError, MobileResponseBase<AppAuthUserResponse>.Failure(ex.InnerException != null ? ex.InnerException.Message : ex.Message, StatusCodes.Status500InternalServerError));
}
}
}