Ejemplo n.º 1
0
        private static void Main(string[] args)
        {
            var makePurchaseRequest = new MakePurchaseRequest(new PurchaseRequest
            {
                customerId = 1,
                productId  = 5,
                quantity   = 13
            });
            PurchaseOrchestrations_PurchaseOrchestartion_PurchasePort client =
                new PurchaseOrchestrations_PurchaseOrchestartion_PurchasePortClient("BasicHttpBinding_ITwoWayAsync");

            for (int i = 0; i < 10; i++)
            {
                var response = client.MakePurchase(makePurchaseRequest);
                Console.WriteLine(response.Error.Message);
            }

            Console.Read();
        }
Ejemplo n.º 2
0
        private static void Main(string[] args)
        {
            var makePurchaseRequest = new MakePurchaseRequest(new PurchaseRequest
                                                                  {
                                                                      customerId = 1,
                                                                      productId = 5,
                                                                      quantity = 13
                                                                  });
            PurchaseOrchestrations_PurchaseOrchestartion_PurchasePort client =
                new PurchaseOrchestrations_PurchaseOrchestartion_PurchasePortClient("BasicHttpBinding_ITwoWayAsync");
            for (int i = 0; i < 10; i++)
            {

                var response = client.MakePurchase(makePurchaseRequest);
                Console.WriteLine(response.Error.Message);
            }

            Console.Read();
        }
        public ActionResult <TicketsAndVouchersResponse> MakePurchase([FromBody] MakePurchaseRequest makePurchaseRequest)
        {
            byte[] data;
            using (MemoryStream memoryStream = new MemoryStream())
            {
                BinaryWriter binaryWriter = new BinaryWriter(memoryStream);

                using (MemoryStream memoryStream2 = new MemoryStream())
                {
                    BinaryWriter binaryWriter2 = new BinaryWriter(memoryStream2);
                    binaryWriter2.Write(makePurchaseRequest.PerformanceId);
                    byte[] array2 = memoryStream2.ToArray();
                    Array.Reverse(array2);
                    binaryWriter.Write(array2);
                }

                using (MemoryStream memStream3 = new MemoryStream())
                {
                    BinaryWriter binaryWriter3 = new BinaryWriter(memStream3);
                    binaryWriter3.Write(makePurchaseRequest.NumberOfTickets);
                    byte[] array3 = memStream3.ToArray();
                    Array.Reverse(array3);
                    binaryWriter.Write(array3);
                }

                String userId = makePurchaseRequest.UserId.ToString();
                binaryWriter.Write(userId.ToCharArray());
                data = memoryStream.ToArray();
            }

            using (UnitOfWork unitOfWork = new UnitOfWork(_context))
            {
                if (!_encryptionHelper.IsValidKey(data, makePurchaseRequest.Signature, makePurchaseRequest.UserId, unitOfWork))
                {
                    return(Forbid("Invalid Signature"));
                }

                // User
                User user = unitOfWork.Users.GetByGuid(makePurchaseRequest.UserId);
                if (user == null)
                {
                    return(NotFound("User"));
                }

                // Performance
                Performance performance = unitOfWork.Performances.Get(makePurchaseRequest.PerformanceId);
                if (performance == null)
                {
                    return(NotFound("Performance"));
                }

                // Purchase
                Purchase purchase = new Purchase
                {
                    User        = user,
                    Performance = performance,
                    PaidValue   = performance.Price * makePurchaseRequest.NumberOfTickets
                };

                unitOfWork.Purchases.Add(purchase);

                // Tickets
                Random ticketsRandom = new Random();
                int    max           = 101 - makePurchaseRequest.NumberOfTickets;
                max = (int)MathF.Max(max, 2);
                int seat = ticketsRandom.Next(1, max);

                for (int i = 0; i < makePurchaseRequest.NumberOfTickets; i++, seat++)
                {
                    Ticket ticket = new Ticket
                    {
                        Purchase    = purchase,
                        PlaceInRoom = seat,
                        Used        = false
                    };

                    unitOfWork.Tickets.Add(ticket);
                }

                // Vouchers
                Random vouchersRandom = new Random();
                for (int i = 0; i < makePurchaseRequest.NumberOfTickets; i++, seat++)
                {
                    int random = vouchersRandom.Next(2);

                    Voucher voucher = new Voucher
                    {
                        User = user,
                        Type = random == 1 ? "FreeCoffee" : "FreePopcorn"
                    };

                    unitOfWork.Vouchers.Add(voucher);
                }

                // Bonus Vouchers
                decimal currentSpending           = unitOfWork.Users.GetSpending(makePurchaseRequest.UserId);
                int     currentSpendingMultiplier = (int)currentSpending / BONUS_MULTIPLIER;

                decimal newSpending           = currentSpending + purchase.PaidValue;
                int     newSpendingMultiplier = (int)newSpending / BONUS_MULTIPLIER;

                int differenceMultiplier = newSpendingMultiplier - currentSpendingMultiplier;
                for (int i = 0; i < differenceMultiplier; i++)
                {
                    Voucher voucher = new Voucher
                    {
                        User = user,
                        Type = "5Cafeteria"
                    };

                    unitOfWork.Vouchers.Add(voucher);
                }

                // Saving
                try
                {
                    unitOfWork.Complete();
                }
                catch (Exception)
                {
                    return(StatusCode(500));
                }

                // Response
                TicketsAndVouchersResponse response = new TicketsAndVouchersResponse
                {
                    Tickets  = new List <TicketBE>(),
                    Vouchers = new List <VoucherBE>()
                };

                purchase.Tickets.ForEach(t =>
                {
                    response.Tickets.Add(new TicketBE
                    {
                        Id              = t.Id,
                        PerformanceId   = performance.Id,
                        PerformanceName = performance.Name,
                        PerformanceDate = performance.Date,
                        PlaceInRoom     = t.PlaceInRoom
                    });
                });

                user.Vouchers.ForEach(v =>
                {
                    response.Vouchers.Add(new VoucherBE
                    {
                        Id   = v.Id,
                        Type = v.Type
                    });
                });

                return(response);
            }
        }