static async Task PopuplateUserResponse(BitcornContext dbContext, SubRequest subRequest, SubscriptionResponse output, User user)
        {
            var selectableUser = new SelectableUser(user);
            var columns        = await UserReflection.GetColumns(dbContext, subRequest.Columns, new int[] {
                selectableUser.UserId
            });

            if (columns != null && columns.Count > 0)
            {
                foreach (var column in columns.First().Value)
                {
                    selectableUser.Add(column.Key, column.Value);
                }
            }


            output.User = selectableUser;
        }
        public async Task <ActionResult <SubResponse> > PostSub([FromBody] SubRequest request)
        {
            var validate = subValidator.Validate(request);

            if (!validate.IsValid)
            {
                return(BadRequest(new ErrorResponse("BadRequest", "Unable to process request", "400", validate.Errors)));
            }

            var parameters = mapper.Map <SubParams>(request);
            var operation  = GetOp <SubParams, IntResult>(nameof(SubService));
            var result     = await operation.Execute(parameters);

            logger.LogInformation($"PostSub executed");

            var resultResponse = this.mapper.Map <SubResponse>(result);

            return(resultResponse);
        }
Пример #3
0
        public void Sub(int[] numbers, string url)
        {
            string jsonRequest = "";

            Console.WriteLine($"Operacion: {string.Join("-", numbers)}");

            logger.Info(url);

            // Connects to the server and sends the request
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

            req.Method      = "POST";
            req.ContentType = "application/json";
            req.Headers.Add("X_Evi_Tracking_Id", "Test");

            using (StreamWriter sw = new StreamWriter(req.GetRequestStream()))
            {
                SubRequest sub = new SubRequest();
                sub.Nums    = numbers;
                jsonRequest = JsonConvert.SerializeObject(sub);
                sw.WriteLine(jsonRequest);
                sw.Close();
            }
            // Get the response
            string          resp;
            HttpWebResponse Response = (HttpWebResponse)req.GetResponse();

            using (StreamReader sr = new StreamReader(Response.GetResponseStream(), Encoding.UTF8))
            {
                //response = JsonConvert.DeserializeObject<AddResponse>(sr.ReadToEnd());
                resp = sr.ReadToEnd();
                sr.Close();
                Response.Close();
            }

            Console.WriteLine("The server responds: ");
            Console.WriteLine(resp);
            //Console.WriteLine($"{response.Operation} = {response.Total}");

            logger.Info($"The server responds: {resp}");
            logger.Info("-------------------------------------------------------------");
        }
Пример #4
0
        public static SubResult Sub(SubRequest subRequest, string trackingID)
        {
            SubResult subResult = new SubResult();

            try
            {
                subResult.Difference = subRequest.Minuend - subRequest.Subtrahend;
                string calculation = subRequest.Minuend.ToString() + "-" + subRequest.Subtrahend.ToString();
                //Si viene el header x-trackingID diferente de 0 se guarda el log
                if (Convert.ToInt32(trackingID) != 0)
                {
                    SaveLog(Convert.ToInt32(trackingID), "Sub", calculation, subResult.Difference);
                }
            }
            catch (Exception ex)
            {
                subResult.Difference = -1;
            }
            return(subResult);
        }
Пример #5
0
        public static string testSub()
        {
            // Request Test Object
            SubRequest request = new SubRequest();

            request.Minuend    = 2;
            request.Subtrahend = 7;

            // Response Test Object
            SubResponse response;

            // Calling service...
            HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(String.Format("{0}{1}", ENDPOINT, "sub"));

            Req.Method      = "POST";
            Req.ContentType = "application/json";

            Req.Headers.Add("X-Evi-Tracking-Id", "12345678");

            using (var streamWriter = new StreamWriter(Req.GetRequestStream()))
            {
                string json = JsonConvert.SerializeObject(request);

                streamWriter.Write(json);
                streamWriter.Flush();
                streamWriter.Close();
            }

            // Getting response...
            HttpWebResponse Resp = (HttpWebResponse)Req.GetResponse();

            StreamReader sr = new StreamReader(Resp.GetResponseStream(), Encoding.UTF8);

            string s = sr.ReadToEnd();

            sr.Close();
            Resp.Close();

            response = JsonConvert.DeserializeObject <SubResponse>(s);
            return(response.Difference.ToString());
        }
Пример #6
0
        public async Task Sub_GetsCorrectResponse()
        {
            var minuend    = 10;
            var subtrahend = 5;
            var expected   = minuend - subtrahend;
            var request    = new SubRequest
            {
                Minuend    = minuend,
                Subtrahend = subtrahend
            };
            var client = _factory.CreateClient();

            var response = await client.PostJsonAsync("/calculator/sub", request);

            using (new AssertionScope())
            {
                response.StatusCode.Should().Be(HttpStatusCode.OK);
                var responseObject = await response.GetResponse <SubResponse>();

                responseObject.Difference.Should().Equals(expected);
            }
        }
        public IActionResult Sub([FromBody] SubRequest subRequest)
        {
            Log.Debug("Sub");
            if (!ModelState.IsValid)
            {
                return(GetError(StatusCodes.Status400BadRequest));
            }

            try
            {
                var result = _mathService.Sub(subRequest.Minuend, subRequest.Sustraend, Request.GetHeader(CalculatorServiceConstants.EvilTrackingHeader));
                if (result.HasValue)
                {
                    return(Ok(new SubResponse(result.Value)));
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
            }

            return(GetError(StatusCodes.Status500InternalServerError));
        }
        public async Task <IActionResult> Sub([FromBody] SubRequest request)
        {
            var response = await _mediator.Send(request);

            return(Ok(response));
        }
Пример #9
0
 public static SubResult Sub(SubRequest subRequest, string tracking_ID)
 {
     return(CalculatorDL.Sub(subRequest, tracking_ID));
 }
Пример #10
0
        static async Task Main(string[] args)
        {
            var continueOp    = true;
            var justFirstTime = true;
            int?trackId       = null;
            var request       = default(object);

            while (continueOp)
            {
                if (justFirstTime)
                {
                    PrintInfo();
                    justFirstTime = false;
                }

                var trackIdText = trackId.HasValue ? $"(trackId = {trackId})" : "";
                Write($"operation {trackIdText} -> ");
                var op = ReadLine();

                switch (op.ToUpper())
                {
                case "R":
                    WriteLine("Reset traking Id", ConsoleColor.Cyan);
                    trackId = null;

                    break;

                case "U":
                    WriteLine("Using a traking Id", ConsoleColor.Cyan);
                    if (!TryInputInt("trackId", out int trackIdPased))
                    {
                        break;
                    }

                    if (trackIdPased <= 0)
                    {
                        WriteLine("The trackId should be positive");
                        break;
                    }
                    trackId = trackIdPased;

                    break;

                case "D":
                    WriteLine("Divide", ConsoleColor.Cyan);
                    if (!TryInputInt("dividend", out int dividend))
                    {
                        break;
                    }

                    if (!TryInputInt("divisor", out int divisor))
                    {
                        break;
                    }

                    request = new DivRequest()
                    {
                        Dividend = dividend, Divisor = divisor
                    };
                    await PostAndPrint("div", request, trackId);

                    break;

                case "M":
                    WriteLine("Multiplication", ConsoleColor.Cyan);
                    if (!TryInputListInt(out List <int> toSend))
                    {
                        break;
                    }

                    request = new MultRequest()
                    {
                        Factors = toSend
                    };
                    await PostAndPrint("mult", request, trackId);

                    break;

                case "Q":
                    WriteLine("Square", ConsoleColor.Cyan);
                    if (!TryInputInt("number", out int number))
                    {
                        break;
                    }
                    request = new SqrtRequest()
                    {
                        Number = number
                    };
                    await PostAndPrint("sqrt", request, trackId);

                    break;

                case "S":
                    WriteLine("Substract", ConsoleColor.Cyan);
                    if (!TryInputInt("minuend", out int minuend))
                    {
                        break;
                    }

                    if (!TryInputInt("subtrahend", out int subtrahend))
                    {
                        break;
                    }

                    request = new SubRequest()
                    {
                        Minuend = minuend, Subtrahend = subtrahend
                    };
                    await PostAndPrint("sub", request, trackId);

                    break;

                case "A":
                    WriteLine("Sum", ConsoleColor.Cyan);
                    if (!TryInputListInt(out toSend))
                    {
                        break;
                    }

                    request = new SumRequest()
                    {
                        Addends = toSend
                    };
                    await PostAndPrint("add", request, trackId);

                    break;

                case "G":
                    WriteLine("Query", ConsoleColor.Cyan);
                    if (!TryInputInt("trackId", out int trackIdToSend))
                    {
                        break;
                    }

                    request = new QueryRequest()
                    {
                        Id = trackIdToSend
                    };
                    await PostAndPrint("query", request, trackId);

                    break;

                case "O":
                    WriteLine("Operations", ConsoleColor.Cyan);
                    await GetAndPrint("operations");

                    break;

                case "E":
                    continueOp = false;

                    break;

                case "I":
                    PrintInfo();

                    break;

                default:
                    WriteLine("Invalid operation!", ConsoleColor.Red);

                    break;
                }
            }

            WriteLine("Bye :)");
        }
Пример #11
0
        internal static QuotaRequestDetailsData DeserializeQuotaRequestDetailsData(JsonElement element)
        {
            ResourceIdentifier                     id                = default;
            string                                 name              = default;
            ResourceType                           type              = default;
            SystemData                             systemData        = default;
            Optional <QuotaRequestState>           provisioningState = default;
            Optional <string>                      message           = default;
            Optional <DateTimeOffset>              requestSubmitTime = default;
            Optional <IReadOnlyList <SubRequest> > value             = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("id"))
                {
                    id = new ResourceIdentifier(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("name"))
                {
                    name = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("type"))
                {
                    type = new ResourceType(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("systemData"))
                {
                    systemData = JsonSerializer.Deserialize <SystemData>(property.Value.ToString());
                    continue;
                }
                if (property.NameEquals("properties"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.NameEquals("provisioningState"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            provisioningState = new QuotaRequestState(property0.Value.GetString());
                            continue;
                        }
                        if (property0.NameEquals("message"))
                        {
                            message = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("requestSubmitTime"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            requestSubmitTime = property0.Value.GetDateTimeOffset("O");
                            continue;
                        }
                        if (property0.NameEquals("value"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <SubRequest> array = new List <SubRequest>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(SubRequest.DeserializeSubRequest(item));
                            }
                            value = array;
                            continue;
                        }
                    }
                    continue;
                }
            }
            return(new QuotaRequestDetailsData(id, name, type, systemData, Optional.ToNullable(provisioningState), message.Value, Optional.ToNullable(requestSubmitTime), Optional.ToList(value)));
        }
Пример #12
0
        public void SendEmails()
        {
            var tag = CurrentDatabase.FetchOrCreateTag(Util.SessionId, Util.UserPeopleId, CurrentDatabase.NextTagId);

            CurrentDatabase.ExecuteCommand("delete TagPerson where Id = {0}", tag.Id);
            CurrentDatabase.TagAll(pids, tag);
            var dt = new DateTime(ticks);

            foreach (var id in pids)
            {
                var vr = new SubRequest
                {
                    AttendId     = attend.AttendId,
                    RequestorId  = person.PeopleId,
                    Requested    = dt,
                    SubstituteId = id,
                };
                attend.SubRequests.Add(vr);
            }
            CurrentDatabase.SubmitChanges();

            var qb = CurrentDatabase.ScratchPadCondition();

            qb.Reset();
            qb.AddNewClause(QueryType.HasMyTag, CompareType.Equal, $"{tag.Id},temp");
            attend.Commitment = CmsData.Codes.AttendCommitmentCode.FindSub;
            qb.Save(CurrentDatabase);

            var rurl       = CurrentDatabase.ServerLink($"/OnlineReg/VolSubReport/{attend.AttendId}/{person.PeopleId}/{dt.Ticks}");
            var reportlink = $@"<a href=""{rurl}"">Substitute Status Report</a>";
            var list       = CurrentDatabase.PeopleFromPidString(org.NotifyIds).ToList();

            //list.Insert(0, person);
            CurrentDatabase.Email(person.FromEmail, list,
                                  "Volunteer Substitute Commitment for " + org.OrganizationName,
                                  $@"
<p>{person.Name} has requested a substitute on {attend.MeetingDate:MMM d} at {attend.MeetingDate:h:mm tt}.</p>
<blockquote>
{reportlink}
</blockquote>");

            // Email subs
            var m = new MassEmailer(qb.Id);

            m.Subject = subject;
            m.Body    = message;

            m.FromName    = person.Name;
            m.FromAddress = person.FromEmail;

            var    eqid = m.CreateQueue(transactional: true).Id;
            string host = CurrentDatabase.Host;
            // save these from HttpContext to set again inside thread local storage
            var useremail         = Util.UserEmail;
            var isinroleemailtest = HttpContextFactory.Current.User.IsInRole("EmailTest");

            Log("Send Emails");

            HostingEnvironment.QueueBackgroundWorkItem(ct =>
            {
                try
                {
                    var db = CMSDataContext.Create(host);
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    db.SendPeopleEmail(eqid);
                }
                catch (Exception ex)
                {
                    Log("Email Error");
                    var ex2           = new Exception("Emailing error for queueid " + eqid, ex);
                    ErrorLog errorLog = ErrorLog.GetDefault(null);
                    errorLog.Log(new Error(ex2));

                    var db = CMSDataContext.Create(host);
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    var equeue             = db.EmailQueues.Single(ee => ee.Id == eqid);
                    equeue.Error           = ex.Message.Truncate(200);
                    db.SubmitChanges();
                }
            });
        }
Пример #13
0
        static void Main(string[] args)
        {
            int userInput = 0;

            do
            {
                userInput = DisplayMenu();
                Console.WriteLine();
                switch (userInput)
                {
                case 1:
                    Console.WriteLine("Suma");
                    Console.WriteLine("Ingrese los numeros separados por coma.");
                    string[] numbersAdd = Console.ReadLine().Split(',');
                    Console.WriteLine("Ingrese id Tracking-Id (opcional):");
                    string     EviTrackingIDAdd = Console.ReadLine();
                    AddRequest addRequest       = new AddRequest();
                    try
                    {
                        addRequest.Addends = Array.ConvertAll(numbersAdd, s => int.Parse(s));
                        Calculator.Add(addRequest, EviTrackingIDAdd);
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Hubo un error al ingresar los numeros");
                    }

                    break;

                case 2:
                    Console.WriteLine("Resta de 2 numeros");
                    Console.WriteLine("Ingrese primer numero(Minuendo):");
                    int Minuendo = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Ingrese segundo numero(Sustraendo):");
                    int Sustraendo = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Ingrese id Tracking-Id (opcional):");
                    string     EviTrackingID = Console.ReadLine();
                    SubRequest subRequest    = new SubRequest();
                    subRequest.Minuend    = Minuendo;
                    subRequest.Subtrahend = Sustraendo;
                    Calculator.Sub(subRequest, EviTrackingID);

                    break;

                case 3:
                    Console.WriteLine("Multiplicación");
                    Console.WriteLine("Ingrese los numeros separados por coma.");
                    string[] numbers = Console.ReadLine().Split(',');
                    Console.WriteLine("Ingrese id Tracking-Id (opcional):");
                    string      EviTrackingIDMult = Console.ReadLine();
                    MultRequest MultRequest       = new MultRequest();
                    try
                    {
                        MultRequest.Factors = Array.ConvertAll(numbers, s => int.Parse(s));
                        Calculator.Mult(MultRequest, EviTrackingIDMult);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Hubo un error al ingresar los numeros");
                    }


                    break;

                case 4:
                    Console.WriteLine("División");
                    Console.WriteLine("Ingrese primer numero(Dividendo):");
                    int Dividendo = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Ingrese segundo numero(Divisor):");
                    int Divisor = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Ingrese id Tracking-Id (opcional):");
                    string      EviTrackingIDDiv = Console.ReadLine();
                    DivtRequest divtRequest      = new DivtRequest();
                    divtRequest.Dividend = Dividendo;
                    divtRequest.Divisor  = Divisor;
                    Calculator.Div(divtRequest, EviTrackingIDDiv);
                    break;

                case 5:
                    Console.WriteLine("Raiz Cuadrada");
                    Console.WriteLine("Ingrese el numero:");
                    int number = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Ingrese id Tracking-Id (opcional):");
                    string      EviTrackingIDSqrt = Console.ReadLine();
                    SqrtRequest sqrtRequest       = new SqrtRequest();
                    sqrtRequest.Number = number;
                    Calculator.Sqrt(sqrtRequest, EviTrackingIDSqrt);
                    break;

                case 6:
                    Console.WriteLine("Consultar Logs");
                    Console.WriteLine("Ingrese el id.");
                    int id;
                    try
                    {
                        id = Convert.ToInt32(Console.ReadLine());
                        Calculator.Query(id);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Debe ingresar un valor valido: " + ex);
                    }

                    break;

                default:
                    break;
                }
            } while (userInput != 7);
        }
Пример #14
0
        public void SendEmails()
        {
            var tag = Db.FetchOrCreateTag(Util.SessionId, Util.UserPeopleId, Db.NextTagId);

            Db.ExecuteCommand("delete TagPerson where Id = {0}", tag.Id);
            Db.TagAll(pids, tag);
            var dt = new DateTime(ticks);

            foreach (var id in pids)
            {
                var vr = new SubRequest
                {
                    AttendId     = attend.AttendId,
                    RequestorId  = person.PeopleId,
                    Requested    = dt,
                    SubstituteId = id,
                };
                attend.SubRequests.Add(vr);
            }

            var qb = Db.ScratchPadCondition();

            qb.Reset(Db);
            qb.AddNewClause(QueryType.HasMyTag, CompareType.Equal, "{0},temp".Fmt(tag.Id));
            attend.Commitment = CmsData.Codes.AttendCommitmentCode.FindSub;
            qb.Save(DbUtil.Db);

            var rurl       = DbUtil.Db.ServerLink("/OnlineReg/VolSubReport/{0}/{1}/{2}".Fmt(attend.AttendId, person.PeopleId, dt.Ticks));
            var reportlink = @"<a href=""{0}"">Substitute Status Report</a>".Fmt(rurl);
            var list       = Db.PeopleFromPidString(org.NotifyIds).ToList();

            //list.Insert(0, person);
            Db.Email(person.FromEmail, list,
                     "Volunteer Substitute Commitment for " + org.OrganizationName,
                     @"
<p>{0} has requested a substitute on {1:MMM d} at {1:h:mm tt}.</p>
<blockquote>
{2}
</blockquote>".Fmt(person.Name, attend.MeetingDate, reportlink));

            // Email subs
            var m = new MassEmailer(qb.Id);

            m.Subject = subject;
            m.Body    = message;

            DbUtil.LogActivity("Emailing Vol Subs");
            m.FromName    = person.Name;
            m.FromAddress = person.FromEmail;

            var    eqid = m.CreateQueue(transactional: true).Id;
            string host = Util.Host;
            // save these from HttpContext to set again inside thread local storage
            var useremail         = Util.UserEmail;
            var isinroleemailtest = HttpContext.Current.User.IsInRole("EmailTest");

            TaskAlias.Factory.StartNew(() =>
            {
                Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
                try
                {
                    var db  = new CMSDataContext(Util.GetConnectionString(host));
                    db.Host = host;
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    db.SendPeopleEmail(eqid);
                }
                catch (Exception ex)
                {
                    var ex2           = new Exception("Emailing error for queueid " + eqid, ex);
                    ErrorLog errorLog = ErrorLog.GetDefault(null);
                    errorLog.Log(new Error(ex2));

                    var db  = new CMSDataContext(Util.GetConnectionString(host));
                    db.Host = host;
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    var equeue             = db.EmailQueues.Single(ee => ee.Id == eqid);
                    equeue.Error           = ex.Message.Truncate(200);
                    db.SubmitChanges();
                }
            });
        }
        private static async Task <SubscriptionResponse> ProcessSubscription(BitcornContext dbContext, SubscriptionResponse output, SubRequest subRequest, Subscription subInfo, SubscriptionTier requestedTierInfo, User user)
        {
            decimal cost = 0;

            //if tier usdt cost has been initialized, the corn cost has to be calculated
            if (requestedTierInfo.CostUsdt != null && requestedTierInfo.CostUsdt > 0)
            {
                cost = await CalculateUsdtToCornCost(dbContext, requestedTierInfo);
            }
            // check if cost is initialized properly
            else if (requestedTierInfo.CostCorn != null && requestedTierInfo.CostCorn > 0)
            {
                cost = requestedTierInfo.CostCorn.Value;
            }
            else
            {
                throw new ArgumentException($"Invalid cost setting on subscription tier id:{requestedTierInfo.SubscriptionId}");
            }
            //set the amount that will be removed from subscriber to the response object
            output.Cost = cost;
            //initialize array of existing subscriptions
            UserSubcriptionTierInfo[] existingSubscriptions = new UserSubcriptionTierInfo[0];
            if (user != null)
            {
                //set data to existing subscriptions array
                existingSubscriptions = await GetUserSubscriptions(dbContext, user)
                                        .Where(t => t.SubscriptionTier.SubscriptionId == subInfo.SubscriptionId).ToArrayAsync();
            }
            //initialize reference to existing subtierinfo
            UserSubcriptionTierInfo existingSubscription = null;
            //initialize current substate
            var subState = SubscriptionState.None;

            //if any subscriptions were found
            if (existingSubscriptions.Any())
            {
                //set existing subtierinfo
                existingSubscription = existingSubscriptions[0];
                //if sub has expired, set substate to expired
                if (subInfo.HasExpired(existingSubscription.UserSubscription))
                {
                    subState = SubscriptionState.Expired;
                }
                //if existing sub has not expired, but the tier is below, set subState to TierDown
                else if (existingSubscription.SubscriptionTier.Tier < requestedTierInfo.Tier)
                {
                    subState = SubscriptionState.TierDown;
                }
                //else, the user is subscribed
                else
                {
                    subState = SubscriptionState.Subscribed;
                }
            }
            //initialize reference to usersubscription & tx request
            UserSubscription sub       = null;
            TxRequest        txRequest = null;
            //if current user sub state is not subscribed & the client confirmed the cost to be equal to the cost amount, attempt to subscribe
            var costDiff = Math.Abs(subRequest.Amount - cost);

            if (subState != SubscriptionState.Subscribed && costDiff <= 100000)//subRequest.Amount == cost)
            {
                //initialize recipient of the transaction
                string[] to = new string[1];
                //default to bitcornhub if no subscription owner has been set
                int recipientId = TxUtils.BitcornHubPK;
                //if subscription owner is set, overwrite bitcornhub
                if (subInfo.OwnerUserId != null && subInfo.OwnerUserId > 0)
                {
                    recipientId = subInfo.OwnerUserId.Value;
                }

                to[0] = $"userid|{recipientId}";
                //initialize tx request
                txRequest = new TxRequest(user, cost, subRequest.Platform, "$sub", to);
                //prepare transaction for saving
                var processInfo = await TxUtils.ProcessRequest(txRequest, dbContext);

                var transactions = processInfo.Transactions;
                if (transactions != null && transactions.Length > 0)
                {
                    StringBuilder sql = new StringBuilder();
                    //check if transaction can be executed
                    if (processInfo.WriteTransactionOutput(sql))
                    {
                        //transaction is ready to be saved
                        switch (subState)
                        {
                        case SubscriptionState.None:
                            //user was previously not subscribed, create instance of usersubscription and point it to the user
                            sub = new UserSubscription();
                            sub.SubscriptionId     = subInfo.SubscriptionId;
                            sub.SubscriptionTierId = requestedTierInfo.SubscriptionTierId;
                            sub.UserId             = user.UserId;
                            sub.FirstSubDate       = DateTime.Now;
                            sub.SubCount           = 1;
                            dbContext.UserSubscription.Add(sub);
                            break;

                        case SubscriptionState.TierDown:
                        case SubscriptionState.Expired:
                            //previous subscription was found, update subscription tier
                            existingSubscription.UserSubscription.SubscriptionTierId = requestedTierInfo.SubscriptionTierId;
                            existingSubscription.UserSubscription.SubCount          += 1;
                            sub = existingSubscription.UserSubscription;
                            break;

                        default:
                            break;
                        }
                        //set subscription date to now
                        sub.LastSubDate = DateTime.Now;

                        await DbOperations.ExecuteSqlRawAsync(dbContext, sql.ToString());

                        await dbContext.SaveAsync(IsolationLevel.RepeatableRead);

                        //create subtx that will link user, corntx and usersubscription together
                        var subTx = new SubTx();
                        subTx.UserId             = user.UserId;
                        subTx.SubTxId            = transactions[0].TxId.Value;
                        subTx.UserSubscriptionId = sub.UserSubscriptionId;
                        dbContext.SubTx.Add(subTx);

                        //if user was not subscribed before, attempt to share the payment with a referrer
                        if (!await TrySharePaymentWithReferrer(dbContext, output, subRequest, subInfo, requestedTierInfo, user, recipientId, cost, subState, subTx))
                        {
                            await dbContext.SaveAsync();
                        }

                        subState = SubscriptionState.Subscribed;
                    }
                    //append receipt object with what client requested
                    await TxUtils.AppendTxs(transactions, dbContext, subRequest.Columns);

                    var tx = transactions[0];

                    output.TxId = tx.TxId;
                    output.User = tx.From;
                }
            }
            //couldn't process transaction
            if (txRequest == null)
            {
                //fill out response object
                await PopuplateUserResponse(dbContext, subRequest, output, user);

                if (existingSubscription != null)
                {
                    sub = existingSubscription.UserSubscription;
                }
            }

            if (subState == SubscriptionState.Subscribed && sub != null)
            {
                var end = output.SubscriptionEndTime = sub.LastSubDate.Value.AddDays(subInfo.Duration);
                //calculate days left
                output.DaysLeft = Math.Ceiling((end.Value - DateTime.Now).TotalDays);
                //setup sub info
                output.UserSubscriptionInfo = await GetUserSubscriptions(dbContext, user)
                                              .Where(t => t.SubscriptionTier.SubscriptionId == subInfo.SubscriptionId).FirstOrDefaultAsync();
            }
            return(output);
        }
        public static async Task <SubscriptionResponse> Subscribe(BitcornContext dbContext, User user, SubRequest subRequest)
        {
            try
            {
                //try to find subscription
                var subInfo = await dbContext.Subscription.FirstOrDefaultAsync(s => s.Name.ToLower() == subRequest.SubscriptionName.ToLower());

                //initialize response object
                var output = new SubscriptionResponse();
                if (subInfo != null)
                {
                    output.RequestedSubscriptionInfo = subInfo;
                    //try to find subscription tier info
                    var requestedTierInfo = await dbContext.SubscriptionTier.FirstOrDefaultAsync(t => t.SubscriptionId == subInfo.SubscriptionId && t.Tier == subRequest.Tier);

                    output.RequestedSubscriptionTier = requestedTierInfo;
                    //if tier was found, attempt to process the subscription
                    if (requestedTierInfo != null)
                    {
                        return(await ProcessSubscription(dbContext, output, subRequest, subInfo, requestedTierInfo, user));
                    }
                    else
                    {
                        //this subscription cannot be executed, fill out the response object
                        await PopuplateUserResponse(dbContext, subRequest, output, user);
                    }
                }
                else
                {
                    //this subscription cannot be executed, fill out the response object
                    await PopuplateUserResponse(dbContext, subRequest, output, user);
                }

                return(output);
            }
            catch (Exception e)
            {
                await BITCORNLogger.LogError(dbContext, e, null);

                throw e;
            }
        }
Пример #17
0
        static void Main(string[] args)
        {
            //this is the menu

            Console.WriteLine("¿quieres hacer un traking de las operaciones (s/n)?");
            var y = Console.ReadLine();

            if (y.Equals("s"))
            {
                Console.WriteLine("dime tu id");
                id = Console.ReadLine();
            }
            int i = -1;

            do
            {
                //type of operation
                Console.WriteLine("1. suma 2. resta 3.multi 4.dividir 5.raiz 6.journal 7.salir");

                //read an option
                i = leer();

                string operationUrl = url;
                switch (i)
                {
                case 1:
                    AddRequest add = new AddRequest();
                    operationUrl = url + "Sum";
                    add.Addends  = leerArray();
                    SendRequestAndReturnResponseWithTraking("Sum", operationUrl, add, id);
                    i = -1;
                    break;

                case 2:
                    SubRequest sub = new SubRequest();
                    operationUrl = url + "Diference";
                    Console.WriteLine("introduce Minuend");
                    sub.Minuend = leer();
                    Console.WriteLine("introduce Minuend");
                    sub.Subtrahend = leer();
                    SendRequestAndReturnResponseWithTraking("Diference", operationUrl, sub, id);
                    i = -1;

                    break;

                case 3:
                    MultRequest mult = new MultRequest();
                    operationUrl = url + "Product";
                    mult.Factors = leerArray();
                    SendRequestAndReturnResponseWithTraking("Product", operationUrl, mult, id);
                    i = -1;

                    break;

                case 4:
                    DivRequest div = new DivRequest();
                    operationUrl = url + "Div";
                    Console.WriteLine("introduce Dividend");
                    div.Dividend = leer();
                    Console.WriteLine("introduce Divisor");
                    div.Divisor = leer();
                    SendRequestAndReturnResponseWithTraking("Div", operationUrl, div, id);
                    i = -1;

                    break;

                case 5:
                    SqrtRequest sqrt = new SqrtRequest();
                    operationUrl = url + "Sqrt";
                    Console.WriteLine("intro num");
                    sqrt.Number = leer();
                    SendRequestAndReturnResponseWithTraking("Sqrt", operationUrl, sqrt, id);
                    i = -1;

                    break;

                case 6:
                    JournalRequest jour = new JournalRequest();
                    operationUrl = url + "Journal";
                    Console.WriteLine("dime id");
                    jour.id = Console.ReadLine();
                    SendRequestAndReturnResponseWithTraking("Journal", operationUrl, jour, id);
                    i = -1;
                    break;

                case 7:
                    Console.WriteLine("bye");
                    break;
                }
            } while (!(i > 0 && i < 8));
            Console.ReadLine();
        }