Headless CMS and Content Managment Hub
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.
 
 
 
 
 

120 lines
3.8 KiB

// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschränkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using Squidex.Domain.Apps.Core.Apps;
using Squidex.Domain.Apps.Entities.Apps.Commands;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Translations;
using Squidex.Infrastructure.Validation;
namespace Squidex.Domain.Apps.Entities.Apps.Guards
{
public static class GuardAppLanguages
{
public static void CanAdd(AddLanguage command, IAppEntity app)
{
Guard.NotNull(command, nameof(command));
var languages = app.Languages;
Validate.It(e =>
{
var language = command.Language;
if (language == null)
{
e(Not.Defined(nameof(command.Language)), nameof(command.Language));
}
else if (languages.Contains(language))
{
e(T.Get("apps.languages.languageAlreadyAdded"));
}
});
}
public static void CanRemove(RemoveLanguage command, IAppEntity app)
{
Guard.NotNull(command, nameof(command));
var languages = app.Languages;
Validate.It(e =>
{
var language = command.Language;
if (language == null)
{
e(Not.Defined(nameof(command.Language)), nameof(command.Language));
}
else
{
EnsureConfigExists(languages, language);
if (languages.IsMaster(language))
{
e(T.Get("apps.languages.masterLanguageNotRemovable"));
}
}
});
}
public static void CanUpdate(UpdateLanguage command, IAppEntity app)
{
Guard.NotNull(command, nameof(command));
var languages = app.Languages;
Validate.It(e =>
{
var language = command.Language;
if (language == null)
{
e(Not.Defined(nameof(command.Language)), nameof(command.Language));
}
else
{
EnsureConfigExists(languages, language);
if (languages.IsMaster(language) || command.IsMaster)
{
if (command.IsOptional)
{
e(T.Get("apps.languages.masterLanguageNotOptional"), nameof(command.IsMaster));
}
if (command.Fallback?.Length > 0)
{
e(T.Get("apps.languages.masterLanguageNoFallbacks"), nameof(command.Fallback));
}
}
if (command.Fallback == null)
{
return;
}
foreach (var fallback in command.Fallback)
{
if (!languages.Contains(fallback))
{
e(T.Get("apps.languages.fallbackNotFound", new { fallback }), nameof(command.Fallback));
}
}
}
});
}
private static void EnsureConfigExists(LanguagesConfig languages, Language language)
{
if (!languages.Contains(language))
{
throw new DomainObjectNotFoundException(language);
}
}
}
}