public async Task <IActionResult> PutAsync(string packageId, [FromBody] RegisterPackage command)
        {
            if (ModelState.IsValid)
            {
                var package = await _packageRepo.GetPackageAsync(packageId);

                if (package != null)
                {
                    // Shipping Checklist for package and transport
                    bool packageIsIssued    = false;
                    bool transportIsChecked = false;
                    var  transports         = await _transportRepo.GetTransportsAsync(package.PackageId);

                    var transport = await _transportRepo.GetTransportAsync(command.Transport.TransportId);

                    // Update Package
                    // (NOTE: Only "ShippingStatus", "BarcodeNumber", "Delivered" and "Transport")
                    package.BarcodeNumber = command.BarcodeNumber;

                    // Check if "ShippingStatus" is "IN STOCK" and transport choice is not null
                    if (package.ShippingStatus == "IN STOCK" && command.Transport != null)
                    {
                        // (NOTE: If transport choice is in the available list of transports update the package
                        if (transports.Count() != 0 && transport != null && transports.Any(t => t == transport))
                        {
                            package.ShippingStatus = "ISSUE";
                            package.Delivered      = false;
                            package.Transport      = transport;

                            packageIsIssued    = true;
                            transportIsChecked = true;
                        }
                        else
                        {
                            return(NotFound());
                        }
                    }

                    await _packageRepo.UpdatePackageAsync();

                    if (packageIsIssued == true && transportIsChecked == true)
                    {
                        // Send Event
                        RegisterPackage   c = Mapper.Map <RegisterPackage>(package);
                        PackageRegistered e = Mapper.Map <PackageRegistered>(c);
                        await _messagePublisher.PublishMessageAsync(e.MessageType, e, "");

                        return(CreatedAtRoute("GetPackageById", new { packageId = package.PackageId }, package));
                    }
                }

                return(NotFound());
            }

            return(BadRequest());
        }
Beispiel #2
0
        private async Task <bool> HandlePackageOrdersAsync(PackageRegistered e)
        {
            Package package = Mapper.Map <Package>(e);

            using (var db = GetShippingDb())
            {
                try
                {
                    await db.Package.AddAsync(package);

                    await db.SaveChangesAsync();
                }
                catch (DbUpdateException)
                {
                    Console.WriteLine($"Skipped adding package with package id {e.PackageId}.");
                }
            }

            Console.WriteLine($"Package added: " + e.PackageId);
            return(true);
        }