public ActionResult NotifyUserOnCardExpiry([FromBody] JObject objJson)
        {
            try
            {
                if (string.IsNullOrEmpty(Convert.ToString(Request.Headers["api_key"])))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                string strUserId = UserLoginSessionKeys.GetUserIdByApiKey(_appDbContext, Guid.Parse(Request.Headers["api_key"]));
                if (string.IsNullOrEmpty(strUserId))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                var objUserCardInfo = _appDbContext.UserCardInfo
                                      .Where(uci => uci.UserId == strUserId).ToList <UserCardInfo>();

                if (objUserCardInfo.Count() <= 0)
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Card info doesn’t exist." })));
                }

                clsAppCrypt objclsAppCrypt = new clsAppCrypt(configuration);

                List <UserCardInfo> lstExpiredCards = new List <UserCardInfo>();
                foreach (UserCardInfo objItem in objUserCardInfo)
                {
                    string[] strExpDateArr = objItem.ExpiryDate.Split("-");
                    if (strExpDateArr.Count() > 0)
                    {
                        int      lastDayOfMonth = DateTime.DaysInMonth(CultureInfo.CurrentCulture.Calendar.ToFourDigitYear(Convert.ToInt32(strExpDateArr[1])), Convert.ToInt32(strExpDateArr[0]));
                        DateTime dtCardExpDate  = new DateTime(CultureInfo.CurrentCulture.Calendar.ToFourDigitYear(Convert.ToInt32(strExpDateArr[1])), Convert.ToInt32(strExpDateArr[0]), lastDayOfMonth);
                        if (dtCardExpDate.AddDays(-Convert.ToInt32(objJson.SelectToken("remainingdays"))) < DateTime.UtcNow)
                        {
                            objItem.CardNumber     = objclsAppCrypt.DecryptTripleDES(objItem.CardNumber);
                            objItem.SecurityNumber = objclsAppCrypt.DecryptTripleDES(objItem.SecurityNumber);
                            lstExpiredCards.Add(objItem);
                            //return StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Your card is expired within " + Convert.ToString(objJson.SelectToken("remainingdays")) + " days." }));
                        }
                    }
                    else
                    {
                        return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support" })));
                    }
                }

                return(Ok(new { Status = "OK", UserExpiredCardInfo = lstExpiredCards }));
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support", SystemError = ex.Message })));
            }
        }
        public ActionResult CheckCardExpiry([FromBody] JObject objJson)
        {
            try
            {
                if (string.IsNullOrEmpty(Convert.ToString(Request.Headers["api_key"])))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                string strUserId = UserLoginSessionKeys.GetUserIdByApiKey(_appDbContext, Guid.Parse(Request.Headers["api_key"]));
                if (string.IsNullOrEmpty(strUserId))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                clsAppCrypt objclsAppCrypt = new clsAppCrypt(configuration);

                var objUserCardInfo = _appDbContext.UserCardInfo
                                      .Where(uci => uci.UserId == strUserId && objclsAppCrypt.DecryptTripleDES(uci.CardNumber).EndsWith(Convert.ToString(objJson.SelectToken("cardlast4digit"))))
                                      .OrderByDescending(t => t.Id).FirstOrDefault();

                if (objUserCardInfo == null)
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Card info doesn’t exist." })));
                }

                string[] strExpDateArr = objUserCardInfo.ExpiryDate.Split("-");
                if (strExpDateArr.Count() > 0)
                {
                    DateTime dtCardExpDate = new DateTime(CultureInfo.CurrentCulture.Calendar.ToFourDigitYear(Convert.ToInt32(strExpDateArr[1])), Convert.ToInt32(strExpDateArr[0]), 1);
                    if (dtCardExpDate.AddMonths(1) <= DateTime.UtcNow)
                    {
                        return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Your card is expired." })));
                    }
                    else
                    {
                        objUserCardInfo.CardNumber     = objclsAppCrypt.DecryptTripleDES(objUserCardInfo.CardNumber);
                        objUserCardInfo.SecurityNumber = objclsAppCrypt.DecryptTripleDES(objUserCardInfo.SecurityNumber);
                        return(Ok(new { Status = "OK", UserCardInfo = objUserCardInfo }));
                    }
                }
                else
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support" })));
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support", SystemError = ex.Message })));
            }
        }
        public ActionResult GetUserCardInfoByUserId()
        {
            try
            {
                if (string.IsNullOrEmpty(Convert.ToString(Request.Headers["api_key"])))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                string strUserId = UserLoginSessionKeys.GetUserIdByApiKey(_appDbContext, Guid.Parse(Request.Headers["api_key"]));
                if (string.IsNullOrEmpty(strUserId))
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Invalid ApiKey" })));
                }

                clsAppCrypt objclsAppCrypt = new clsAppCrypt(configuration);

                var objUserCardInfo = from uci in _appDbContext.UserCardInfo
                                      where uci.UserId == strUserId
                                      select new
                {
                    Id              = uci.Id,
                    UserId          = uci.UserId,
                    NameOnCard      = uci.NameOnCard,
                    CardNumber      = objclsAppCrypt.DecryptTripleDES(uci.CardNumber),
                    ExpiryDate      = uci.ExpiryDate,
                    CardType        = uci.CardType,
                    Issuer          = uci.Issuer,
                    SecurityNumber  = objclsAppCrypt.DecryptTripleDES(uci.SecurityNumber),
                    AddedDate       = uci.AddedDate,
                    LastUpdatedDate = uci.LastUpdatedDate
                };

                if (objUserCardInfo == null || objUserCardInfo.Count() <= 0)
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Card info doesn’t exist." })));
                }

                return(Ok(new { Status = "OK", UserCardInfo = objUserCardInfo }));
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, (new { Status = "Error", Error = "Internal Server error. Please contact customer support", SystemError = ex.Message })));
            }
        }