public String Transaction(Models.TransferData data) { String message = ""; List <CSharp2nem.Model.Transfer.Mosaics.Mosaic> MosaicList = new List <CSharp2nem.Model.Transfer.Mosaics.Mosaic>(); var connection = new Connection(); connection.SetTestnet(); var mosaicClient = new NamespaceMosaicClient(connection); var mosaicResult = mosaicClient.BeginGetMosaicsOwned(data.Sender); var mosaicResponse = mosaicClient.EndGetMosaicsOwned(mosaicResult); foreach (var mosaic in mosaicResponse.Data) { if (mosaic.MosaicId.Name == "tfc") { MosaicList.Add(new CSharp2nem.Model.Transfer.Mosaics.Mosaic(mosaic.MosaicId.NamespaceId, mosaic.MosaicId.Name, (data.Amount * 10000))); } } var accountFactory = new PrivateKeyAccountClientFactory(connection); var accClient = accountFactory.FromPrivateKey(data.SenderPrivateKey); var transData = new TransferTransactionData() { Amount = 1000000, // amount should always be 1000000 micro xem when attaching mosaics as it acts as a multiplier. RecipientAddress = data.Receiver, ListOfMosaics = MosaicList }; try { accClient.BeginSendTransaction(body => { try { if (body.Ex != null) { throw body.Ex; } message = body.Content.Message; Debug.WriteLine(message); } catch (Exception e) { message = e.Message; } }, transData); } catch (Exception e) { message = e.Message; } Thread.Sleep(5000); //to make sure the message variable gets the content message before terminating return(message); }
public HttpResponseMessage TransferAmount(Models.TransferData transferData) { try { var currentUser = from d in db.MstUsers where d.AspNetUserId == User.Identity.GetUserId() select d; if (currentUser.Any()) { var source = from d in db.MstCards where d.CardNumber == currentUser.FirstOrDefault().MotherCardNumber select d; var destination = from d in db.MstCards where d.CardNumber == transferData.DestinationCardNumber select d; if (source.Any() && destination.Any()) { if (source.FirstOrDefault().Status.Equals("Disable")) { return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot transfer if the current source card or mother card is disabled.")); } else if (destination.FirstOrDefault().Status.Equals("Disable")) { return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot transfer if the current destination card is disabled.")); } else { Decimal sourceBalance = source.FirstOrDefault().Balance; if (sourceBalance >= transferData.Amount && source.FirstOrDefault().UserId == destination.FirstOrDefault().UserId) { Data.TrnLedger newLedgerSource = new Data.TrnLedger() { CardId = source.FirstOrDefault().Id, CardNumber = source.FirstOrDefault().CardNumber, LedgerDateTime = DateTime.Now, DebitAmount = 0, CreditAmount = transferData.Amount, Particulars = transferData.Particulars }; Data.TrnLedger newLedgerDestination = new Data.TrnLedger() { CardId = destination.FirstOrDefault().Id, CardNumber = destination.FirstOrDefault().CardNumber, LedgerDateTime = DateTime.Now, DebitAmount = transferData.Amount, CreditAmount = 0, Particulars = transferData.Particulars }; db.TrnLedgers.InsertOnSubmit(newLedgerSource); db.TrnLedgers.InsertOnSubmit(newLedgerDestination); db.SubmitChanges(); var updateSource = source.FirstOrDefault(); var updateDistination = destination.FirstOrDefault(); updateSource.Balance = source.FirstOrDefault().TrnLedgers.Any() ? source.FirstOrDefault().TrnLedgers.Sum(s => s.DebitAmount - s.CreditAmount) : 0; updateDistination.Balance = destination.FirstOrDefault().TrnLedgers.Any() ? destination.FirstOrDefault().TrnLedgers.Sum(d => d.DebitAmount - d.CreditAmount) : 0; db.SubmitChanges(); return(Request.CreateResponse(HttpStatusCode.OK)); } else { return(Request.CreateResponse(HttpStatusCode.BadRequest, "The source card balance should be greater than or equal to your destination card balance.")); } } } else { return(Request.CreateResponse(HttpStatusCode.NotFound, "Some cards are not found in the server.")); } } else { return(Request.CreateResponse(HttpStatusCode.BadRequest, "Sorry. No current user logged in.")); } } catch (Exception e) { Debug.WriteLine(e); return(Request.CreateResponse(HttpStatusCode.InternalServerError, "Something's went wrong from the server. " + e.Message)); } }
public HttpResponseMessage Post(Models.TransferData transferData) { Int32 creditId = 0; var source = from d in db.MstCards where d.CardNumber == transferData.SourceCardNumber select d; var destination = from d in db.MstCards where d.CardNumber == transferData.DestinationCardNumber select d; // Both cards must be enabled. if (source.Any() && destination.Any()) { if (source.FirstOrDefault().Status.Equals("Disable")) { return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot transfer if the current source card or mother card is disabled.")); } else if (destination.FirstOrDefault().Status.Equals("Disable")) { return(Request.CreateResponse(HttpStatusCode.BadRequest, "Cannot transfer if the current destination card is disabled.")); } else { decimal sourceBalance = 0; // Source Balance should be greater than the transferred amount. // The source card owner should be the same with the destination card owner. sourceBalance = source.FirstOrDefault().Balance; if (sourceBalance >= transferData.Amount && source.FirstOrDefault().UserId == destination.FirstOrDefault().UserId) { try { var s = source.FirstOrDefault(); var d = destination.FirstOrDefault(); DateTime timeStamp = DateTime.Now; Data.TrnLedger newLedger1 = new Data.TrnLedger() { CardId = s.Id, CardNumber = s.CardNumber, LedgerDateTime = timeStamp, DebitAmount = 0, CreditAmount = transferData.Amount, Particulars = transferData.Particulars }; Data.TrnLedger newLedger2 = new Data.TrnLedger() { CardId = d.Id, CardNumber = d.CardNumber, LedgerDateTime = timeStamp, DebitAmount = transferData.Amount, CreditAmount = 0, Particulars = transferData.Particulars }; db.TrnLedgers.InsertOnSubmit(newLedger1); db.TrnLedgers.InsertOnSubmit(newLedger2); db.SubmitChanges(); s.Balance = s.TrnLedgers.Sum(t => t.DebitAmount - t.CreditAmount); d.Balance = d.TrnLedgers.Sum(t => t.DebitAmount - t.CreditAmount); db.SubmitChanges(); creditId = newLedger1.Id; } catch (Exception e) { return(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent(e.ToString()) }); } } else { return(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("Invalid Card") }); } } return(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(creditId.ToString()) }); } else { return(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("Invalid Card") }); } }