// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschränkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System; using System.ComponentModel.DataAnnotations; using NodaTime; using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Entities.Rules; using Squidex.Infrastructure.Reflection; using Squidex.Web; namespace Squidex.Areas.Api.Controllers.Rules.Models { public sealed class RuleEventDto : Resource { /// /// The id of the event. /// public Guid Id { get; set; } /// /// The time when the event has been created. /// public Instant Created { get; set; } /// /// The description. /// [Required] public string Description { get; set; } /// /// The name of the event. /// [Required] public string EventName { get; set; } /// /// The last dump. /// public string LastDump { get; set; } /// /// The number of calls. /// public int NumCalls { get; set; } /// /// The next attempt. /// public Instant? NextAttempt { get; set; } /// /// The result of the event. /// public RuleResult Result { get; set; } /// /// The result of the job. /// public RuleJobResult JobResult { get; set; } public static RuleEventDto FromRuleEvent(IRuleEventEntity ruleEvent, ApiController controller, string app) { var result = new RuleEventDto(); SimpleMapper.Map(ruleEvent, result); SimpleMapper.Map(ruleEvent.Job, result); return result.CreateLinks(controller, app); } private RuleEventDto CreateLinks(ApiController controller, string app) { var values = new { app, id = Id }; AddPutLink("update", controller.Url(x => nameof(x.PutEvent), values)); if (NextAttempt.HasValue) { AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteEvent), values)); } return this; } } }