Browse Source

Rules.

pull/282/head
Sebastian Stehle 8 years ago
parent
commit
2c1ceb961c
  1. 71
      src/Squidex/Areas/Api/Controllers/Rules/Models/Converters/RuleConverter.cs
  2. 18
      src/Squidex/Areas/Api/Controllers/Rules/Models/CreateRuleDto.cs
  3. 23
      src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs
  4. 11
      src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs
  5. 19
      src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventsDto.cs
  6. 20
      src/Squidex/Areas/Api/Controllers/Rules/Models/UpdateRuleDto.cs
  7. 30
      src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs
  8. 1
      src/Squidex/Areas/Api/Controllers/Schemas/Models/SchemaDetailsDto.cs

71
src/Squidex/Areas/Api/Controllers/Rules/Models/Converters/RuleConverter.cs

@ -1,71 +0,0 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschränkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using Squidex.Domain.Apps.Entities.Rules;
using Squidex.Domain.Apps.Entities.Rules.Commands;
using Squidex.Infrastructure.Reflection;
namespace Squidex.Areas.Api.Controllers.Rules.Models.Converters
{
public static class RuleConverter
{
public static RuleDto ToModel(this IRuleEntity entity)
{
var dto = new RuleDto();
SimpleMapper.Map(entity, dto);
SimpleMapper.Map(entity.RuleDef, dto);
if (entity.RuleDef.Trigger != null)
{
dto.Trigger = RuleTriggerDtoFactory.Create(entity.RuleDef.Trigger);
}
if (entity.RuleDef.Action != null)
{
dto.Action = RuleActionDtoFactory.Create(entity.RuleDef.Action);
}
return dto;
}
public static UpdateRule ToCommand(this UpdateRuleDto dto, Guid id)
{
var command = new UpdateRule { RuleId = id };
if (dto.Action != null)
{
command.Action = dto.Action.ToAction();
}
if (dto.Trigger != null)
{
command.Trigger = dto.Trigger.ToTrigger();
}
return command;
}
public static CreateRule ToCommand(this CreateRuleDto dto)
{
var command = new CreateRule();
if (dto.Action != null)
{
command.Action = dto.Action.ToAction();
}
if (dto.Trigger != null)
{
command.Trigger = dto.Trigger.ToTrigger();
}
return command;
}
}
}

18
src/Squidex/Areas/Api/Controllers/Rules/Models/CreateRuleDto.cs

@ -6,6 +6,7 @@
// ==========================================================================
using System.ComponentModel.DataAnnotations;
using Squidex.Domain.Apps.Entities.Rules.Commands;
namespace Squidex.Areas.Api.Controllers.Rules.Models
{
@ -22,5 +23,22 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
/// </summary>
[Required]
public RuleActionDto Action { get; set; }
public CreateRule ToCommand()
{
var command = new CreateRule();
if (Action != null)
{
command.Action = Action.ToAction();
}
if (Trigger != null)
{
command.Trigger = Trigger.ToTrigger();
}
return command;
}
}
}

23
src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs

@ -8,7 +8,10 @@
using System;
using System.ComponentModel.DataAnnotations;
using NodaTime;
using Squidex.Areas.Api.Controllers.Rules.Models.Converters;
using Squidex.Domain.Apps.Entities.Rules;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Reflection;
namespace Squidex.Areas.Api.Controllers.Rules.Models
{
@ -62,5 +65,25 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
/// Determines if the rule is enabled.
/// </summary>
public bool IsEnabled { get; set; }
public static RuleDto FromRule(IRuleEntity rule)
{
var response = new RuleDto();
SimpleMapper.Map(rule, response);
SimpleMapper.Map(rule.RuleDef, response);
if (rule.RuleDef.Trigger != null)
{
response.Trigger = RuleTriggerDtoFactory.Create(rule.RuleDef.Trigger);
}
if (rule.RuleDef.Action != null)
{
response.Action = RuleActionDtoFactory.Create(rule.RuleDef.Action);
}
return response;
}
}
}

11
src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs

@ -10,6 +10,7 @@ using System.ComponentModel.DataAnnotations;
using NodaTime;
using Squidex.Domain.Apps.Core.HandleRules;
using Squidex.Domain.Apps.Entities.Rules;
using Squidex.Infrastructure.Reflection;
namespace Squidex.Areas.Api.Controllers.Rules.Models
{
@ -61,5 +62,15 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
/// The result of the job.
/// </summary>
public RuleJobResult JobResult { get; set; }
public static RuleEventDto FromRuleEvent(IRuleEventEntity ruleEvent)
{
var response = new RuleEventDto();
SimpleMapper.Map(ruleEvent, response);
SimpleMapper.Map(ruleEvent.Job, response);
return response;
}
}
}

19
src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventsDto.cs

@ -5,18 +5,29 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Squidex.Domain.Apps.Entities.Rules;
namespace Squidex.Areas.Api.Controllers.Rules.Models
{
public sealed class RuleEventsDto
{
/// <summary>
/// The total number of rule events.
/// The rule events.
/// </summary>
public long Total { get; set; }
[Required]
public RuleEventDto[] Items { get; set; }
/// <summary>
/// The rule events.
/// The total number of rule events.
/// </summary>
public RuleEventDto[] Items { get; set; }
public long Total { get; set; }
public static RuleEventsDto FromRuleEvents(IReadOnlyList<IRuleEventEntity> items, long total)
{
return new RuleEventsDto { Total = total, Items = items.Select(RuleEventDto.FromRuleEvent).ToArray() };
}
}
}

20
src/Squidex/Areas/Api/Controllers/Rules/Models/UpdateRuleDto.cs

@ -5,6 +5,9 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using Squidex.Domain.Apps.Entities.Rules.Commands;
namespace Squidex.Areas.Api.Controllers.Rules.Models
{
public sealed class UpdateRuleDto
@ -18,5 +21,22 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
/// The action properties.
/// </summary>
public RuleActionDto Action { get; set; }
public UpdateRule ToCommand(Guid id)
{
var command = new UpdateRule { RuleId = id };
if (Action != null)
{
command.Action = Action.ToAction();
}
if (Trigger != null)
{
command.Trigger = Trigger.ToTrigger();
}
return command;
}
}
}

30
src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs

@ -12,12 +12,10 @@ using Microsoft.AspNetCore.Mvc;
using NodaTime;
using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Rules.Models;
using Squidex.Areas.Api.Controllers.Rules.Models.Converters;
using Squidex.Domain.Apps.Entities;
using Squidex.Domain.Apps.Entities.Rules.Commands;
using Squidex.Domain.Apps.Entities.Rules.Repositories;
using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Reflection;
using Squidex.Pipeline;
namespace Squidex.Areas.Api.Controllers.Rules
@ -58,9 +56,9 @@ namespace Squidex.Areas.Api.Controllers.Rules
[ApiCosts(1)]
public async Task<IActionResult> GetRules(string app)
{
var rules = await appProvider.GetRulesAsync(AppId);
var entities = await appProvider.GetRulesAsync(AppId);
var response = rules.Select(r => r.ToModel());
var response = entities.Select(RuleDto.FromRule);
return Ok(response);
}
@ -82,12 +80,10 @@ namespace Squidex.Areas.Api.Controllers.Rules
[ApiCosts(1)]
public async Task<IActionResult> PostRule(string app, [FromBody] CreateRuleDto request)
{
var command = request.ToCommand();
var context = await CommandBus.PublishAsync(command);
var context = await CommandBus.PublishAsync(request.ToCommand());
var result = context.Result<EntityCreatedResult<Guid>>();
var response = new EntityCreatedDto { Id = result.IdOrValue.ToString(), Version = result.Version };
var response = EntityCreatedDto.FromResult(result);
return CreatedAtAction(nameof(GetRules), new { app }, response);
}
@ -112,9 +108,7 @@ namespace Squidex.Areas.Api.Controllers.Rules
[ApiCosts(1)]
public async Task<IActionResult> PutRule(string app, Guid id, [FromBody] UpdateRuleDto request)
{
var command = request.ToCommand(id);
await CommandBus.PublishAsync(command);
await CommandBus.PublishAsync(request.ToCommand(id));
return NoContent();
}
@ -199,19 +193,7 @@ namespace Squidex.Areas.Api.Controllers.Rules
await Task.WhenAll(taskForItems, taskForCount);
var response = new RuleEventsDto
{
Total = taskForCount.Result,
Items = taskForItems.Result.Select(x =>
{
var itemModel = new RuleEventDto();
SimpleMapper.Map(x, itemModel);
SimpleMapper.Map(x.Job, itemModel);
return itemModel;
}).ToArray()
};
var response = RuleEventsDto.FromRuleEvents(taskForItems.Result, taskForCount.Result);
return Ok(response);
}

1
src/Squidex/Areas/Api/Controllers/Schemas/Models/SchemaDetailsDto.cs

@ -9,6 +9,7 @@ using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using NodaTime;
using Squidex.Areas.Api.Controllers.Schemas.Models.Converters;
using Squidex.Domain.Apps.Entities.Schemas;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Reflection;

Loading…
Cancel
Save