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 }
public StatusController(AppSettings appSettings, IStatusSerivce statusService) { this.appSettings = appSettings; this.statusService = statusService; }