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 System.ComponentModel.DataAnnotations;
using Squidex.Domain.Apps.Entities.Rules.Commands;
namespace Squidex.Areas.Api.Controllers.Rules.Models namespace Squidex.Areas.Api.Controllers.Rules.Models
{ {
@ -22,5 +23,22 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
/// </summary> /// </summary>
[Required] [Required]
public RuleActionDto Action { get; set; } 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;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using NodaTime; using NodaTime;
using Squidex.Areas.Api.Controllers.Rules.Models.Converters;
using Squidex.Domain.Apps.Entities.Rules;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Reflection;
namespace Squidex.Areas.Api.Controllers.Rules.Models namespace Squidex.Areas.Api.Controllers.Rules.Models
{ {
@ -62,5 +65,25 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
/// Determines if the rule is enabled. /// Determines if the rule is enabled.
/// </summary> /// </summary>
public bool IsEnabled { get; set; } 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 NodaTime;
using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules;
using Squidex.Domain.Apps.Entities.Rules; using Squidex.Domain.Apps.Entities.Rules;
using Squidex.Infrastructure.Reflection;
namespace Squidex.Areas.Api.Controllers.Rules.Models namespace Squidex.Areas.Api.Controllers.Rules.Models
{ {
@ -61,5 +62,15 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
/// The result of the job. /// The result of the job.
/// </summary> /// </summary>
public RuleJobResult JobResult { get; set; } 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. // 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 namespace Squidex.Areas.Api.Controllers.Rules.Models
{ {
public sealed class RuleEventsDto public sealed class RuleEventsDto
{ {
/// <summary> /// <summary>
/// The total number of rule events. /// The rule events.
/// </summary> /// </summary>
public long Total { get; set; } [Required]
public RuleEventDto[] Items { get; set; }
/// <summary> /// <summary>
/// The rule events. /// The total number of rule events.
/// </summary> /// </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. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using System;
using Squidex.Domain.Apps.Entities.Rules.Commands;
namespace Squidex.Areas.Api.Controllers.Rules.Models namespace Squidex.Areas.Api.Controllers.Rules.Models
{ {
public sealed class UpdateRuleDto public sealed class UpdateRuleDto
@ -18,5 +21,22 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
/// The action properties. /// The action properties.
/// </summary> /// </summary>
public RuleActionDto Action { get; set; } 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 NodaTime;
using NSwag.Annotations; using NSwag.Annotations;
using Squidex.Areas.Api.Controllers.Rules.Models; 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;
using Squidex.Domain.Apps.Entities.Rules.Commands; using Squidex.Domain.Apps.Entities.Rules.Commands;
using Squidex.Domain.Apps.Entities.Rules.Repositories; using Squidex.Domain.Apps.Entities.Rules.Repositories;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Reflection;
using Squidex.Pipeline; using Squidex.Pipeline;
namespace Squidex.Areas.Api.Controllers.Rules namespace Squidex.Areas.Api.Controllers.Rules
@ -58,9 +56,9 @@ namespace Squidex.Areas.Api.Controllers.Rules
[ApiCosts(1)] [ApiCosts(1)]
public async Task<IActionResult> GetRules(string app) 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); return Ok(response);
} }
@ -82,12 +80,10 @@ namespace Squidex.Areas.Api.Controllers.Rules
[ApiCosts(1)] [ApiCosts(1)]
public async Task<IActionResult> PostRule(string app, [FromBody] CreateRuleDto request) public async Task<IActionResult> PostRule(string app, [FromBody] CreateRuleDto request)
{ {
var command = request.ToCommand(); var context = await CommandBus.PublishAsync(request.ToCommand());
var context = await CommandBus.PublishAsync(command);
var result = context.Result<EntityCreatedResult<Guid>>(); 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); return CreatedAtAction(nameof(GetRules), new { app }, response);
} }
@ -112,9 +108,7 @@ namespace Squidex.Areas.Api.Controllers.Rules
[ApiCosts(1)] [ApiCosts(1)]
public async Task<IActionResult> PutRule(string app, Guid id, [FromBody] UpdateRuleDto request) public async Task<IActionResult> PutRule(string app, Guid id, [FromBody] UpdateRuleDto request)
{ {
var command = request.ToCommand(id); await CommandBus.PublishAsync(request.ToCommand(id));
await CommandBus.PublishAsync(command);
return NoContent(); return NoContent();
} }
@ -199,19 +193,7 @@ namespace Squidex.Areas.Api.Controllers.Rules
await Task.WhenAll(taskForItems, taskForCount); await Task.WhenAll(taskForItems, taskForCount);
var response = new RuleEventsDto var response = RuleEventsDto.FromRuleEvents(taskForItems.Result, taskForCount.Result);
{
Total = taskForCount.Result,
Items = taskForItems.Result.Select(x =>
{
var itemModel = new RuleEventDto();
SimpleMapper.Map(x, itemModel);
SimpleMapper.Map(x.Job, itemModel);
return itemModel;
}).ToArray()
};
return Ok(response); 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.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using NodaTime; using NodaTime;
using Squidex.Areas.Api.Controllers.Schemas.Models.Converters;
using Squidex.Domain.Apps.Entities.Schemas; using Squidex.Domain.Apps.Entities.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.Reflection;

Loading…
Cancel
Save