public async Task <ActionResult> UpdateUserCardInfo([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 objUserCardInfoDetails = from uci in _appDbContext.UserCardInfo
                                             where (uci.Id == Convert.ToInt32(objJson.SelectToken("usercardinfoid")) && uci.UserId == strUserId)
                                             select uci;

                if (objUserCardInfoDetails.Count() <= 0)
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized, (new { Status = "Error", Error = "Card info doesn’t exist or Invalid User." })));
                }

                clsAppCrypt objclsAppCrypt = new clsAppCrypt(configuration);

                UserCardInfo objUserCardInfo = new UserCardInfo();
                objUserCardInfo.Id              = Convert.ToInt32(objJson.SelectToken("usercardinfoid"));
                objUserCardInfo.NameOnCard      = Convert.ToString(objJson.SelectToken("nameoncard"));
                objUserCardInfo.CardNumber      = objclsAppCrypt.EncryptTripleDES(Convert.ToString(objJson.SelectToken("cardnumber")));
                objUserCardInfo.ExpiryDate      = Convert.ToString(objJson.SelectToken("expirydate"));
                objUserCardInfo.CardType        = Convert.ToString(objJson.SelectToken("cardtype"));
                objUserCardInfo.Issuer          = Convert.ToString(objJson.SelectToken("issuer"));
                objUserCardInfo.SecurityNumber  = objclsAppCrypt.EncryptTripleDES(Convert.ToString(objJson.SelectToken("securitynumber")));
                objUserCardInfo.LastUpdatedDate = DateTime.UtcNow;

                _appDbContext.UserCardInfo.Attach(objUserCardInfo);
                _appDbContext.Entry(objUserCardInfo).Property("NameOnCard").IsModified      = true;
                _appDbContext.Entry(objUserCardInfo).Property("CardNumber").IsModified      = true;
                _appDbContext.Entry(objUserCardInfo).Property("ExpiryDate").IsModified      = true;
                _appDbContext.Entry(objUserCardInfo).Property("CardType").IsModified        = true;
                _appDbContext.Entry(objUserCardInfo).Property("Issuer").IsModified          = true;
                _appDbContext.Entry(objUserCardInfo).Property("SecurityNumber").IsModified  = true;
                _appDbContext.Entry(objUserCardInfo).Property("LastUpdatedDate").IsModified = true;
                int returnVal = await _appDbContext.SaveChangesAsync();

                if (returnVal > 0)
                {
                    return(Ok(new { Status = "OK", Detail = "Card Info Updated." }));
                }
                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 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 })));
            }
        }
        public async Task <ActionResult> AddUserCardInfo([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);

                UserCardInfo objUserCardInfo = new UserCardInfo();
                objUserCardInfo.UserId         = strUserId;
                objUserCardInfo.NameOnCard     = Convert.ToString(objJson.SelectToken("nameoncard"));
                objUserCardInfo.CardNumber     = objclsAppCrypt.EncryptTripleDES(Convert.ToString(objJson.SelectToken("cardnumber")));
                objUserCardInfo.ExpiryDate     = Convert.ToString(objJson.SelectToken("expirydate"));
                objUserCardInfo.CardType       = Convert.ToString(objJson.SelectToken("cardtype"));
                objUserCardInfo.Issuer         = Convert.ToString(objJson.SelectToken("issuer"));
                objUserCardInfo.SecurityNumber = objclsAppCrypt.EncryptTripleDES(Convert.ToString(objJson.SelectToken("securitynumber")));
                objUserCardInfo.AddedDate      = DateTime.UtcNow;
                await _appDbContext.UserCardInfo.AddAsync(objUserCardInfo);

                int returnVal = await _appDbContext.SaveChangesAsync();

                if (returnVal > 0)
                {
                    return(Ok(new { Status = "OK", Detail = "Card Info Added." }));
                }
                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 })));
            }
        }