mirror of https://github.com/Squidex/squidex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
5.6 KiB
202 lines
5.6 KiB
// ==========================================================================
|
|
// Squidex Headless CMS
|
|
// ==========================================================================
|
|
// Copyright (c) Squidex UG (haftungsbeschränkt)
|
|
// All rights reserved. Licensed under the MIT license.
|
|
// ==========================================================================
|
|
|
|
using System.Runtime.Serialization;
|
|
using Squidex.Domain.Apps.Core.Apps;
|
|
using Squidex.Domain.Apps.Core.Contents;
|
|
using Squidex.Domain.Apps.Events;
|
|
using Squidex.Domain.Apps.Events.Apps;
|
|
using Squidex.Infrastructure.Dispatching;
|
|
using Squidex.Infrastructure.EventSourcing;
|
|
using Squidex.Infrastructure.Reflection;
|
|
using Squidex.Infrastructure.States;
|
|
|
|
#pragma warning disable IDE0060 // Remove unused parameter
|
|
|
|
namespace Squidex.Domain.Apps.Entities.Apps.State
|
|
{
|
|
[CollectionName("Apps")]
|
|
public class AppState : DomainObjectState<AppState>, IAppEntity
|
|
{
|
|
[DataMember]
|
|
public string Name { get; set; }
|
|
|
|
[DataMember]
|
|
public string Label { get; set; }
|
|
|
|
[DataMember]
|
|
public string Description { get; set; }
|
|
|
|
[DataMember]
|
|
public Roles Roles { get; set; } = Roles.Empty;
|
|
|
|
[DataMember]
|
|
public AppPlan Plan { get; set; }
|
|
|
|
[DataMember]
|
|
public AppImage Image { get; set; }
|
|
|
|
[DataMember]
|
|
public AppClients Clients { get; set; } = AppClients.Empty;
|
|
|
|
[DataMember]
|
|
public AppPatterns Patterns { get; set; } = AppPatterns.Empty;
|
|
|
|
[DataMember]
|
|
public AppContributors Contributors { get; set; } = AppContributors.Empty;
|
|
|
|
[DataMember]
|
|
public LanguagesConfig LanguagesConfig { get; set; } = LanguagesConfig.English;
|
|
|
|
[DataMember]
|
|
public Workflows Workflows { get; set; } = Workflows.Empty;
|
|
|
|
[DataMember]
|
|
public bool IsArchived { get; set; }
|
|
|
|
protected void On(AppCreated @event)
|
|
{
|
|
Roles = Roles.CreateDefaults(@event.Name);
|
|
|
|
SimpleMapper.Map(@event, this);
|
|
}
|
|
|
|
protected void On(AppUpdated @event)
|
|
{
|
|
SimpleMapper.Map(@event, this);
|
|
}
|
|
|
|
protected void On(AppImageUploaded @event)
|
|
{
|
|
Image = @event.Image;
|
|
}
|
|
|
|
protected void On(AppImageRemoved @event)
|
|
{
|
|
Image = null;
|
|
}
|
|
|
|
protected void On(AppPlanChanged @event)
|
|
{
|
|
Plan = AppPlan.Build(@event.Actor, @event.PlanId);
|
|
}
|
|
|
|
protected void On(AppPlanReset @event)
|
|
{
|
|
Plan = null;
|
|
}
|
|
|
|
protected void On(AppContributorAssigned @event)
|
|
{
|
|
Contributors = Contributors.Assign(@event.ContributorId, @event.Role);
|
|
}
|
|
|
|
protected void On(AppContributorRemoved @event)
|
|
{
|
|
Contributors = Contributors.Remove(@event.ContributorId);
|
|
}
|
|
|
|
protected void On(AppClientAttached @event)
|
|
{
|
|
Clients = Clients.Add(@event.Id, @event.Secret);
|
|
}
|
|
|
|
protected void On(AppClientUpdated @event)
|
|
{
|
|
Clients = Clients.Update(@event.Id, @event.Role);
|
|
}
|
|
|
|
protected void On(AppClientRenamed @event)
|
|
{
|
|
Clients = Clients.Rename(@event.Id, @event.Name);
|
|
}
|
|
|
|
protected void On(AppClientRevoked @event)
|
|
{
|
|
Clients = Clients.Revoke(@event.Id);
|
|
}
|
|
|
|
protected void On(AppWorkflowAdded @event)
|
|
{
|
|
Workflows = Workflows.Add(@event.WorkflowId, @event.Name);
|
|
}
|
|
|
|
protected void On(AppWorkflowUpdated @event)
|
|
{
|
|
Workflows = Workflows.Update(@event.WorkflowId, @event.Workflow);
|
|
}
|
|
|
|
protected void On(AppWorkflowDeleted @event)
|
|
{
|
|
Workflows = Workflows.Remove(@event.WorkflowId);
|
|
}
|
|
|
|
protected void On(AppPatternAdded @event)
|
|
{
|
|
Patterns = Patterns.Add(@event.PatternId, @event.Name, @event.Pattern, @event.Message);
|
|
}
|
|
|
|
protected void On(AppPatternDeleted @event)
|
|
{
|
|
Patterns = Patterns.Remove(@event.PatternId);
|
|
}
|
|
|
|
protected void On(AppPatternUpdated @event)
|
|
{
|
|
Patterns = Patterns.Update(@event.PatternId, @event.Name, @event.Pattern, @event.Message);
|
|
}
|
|
|
|
protected void On(AppRoleAdded @event)
|
|
{
|
|
Roles = Roles.Add(@event.Name);
|
|
}
|
|
|
|
protected void On(AppRoleDeleted @event)
|
|
{
|
|
Roles = Roles.Remove(@event.Name);
|
|
}
|
|
|
|
protected void On(AppRoleUpdated @event)
|
|
{
|
|
Roles = Roles.Update(@event.Name, @event.Permissions.Prefix(Name));
|
|
}
|
|
|
|
protected void On(AppLanguageAdded @event)
|
|
{
|
|
LanguagesConfig = LanguagesConfig.Set(@event.Language);
|
|
}
|
|
|
|
protected void On(AppLanguageRemoved @event)
|
|
{
|
|
LanguagesConfig = LanguagesConfig.Remove(@event.Language);
|
|
}
|
|
|
|
protected void On(AppLanguageUpdated @event)
|
|
{
|
|
LanguagesConfig = LanguagesConfig.Set(@event.Language, @event.IsOptional, @event.Fallback);
|
|
|
|
if (@event.IsMaster)
|
|
{
|
|
LanguagesConfig = LanguagesConfig.MakeMaster(@event.Language);
|
|
}
|
|
}
|
|
|
|
protected void On(AppArchived @event)
|
|
{
|
|
Plan = null;
|
|
|
|
IsArchived = true;
|
|
}
|
|
|
|
public override AppState Apply(Envelope<IEvent> @event)
|
|
{
|
|
var payload = (SquidexEvent)@event.Payload;
|
|
|
|
return Clone().Update(payload, @event.Headers, r => r.DispatchAction(payload));
|
|
}
|
|
}
|
|
}
|
|
|