From 1a264523a0245a9fde31767097ee6ea804b3ba37 Mon Sep 17 00:00:00 2001 From: dibakor Date: Thu, 23 Jul 2026 15:13:45 +0600 Subject: [PATCH] implement password policy endpoints --- .../MobileApp/MobileMasterDataResponse.cs | 11 +++++ .../MobileApp/IMobileMasterDataService.cs | 1 + .../MobileApp/MobileMasterDataService.cs | 44 +++++++++++++++++++ .../Mobile/MobileMasterDataController.cs | 26 +++++++++++ 4 files changed, 82 insertions(+) diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Responses/MobileApp/MobileMasterDataResponse.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Responses/MobileApp/MobileMasterDataResponse.cs index 1fc30af..b728328 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Responses/MobileApp/MobileMasterDataResponse.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Responses/MobileApp/MobileMasterDataResponse.cs @@ -226,4 +226,15 @@ public class GetMaterialStockReponse public string PlantCode { get;set; } public string MaterialCode { get; set; } public decimal AvailableStock { get; set; } +} + +public class GetPasswordPolicyResponse +{ + public int MinLength { get; set; } + public int MaxLength { get; set; } + public int IsUppercase { get; set; } + public int IsLowercase { get; set; } + public int IsNumber { get; set; } + public int IsSpecialCharacter { get; set; } + public int PasswordLife { get; set; } } \ No newline at end of file diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Contracts/MobileApp/IMobileMasterDataService.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Contracts/MobileApp/IMobileMasterDataService.cs index f869c08..8f35966 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Contracts/MobileApp/IMobileMasterDataService.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Contracts/MobileApp/IMobileMasterDataService.cs @@ -21,4 +21,5 @@ public interface IMobileMasterDataService Task> GetFOCsAsync(GetFOCRequest request); Task> GetFOCMaterialsAsync(GetFOCMaterialRequest request); Task> GetPaymentTermsAsync(GetPaymentTermRequest request); + Task GetPasswordPolicyAsync(); } diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/MobileMasterDataService.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/MobileMasterDataService.cs index 6c0ea06..d164392 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/MobileMasterDataService.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/MobileMasterDataService.cs @@ -981,5 +981,49 @@ public class MobileMasterDataService : IMobileMasterDataService return response; } + + public async Task GetPasswordPolicyAsync() + { + GetPasswordPolicyResponse response = new(); + try + { + using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode); + try + { + SqlParameter[] p =[]; + + using (IDataReader dr = await tc.ExecuteReaderSpAsync("dbo.GetPaymentTermsPaginated", parameterValues: p)) + { + if (dr.Read()) + { + new GetPasswordPolicyResponse() + { + MinLength = dr.GetInt32(0), + MaxLength = dr.GetInt32(1), + IsUppercase = dr.GetInt32(2), + IsLowercase = dr.GetInt32(3), + IsSpecialCharacter = dr.GetInt32(4), + IsNumber = dr.GetInt32(5), + PasswordLife = dr.GetInt32(6), + }; + } + dr.Close(); + } + tc.End(); + } + catch (Exception ie) + { + tc?.HandleError(); + + throw DBCustomError.GenerateCustomError(ie); + } + } + catch (Exception) + { + throw; + } + + return response; + } } diff --git a/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Mobile/MobileMasterDataController.cs b/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Mobile/MobileMasterDataController.cs index d51e0c9..cf85977 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Mobile/MobileMasterDataController.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Mobile/MobileMasterDataController.cs @@ -385,5 +385,31 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers return StatusCode(StatusCodes.Status500InternalServerError, MobileResponseBase.Failure(ex.InnerException != null ? ex.InnerException.Message : ex.Message, StatusCodes.Status500InternalServerError)); } } + + + /// + /// For PasswordPolicy + /// + /// + /// + /// If login successful Return Attendance List + [HttpGet("PasswordPolicy")] + [IgnoreAntiforgeryToken] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(GetPasswordPolicyResponse))] + public async Task GetPasswordPolicy() + { + GetPasswordPolicyResponse response = new(); + try + { + response = await _service.GetPasswordPolicyAsync(); + return Ok(MobileResponseBase.Success(response)); + } + catch (Exception ex) + { + string msg = $"Exception occur on Get PasswordPolicy endpoint "; + _logger.LogError(exception: ex, message: msg); + return StatusCode(StatusCodes.Status500InternalServerError, MobileResponseBase.Failure(ex.InnerException != null ? ex.InnerException.Message : ex.Message, StatusCodes.Status500InternalServerError)); + } + } } } \ No newline at end of file