Example #1
0
        public AiringStatusRoutes(
            IAiringService airingSvc,
            IStatusSerivce statusService,
            IQueueService queueService,
            Serilog.ILogger logger
            )
            : base("v1")
        {
            this.RequiresAuthentication();

            _statusService = statusService;

            #region "POST Operations"


            Post("/airingstatus/{airingid}", _ =>
            {
                // Verify that the user has permission to POST
                this.RequiresClaims(c => c.Type == HttpMethod.Post.Verb());

                var airingId = (string)_.airingid;

                try
                {
                    if (!airingSvc.IsAiringExists(airingId))
                    {
                        var airingErrorMessage = string.IsNullOrWhiteSpace(airingId) ?
                                                 "AiringId is required." : "Provided AiringId does not exists or expired.";

                        // Return's NOT found status if airing not exists in current collection.
                        return(Negotiate.WithModel(airingErrorMessage)
                               .WithStatusCode(!string.IsNullOrWhiteSpace(airingId) ? HttpStatusCode.NotFound : HttpStatusCode.BadRequest));
                    }

                    // Bind POST request to data contract
                    var request = this.Bind <VMAiringRequestModel.AiringStatusRequest>();

                    //Validates the airing status request
                    var validationResults = ValidateRequest(request);

                    if (validationResults.Any())
                    {
                        //returns validation results if there is any
                        return(Negotiate.WithModel(validationResults)
                               .WithStatusCode(HttpStatusCode.BadRequest));
                    }

                    var airing = airingSvc.GetBy(airingId, AiringCollection.CurrentCollection);


                    //Updates the airing status with the POST request
                    foreach (var status in request.Status)
                    {
                        airing.Status[status.Key] = status.Value;
                    }

                    //Set the user name who updates the status
                    airing.UserName = Context.User().UserName;

                    // get all active queues
                    var statusQueues = queueService.GetByStatus(true);

                    // Finally, persist the airing data
                    airingSvc.Save(airing, false, true);

                    //update the status notification
                    airingSvc.CreateNotificationForStatusChange(airing.AssetId, ResetDeliveryQueue(statusQueues, airing));

                    return(new { Result = "Successfully updated the airing status." });
                }
                catch (Exception e)
                {
                    logger.Error(e, "Failure ingesting status to airing. Airingid:{@airingId}", airingId);
                    throw;
                }
            });


            Post("/airingstatus/mediaId/{mediaid}", _ =>
            {
                // Verify that the user has permission to POST
                this.RequiresClaims(c => c.Type == HttpMethod.Post.Verb());

                var mediaId = (string)_.mediaid;

                if (string.IsNullOrWhiteSpace(mediaId))
                {
                    return(Negotiate.WithModel("MediaId is required.")
                           .WithStatusCode(HttpStatusCode.BadRequest));
                }

                var airingsByMediaId = airingSvc.GetByMediaId(mediaId);

                try
                {
                    // Bind POST request to data contract
                    var request = this.Bind <VMAiringRequestModel.AiringStatusRequest>();

                    //Validates the airing status request
                    var validationResults = ValidateRequest(request);

                    if (validationResults.Any())
                    {
                        //returns validation results if there is any
                        return(Negotiate.WithModel(validationResults)
                               .WithStatusCode(HttpStatusCode.BadRequest));
                    }

                    //Updates the airing status with the POST request

                    foreach (var airing in airingsByMediaId)
                    {
                        foreach (var status in request.Status)
                        {
                            airing.Status[status.Key] = status.Value;
                        }

                        //Set the user name who updates the status
                        airing.UserName = Context.User().UserName;

                        // get all active queues
                        var statusQueues = queueService.GetByStatus(true);

                        // Finally, persist the airing data
                        airingSvc.Save(airing, false, true);

                        //update the status notification
                        airingSvc.CreateNotificationForStatusChange(airing.AssetId, ResetDeliveryQueue(statusQueues, airing));

                        logger.Information("Successfully updated the airing status. AiringId : {AiringId}", airing.AssetId);
                    }

                    return(new { Result = "Successfully updated the airings status." });
                }
                catch (Exception e)
                {
                    logger.Error(e, "Failure ingesting status to airings by mediaid. Mediaid:{@mediaId}", mediaId);
                    throw;
                }
            });


            #endregion
        }
Example #2
0
 public StatusController(AppSettings appSettings, IStatusSerivce statusService)
 {
     this.appSettings   = appSettings;
     this.statusService = statusService;
 }