public async Task <IActionResult> Register( [FromBody] CardLimitOptions options) { var result = await _limit.UpdateCardLimitAsync(options); if (result.Code != ResultCode.Success) { return(StatusCode(result.Code, result.Message)); } return(Json(result)); }
public async Task <Result <Limit> > RegisterCardLimitAsync(CardLimitOptions options) { // Validations done earlier decimal Balance = 0; if (options.TrsansactionType == CardTransactionType.CardPresent) { Balance = Constants.AmountLimits.CardPresent; } else if (options.TrsansactionType == CardTransactionType.ECommerce) { Balance = Constants.AmountLimits.ECommerce; } var limit = new Limit() { CardNumber = options.CardNumber, AvailableBalance = Balance, TrsansactionType = options.TrsansactionType, ReferenceDate = DateTime.Now.Date }; _dbContext.Add(limit); try { await _dbContext.SaveChangesAsync(); } catch (Exception) { return(new Result <Limit>() { Code = Constants.ResultCode.InternalServerError, Message = "Card limit could not be saved" }); } return(new Result <Limit>() { Code = Constants.ResultCode.Success, Data = limit }); }
public async Task <Result <Limit> > GetCardLimitAsync(CardLimitOptions options) { var result = await _cardService.CardExists(options.CardNumber); // Card not found if (result.Data == false) { return(new Result <Limit>() { Code = result.Code, Message = result.Message }); } var limit = _dbContext.Set <Limit>() .Where(l => l.CardNumber == options.CardNumber) .Where(l => l.TrsansactionType == options.TrsansactionType) .SingleOrDefault(); if (limit != null) { // limit found Check Date. if (limit.ReferenceDate.Date != DateTime.Now.Date) { // if older date assign to today and update options.ReferenceDate = DateTime.Now.Date; if (options.TrsansactionType == CardTransactionType.CardPresent) { options.AvailableBalance = Constants.AmountLimits.CardPresent - options.AvailableBalance; } else if (options.TrsansactionType == CardTransactionType.ECommerce) { options.AvailableBalance = Constants.AmountLimits.ECommerce - options.AvailableBalance; } var result2 = await UpdateCardLimitAsync(options); } return(new Result <Limit>() { Code = ResultCode.Success, Data = limit }); } else { // Register new limit var register = await RegisterCardLimitAsync(options); if (register.Code == ResultCode.Success) { return(new Result <Limit>() { Code = ResultCode.Success, Data = limit }); } else { return(new Result <Limit>() { Code = ResultCode.InternalServerError, Message = "Failed to create limit", Data = limit }); } } }
public async Task <Result <Limit> > UpdateCardLimitAsync(CardLimitOptions options) { decimal Balance = 0; var result = await _cardService.CardExists(options.CardNumber); // Card not found if (result.Data == false) { return(new Result <Limit>() { Code = result.Code, Message = result.Message }); } var limit = _dbContext.Set <Limit>() .Where(l => l.CardNumber == options.CardNumber) .Where(l => l.TrsansactionType == options.TrsansactionType) .Where(l => l.ReferenceDate.Date == DateTime.Now.Date) .SingleOrDefault(); if (limit != null) { var newlimit = new Limit() { CardNumber = options.CardNumber, AvailableBalance = limit.AvailableBalance - options.AvailableBalance, TrsansactionType = options.TrsansactionType, ReferenceDate = DateTime.Now.Date }; _dbContext.Update(limit); return(new Result <Limit>() { Code = ResultCode.Success, Data = newlimit }); } else { // Register new limit var register = await RegisterCardLimitAsync(options); if (register.Code == ResultCode.Success) { return(new Result <Limit>() { Code = ResultCode.Success, Data = limit }); } else { return(new Result <Limit>() { Code = ResultCode.InternalServerError, Message = "Failed to create limit", Data = limit }); } } }