using Business.Authentication; using Business.BalanceTransfer; using Business.Mobile; using Common; using Common.Model.BalanceTransfer; using JsonRx.AuthFilter; using log4net; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using System.Web.Http.ModelBinding; namespace JsonRx.Api { [RoutePrefix("api/v1")] public class BalanceTransferController : ApiController { private readonly IBalanceTransferBusiness _requestServices; private static readonly ILog Log = LogManager.GetLogger(typeof(BalanceTransferController)); public BalanceTransferController() { } /// /// /// /// /// public BalanceTransferController(IBalanceTransferBusiness requestServices) { _requestServices = requestServices; } /// /// This method is called to initiate balance transfer by the requester(Customer). It returns AES encrypted value ans SHA-1 checksum. /// /// /// /// [HttpPost] [TokenAuthentication] [Route("mobile/initBalanceTransfer")] public IHttpActionResult InitBalanceTransfer(InitBalanceTransfer initBalanceTransfer) { LogicalThreadContext.Properties[LoggerProperty.PROCESSID] = Guid.NewGuid(); LogicalThreadContext.Properties[LoggerProperty.CREATEDBY] = initBalanceTransfer.userId; LogicalThreadContext.Properties[LoggerProperty.METHODNAME] = "InitBalanceTransfer"; Log.Debug("User trying to initiate balance transfer." + JsonConvert.SerializeObject(initBalanceTransfer)); if (ModelState.IsValid) { var initBalanceTransferResponse = _requestServices.InitBalanceTransfer(initBalanceTransfer); return Ok(initBalanceTransferResponse); } return ModelValidationError(ModelState); } [HttpPost] [TokenAuthentication] [Route("mobile/confirmBalanceTransferRequest")] public IHttpActionResult ConfirmBalanceTransferRequest(ConfirmBalanceTransfer confirmBalanceTransfer) { LogicalThreadContext.Properties[LoggerProperty.PROCESSID] = Guid.NewGuid(); LogicalThreadContext.Properties[LoggerProperty.CREATEDBY] = confirmBalanceTransfer.userId; LogicalThreadContext.Properties[LoggerProperty.METHODNAME] = "ConfirmBalanceTransferRequest"; Log.Debug("User trying to confirm balance transfer." + JsonConvert.SerializeObject(confirmBalanceTransfer)); if (ModelState.IsValid) { var confirmBalanceTransferResponse = _requestServices.ConfirmBalanceTransfer(confirmBalanceTransfer); return Ok(confirmBalanceTransferResponse); } return ModelValidationError(ModelState); } [HttpPost] [TokenAuthentication] [Route("mobile/performBalanceTransferRequest")] public IHttpActionResult PerformBalanceTransferRequest(PerformBalanceTransfer performBalanceTransfer) { LogicalThreadContext.Properties[LoggerProperty.PROCESSID] = Guid.NewGuid(); LogicalThreadContext.Properties[LoggerProperty.CREATEDBY] = performBalanceTransfer.userId; LogicalThreadContext.Properties[LoggerProperty.METHODNAME] = "PerformBalanceTransferRequest"; Log.Debug("User trying to peroform balance transfer." + JsonConvert.SerializeObject(performBalanceTransfer)); if (ModelState.IsValid) { var performBalanceTransferResponse = _requestServices.PerformBalanceTransfer(performBalanceTransfer); return Ok(performBalanceTransferResponse); } return ModelValidationError(ModelState); } protected IHttpActionResult ModelValidationError(ModelStateDictionary modelState) { var modelErrors = modelState.Select(x => x.Value.Errors) .Where(y => y.Count > 0) .First()[0].ErrorMessage; JsonRxResponse jsonRx = new JsonRxResponse() { ErrorCode = "1", Msg = string.IsNullOrEmpty(modelErrors) ? "It seems like incorrect Json input(s)." : modelErrors, Data = "" }; return Ok(jsonRx); } } }