Ejemplo n.º 1
0
        public static async Task <List <OfferViewModel> > GetOffers(List <OfferViewModel> offersToGet)
        {
            var taskDictionary = new Dictionary <Guid, Task <IRestResponse <long> > >();
            var OPEKey         = OPE.CreateKeyString();
            var ope            = new OPE(OPEKey);

            foreach (var offer in offersToGet)
            {
                var query = new OfferQuery()
                {
                    Id  = offer.ProductId,
                    Key = OPEKey
                };
                var client  = new RestClient(offer.StoreApiUrl);
                var request = new RestRequest(_paths["offer"]);
                request.AddJsonBody(query);
                request.Method = Method.POST;
                var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(10));
                var task = client.ExecuteAsync <long>(request, cancellationTokenSource.Token);
                taskDictionary.Add(offer.ProductId, task);
            }
            await Task.WhenAll(taskDictionary.Values);

            taskDictionary
            .Where(t => !t.Value.IsFaulted && t.Value.Result.StatusCode == System.Net.HttpStatusCode.OK)
            .ToList()
            .ForEach(t =>
            {
                offersToGet.First(o => o.ProductId == t.Key).EncryptedPrice = t.Value.Result.Data;
                offersToGet.First(o => o.ProductId == t.Key).RealPrice      = ope.Decrypt(t.Value.Result.Data);
            });
            return(offersToGet);
        }
Ejemplo n.º 2
0
        public long GetOffer(OfferQuery query)
        {
            var ope            = new OPE(query.Key);
            var prod           = _db.Products.FirstOrDefault(p => p.Id == query.Id);
            var encryptedPrice = ope.Encrypt(Convert.ToInt32(Math.Ceiling(prod.Price)));

            return(encryptedPrice);
        }
Ejemplo n.º 3
0
        public static Product_Operation CreateOperate(OPE oPE)
        {
            Product_Operation per = null;

            switch (oPE)
            {
            case OPE.PLUS:
                per = new ConcreteProduct_Plus();
                break;

            case OPE.MINUS:
                per = new ConcreteProduct_Minus();
                break;

            case OPE.MULTIPLY:
                per = new ConcreteProduct_Multiply();
                break;

            case OPE.DIVIDE:
                per = new ConcreteProduct_Divide();
                break;
            }
            return(per);
        }
Ejemplo n.º 4
0
 public void Setup()
 {
     key = OPE.CreateKey(32);
     ope = new OPE(key);
     rng = new Random();
 }