From 19eabe22a9f8486f2273b623683ea78a9ae692e6 Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Wed, 1 Dec 2021 14:26:54 +0100 Subject: [PATCH] more apis --- .../Indexes/zero_Api_MailTemplates_Listing.cs | 21 +++++++++ zero.Api/Endpoints/Mails/MailModule.cs | 18 ++++++++ zero.Api/Endpoints/Mails/MailPermissions.cs | 29 ++++++++++++ .../Mails/MailTemplatesController.cs | 45 +++++++++++++++++++ zero.Api/Endpoints/Mails/Maps/MailBasic.cs | 6 +++ zero.Api/Endpoints/Mails/Maps/MailEdit.cs | 20 +++++++++ .../Endpoints/Mails/Maps/MailMapperProfile.cs | 44 ++++++++++++++++++ zero.Api/Endpoints/Mails/Maps/MailSave.cs | 20 +++++++++ .../Indexes/zero_Api_Translations_Listing.cs | 10 +++-- .../Maps/LanguageMapperProfile.cs | 33 ++++++++++++++ .../Translations/Maps/TranslationBasic.cs | 8 ++++ .../Translations/Maps/TranslationEdit.cs | 8 ++++ .../Translations/Maps/TranslationSave.cs | 8 ++++ .../Translations/TranslationModule.cs | 18 ++++++++ .../Translations/TranslationPermissions.cs | 29 ++++++++++++ .../Translations/TranslationsController.cs | 45 +++++++++++++++++++ .../Integrations/IntegrationsController.cs | 0 .../Modules_legacy/Links/LinksController.cs | 0 .../Mails/MailTemplatesController.cs | 0 .../Mails/zero_MailTemplates.cs | 0 .../Modules_legacy/Media/MediaController.cs | 0 .../Modules_legacy/Media/MediaEditModel.cs | 0 .../Media/MediaFolderController.cs | 0 .../Media/MediaFolderEditModel.cs | 0 .../Modules_legacy/Media/MediaListModel.cs | 0 .../Media/MediaListResultModel.cs | 0 .../Modules_legacy/Media/MediaTreeService.cs | 0 .../Modules_legacy/Pages/ModulesController.cs | 0 .../Modules_legacy/Pages/PagesController.cs | 0 .../Modules_legacy/Pages/_PagesController.cs | 0 .../Previews/PreviewController.cs | 0 .../RecycleBin/RecycleBinController.cs | 0 .../Security/AuthenticationController.cs | 0 .../Spaces/SpaceContentEditModel.cs | 0 .../Modules_legacy/Spaces/SpacePermissions.cs | 0 .../Modules_legacy/Spaces/SpacesController.cs | 0 .../Modules_legacy/Spaces/zero_Spaces.cs | 0 .../Modules_legacy/UI/SectionsController.cs | 0 .../Modules_legacy/UI/SettingsController.cs | 0 .../Modules_legacy/Users/UserEditModel.cs | 0 .../Modules_legacy/Users/UserListModel.cs | 0 .../Users/UserPasswordEditModel.cs | 0 .../Modules_legacy/Users/UserRoleEditModel.cs | 0 .../Modules_legacy/Users/UserRoleListModel.cs | 0 .../Users/UserRolesController.cs | 0 .../Modules_legacy/Users/UsersController.cs | 0 zero.Api/Plugin.cs | 12 +++-- zero.Api/Usings.cs | 1 + zero.Api/ZeroApiEntityStoreController.cs | 8 ++-- .../Blueprints/BlueprintController.cs | 25 ----------- .../Modules_legacy/Translations/Module.cs | 20 --------- .../Translations/TranslationEditModel.cs | 15 ------- .../Translations/TranslationListModel.cs | 13 ------ .../Translations/TranslationsController.cs | 24 ---------- zero.Core/Localization/TranslationStore.cs | 2 +- 55 files changed, 370 insertions(+), 112 deletions(-) create mode 100644 zero.Api/Endpoints/Mails/Indexes/zero_Api_MailTemplates_Listing.cs create mode 100644 zero.Api/Endpoints/Mails/MailModule.cs create mode 100644 zero.Api/Endpoints/Mails/MailPermissions.cs create mode 100644 zero.Api/Endpoints/Mails/MailTemplatesController.cs create mode 100644 zero.Api/Endpoints/Mails/Maps/MailBasic.cs create mode 100644 zero.Api/Endpoints/Mails/Maps/MailEdit.cs create mode 100644 zero.Api/Endpoints/Mails/Maps/MailMapperProfile.cs create mode 100644 zero.Api/Endpoints/Mails/Maps/MailSave.cs rename zero.Backoffice/Modules_legacy/Translations/zero_Backoffice_Translations.cs => zero.Api/Endpoints/Translations/Indexes/zero_Api_Translations_Listing.cs (64%) create mode 100644 zero.Api/Endpoints/Translations/Maps/LanguageMapperProfile.cs create mode 100644 zero.Api/Endpoints/Translations/Maps/TranslationBasic.cs create mode 100644 zero.Api/Endpoints/Translations/Maps/TranslationEdit.cs create mode 100644 zero.Api/Endpoints/Translations/Maps/TranslationSave.cs create mode 100644 zero.Api/Endpoints/Translations/TranslationModule.cs create mode 100644 zero.Api/Endpoints/Translations/TranslationPermissions.cs create mode 100644 zero.Api/Endpoints/Translations/TranslationsController.cs rename {zero.Backoffice => zero.Api}/Modules_legacy/Integrations/IntegrationsController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Links/LinksController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Mails/MailTemplatesController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Mails/zero_MailTemplates.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Media/MediaController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Media/MediaEditModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Media/MediaFolderController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Media/MediaFolderEditModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Media/MediaListModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Media/MediaListResultModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Media/MediaTreeService.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Pages/ModulesController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Pages/PagesController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Pages/_PagesController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Previews/PreviewController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/RecycleBin/RecycleBinController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Security/AuthenticationController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Spaces/SpaceContentEditModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Spaces/SpacePermissions.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Spaces/SpacesController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Spaces/zero_Spaces.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/UI/SectionsController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/UI/SettingsController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Users/UserEditModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Users/UserListModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Users/UserPasswordEditModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Users/UserRoleEditModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Users/UserRoleListModel.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Users/UserRolesController.cs (100%) rename {zero.Backoffice => zero.Api}/Modules_legacy/Users/UsersController.cs (100%) delete mode 100644 zero.Backoffice/Modules_legacy/Blueprints/BlueprintController.cs delete mode 100644 zero.Backoffice/Modules_legacy/Translations/Module.cs delete mode 100644 zero.Backoffice/Modules_legacy/Translations/TranslationEditModel.cs delete mode 100644 zero.Backoffice/Modules_legacy/Translations/TranslationListModel.cs delete mode 100644 zero.Backoffice/Modules_legacy/Translations/TranslationsController.cs diff --git a/zero.Api/Endpoints/Mails/Indexes/zero_Api_MailTemplates_Listing.cs b/zero.Api/Endpoints/Mails/Indexes/zero_Api_MailTemplates_Listing.cs new file mode 100644 index 00000000..a2a8d8e0 --- /dev/null +++ b/zero.Api/Endpoints/Mails/Indexes/zero_Api_MailTemplates_Listing.cs @@ -0,0 +1,21 @@ +using Raven.Client.Documents.Indexes; + +namespace zero.Api.Endpoints.Mails; + +public class zero_Api_MailTemplates_Listing : ZeroIndex +{ + protected override void Create() + { + Map = items => items.Select(item => new + { + item.Name, + item.Key, + item.Subject, + item.CreatedDate + }); + + Index(x => x.Name, FieldIndexing.Search); + Index(x => x.Key, FieldIndexing.Search); + Index(x => x.Subject, FieldIndexing.Search); + } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Mails/MailModule.cs b/zero.Api/Endpoints/Mails/MailModule.cs new file mode 100644 index 00000000..15d2fdb1 --- /dev/null +++ b/zero.Api/Endpoints/Mails/MailModule.cs @@ -0,0 +1,18 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace zero.Api.Endpoints.Mails; + +public class MailModule : ZeroModule +{ + public override void ConfigureServices(IServiceCollection services, IConfiguration configuration) + { + services.AddSingleton(); + services.AddSingleton(); + + services.Configure(opts => + { + opts.Indexes.Add(); + }); + } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Mails/MailPermissions.cs b/zero.Api/Endpoints/Mails/MailPermissions.cs new file mode 100644 index 00000000..86946f1b --- /dev/null +++ b/zero.Api/Endpoints/Mails/MailPermissions.cs @@ -0,0 +1,29 @@ +namespace zero.Api.Endpoints.Mails; + +public class MailPermissions : PermissionProvider +{ + public const string Create = "zero.settings.mail.create"; + public const string Read = "zero.settings.mail.read"; + public const string Update = "zero.settings.mail.update"; + public const string Delete = "zero.settings.mail.delete"; + + + public override Task Configure(IPermissionContext context) + { + if (!context.TryGetGroup(Constants.Permissions.Groups.Settings, out PermissionGroup group)) + { + group.Permissions.Add(new Permission("zero.settings.mail", "@settings.application.mails.name") + { + Children = new() + { + new(Create, "@permission.states.create"), + new(Read, "@permission.states.read"), + new(Update, "@permission.states.update"), + new(Delete, "@permission.states.delete") + } + }); + } + + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Mails/MailTemplatesController.cs b/zero.Api/Endpoints/Mails/MailTemplatesController.cs new file mode 100644 index 00000000..15cf894d --- /dev/null +++ b/zero.Api/Endpoints/Mails/MailTemplatesController.cs @@ -0,0 +1,45 @@ +using Microsoft.AspNetCore.Mvc; + +namespace zero.Api.Endpoints.Mails; + +public class MailTemplatesController : ZeroApiEntityStoreController +{ + public MailTemplatesController(IMailTemplatesStore store) : base(store) + { + + } + + + [HttpGet("empty")] + [ZeroAuthorize(MailPermissions.Create)] + public virtual Task> Empty() => EmptyModel(); + + + [HttpGet("{id}")] + [ZeroAuthorize(MailPermissions.Read)] + public virtual Task> Get(string id, string changeVector = null) => GetModel(id, changeVector); + + + [HttpGet("")] + [ZeroAuthorize(MailPermissions.Read)] + public virtual Task> Get([FromQuery] ListQuery query) + { + query.SearchFor(entity => entity.Name, entity => entity.Key, entity => entity.Subject); + return GetModels(query); + } + + + [HttpPost("")] + [ZeroAuthorize(MailPermissions.Create)] + public virtual Task> Create(MailSave saveModel) => CreateModel(saveModel); + + + [HttpPut("{id}")] + [ZeroAuthorize(MailPermissions.Update)] + public virtual Task> Update(string id, MailSave updateModel, [FromQuery] string changeToken = null) => UpdateModel(id, updateModel, changeToken); + + + [HttpDelete("{id}")] + [ZeroAuthorize(MailPermissions.Delete)] + public virtual Task> Delete(string id) => DeleteModel(id); +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Mails/Maps/MailBasic.cs b/zero.Api/Endpoints/Mails/Maps/MailBasic.cs new file mode 100644 index 00000000..875332ac --- /dev/null +++ b/zero.Api/Endpoints/Mails/Maps/MailBasic.cs @@ -0,0 +1,6 @@ +namespace zero.Api.Endpoints.Mails; + +public class MailBasic : BasicModel +{ + public string Subject { get; set; } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Mails/Maps/MailEdit.cs b/zero.Api/Endpoints/Mails/Maps/MailEdit.cs new file mode 100644 index 00000000..9161b9b1 --- /dev/null +++ b/zero.Api/Endpoints/Mails/Maps/MailEdit.cs @@ -0,0 +1,20 @@ +namespace zero.Api.Endpoints.Mails; + +public class MailEdit : DisplayModel +{ + public string SenderEmail { get; set; } + + public string SenderName { get; set; } + + public string RecipientEmail { get; set; } + + public string Cc { get; set; } + + public string Bcc { get; set; } + + public string Subject { get; set; } + + public string Body { get; set; } + + public string Preheader { get; set; } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Mails/Maps/MailMapperProfile.cs b/zero.Api/Endpoints/Mails/Maps/MailMapperProfile.cs new file mode 100644 index 00000000..6e357751 --- /dev/null +++ b/zero.Api/Endpoints/Mails/Maps/MailMapperProfile.cs @@ -0,0 +1,44 @@ +namespace zero.Api.Endpoints.Mails; + +public class MailMapperProfile : ZeroMapperProfile +{ + public override void Configure(IZeroMapper mapper) + { + mapper.Define((source, ctx) => new(), Map); + mapper.Define((source, ctx) => new(), Map); + mapper.Define((source, ctx) => new(), Map); + } + + + protected virtual void Map(MailTemplate source, MailBasic target, IZeroMapperContext ctx) + { + this.MapBasicData(source, target); + target.Subject = source.Subject; + } + + protected virtual void Map(MailTemplate source, MailEdit target, IZeroMapperContext ctx) + { + this.MapDisplayData(source, target); + target.Subject = source.Subject; + target.SenderEmail = source.SenderEmail; + target.SenderName = source.SenderName; + target.RecipientEmail = source.RecipientEmail; + target.Cc = source.Cc; + target.Bcc = source.Bcc; + target.Body = source.Body; + target.Preheader = source.Preheader; +} + + protected virtual void Map(MailSave source, MailTemplate target, IZeroMapperContext ctx) + { + this.MapSaveData(source, target); + target.Subject = source.Subject; + target.SenderEmail = source.SenderEmail; + target.SenderName = source.SenderName; + target.RecipientEmail = source.RecipientEmail; + target.Cc = source.Cc; + target.Bcc = source.Bcc; + target.Body = source.Body; + target.Preheader = source.Preheader; + } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Mails/Maps/MailSave.cs b/zero.Api/Endpoints/Mails/Maps/MailSave.cs new file mode 100644 index 00000000..c6df05ab --- /dev/null +++ b/zero.Api/Endpoints/Mails/Maps/MailSave.cs @@ -0,0 +1,20 @@ +namespace zero.Api.Endpoints.Mails; + +public class MailSave : SaveModel +{ + public string SenderEmail { get; set; } + + public string SenderName { get; set; } + + public string RecipientEmail { get; set; } + + public string Cc { get; set; } + + public string Bcc { get; set; } + + public string Subject { get; set; } + + public string Body { get; set; } + + public string Preheader { get; set; } +} \ No newline at end of file diff --git a/zero.Backoffice/Modules_legacy/Translations/zero_Backoffice_Translations.cs b/zero.Api/Endpoints/Translations/Indexes/zero_Api_Translations_Listing.cs similarity index 64% rename from zero.Backoffice/Modules_legacy/Translations/zero_Backoffice_Translations.cs rename to zero.Api/Endpoints/Translations/Indexes/zero_Api_Translations_Listing.cs index 192d045b..bc57fc6f 100644 --- a/zero.Backoffice/Modules_legacy/Translations/zero_Backoffice_Translations.cs +++ b/zero.Api/Endpoints/Translations/Indexes/zero_Api_Translations_Listing.cs @@ -1,19 +1,21 @@ using Raven.Client.Documents.Indexes; -namespace zero.Backoffice.Modules; +namespace zero.Api.Endpoints.Translations; -public class zero_Backoffice_Translations : ZeroIndex +public class zero_Api_Translations_Listing : ZeroIndex { protected override void Create() { Map = items => items.Select(item => new { - Key = item.Key, + Name = item.Name, Value = item.Value, + Key = item.Key, CreatedDate = item.CreatedDate }); + Index(x => x.Name, FieldIndexing.Search); Index(x => x.Key, FieldIndexing.Search); Index(x => x.Value, FieldIndexing.Search); } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Translations/Maps/LanguageMapperProfile.cs b/zero.Api/Endpoints/Translations/Maps/LanguageMapperProfile.cs new file mode 100644 index 00000000..c239f3ce --- /dev/null +++ b/zero.Api/Endpoints/Translations/Maps/LanguageMapperProfile.cs @@ -0,0 +1,33 @@ +namespace zero.Api.Endpoints.Translations; + +public class TranslationMapperProfile : ZeroMapperProfile +{ + public override void Configure(IZeroMapper mapper) + { + mapper.Define((source, ctx) => new(), Map); + mapper.Define((source, ctx) => new(), Map); + mapper.Define((source, ctx) => new(), Map); + } + + + protected virtual void Map(Translation source, TranslationBasic target, IZeroMapperContext ctx) + { + this.MapBasicData(source, target); + target.Value = source.Value; + target.Display = source.Display; + } + + protected virtual void Map(Translation source, TranslationEdit target, IZeroMapperContext ctx) + { + this.MapDisplayData(source, target); + target.Value = source.Value; + target.Display = source.Display; + } + + protected virtual void Map(TranslationSave source, Translation target, IZeroMapperContext ctx) + { + this.MapSaveData(source, target); + target.Value = source.Value; + target.Display = source.Display; + } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Translations/Maps/TranslationBasic.cs b/zero.Api/Endpoints/Translations/Maps/TranslationBasic.cs new file mode 100644 index 00000000..fa394ebd --- /dev/null +++ b/zero.Api/Endpoints/Translations/Maps/TranslationBasic.cs @@ -0,0 +1,8 @@ +namespace zero.Api.Endpoints.Translations; + +public class TranslationBasic : BasicModel +{ + public string Value { get; set; } + + public TranslationDisplay Display { get; set; } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Translations/Maps/TranslationEdit.cs b/zero.Api/Endpoints/Translations/Maps/TranslationEdit.cs new file mode 100644 index 00000000..2d542cdc --- /dev/null +++ b/zero.Api/Endpoints/Translations/Maps/TranslationEdit.cs @@ -0,0 +1,8 @@ +namespace zero.Api.Endpoints.Translations; + +public class TranslationEdit : DisplayModel +{ + public string Value { get; set; } + + public TranslationDisplay Display { get; set; } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Translations/Maps/TranslationSave.cs b/zero.Api/Endpoints/Translations/Maps/TranslationSave.cs new file mode 100644 index 00000000..f12409c0 --- /dev/null +++ b/zero.Api/Endpoints/Translations/Maps/TranslationSave.cs @@ -0,0 +1,8 @@ +namespace zero.Api.Endpoints.Translations; + +public class TranslationSave : SaveModel +{ + public string Value { get; set; } + + public TranslationDisplay Display { get; set; } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Translations/TranslationModule.cs b/zero.Api/Endpoints/Translations/TranslationModule.cs new file mode 100644 index 00000000..8f1eca80 --- /dev/null +++ b/zero.Api/Endpoints/Translations/TranslationModule.cs @@ -0,0 +1,18 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace zero.Api.Endpoints.Translations; + +public class TranslationModule : ZeroModule +{ + public override void ConfigureServices(IServiceCollection services, IConfiguration configuration) + { + services.AddSingleton(); + services.AddSingleton(); + + services.Configure(opts => + { + opts.Indexes.Add(); + }); + } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Translations/TranslationPermissions.cs b/zero.Api/Endpoints/Translations/TranslationPermissions.cs new file mode 100644 index 00000000..b69f763a --- /dev/null +++ b/zero.Api/Endpoints/Translations/TranslationPermissions.cs @@ -0,0 +1,29 @@ +namespace zero.Api.Endpoints.Translations; + +public class TranslationPermissions : PermissionProvider +{ + public const string Create = "zero.settings.translation.create"; + public const string Read = "zero.settings.translation.read"; + public const string Update = "zero.settings.translation.update"; + public const string Delete = "zero.settings.translation.delete"; + + + public override Task Configure(IPermissionContext context) + { + if (!context.TryGetGroup(Constants.Permissions.Groups.Settings, out PermissionGroup group)) + { + group.Permissions.Add(new Permission("zero.settings.translation", "@settings.application.translations.name") + { + Children = new() + { + new(Create, "@permission.states.create"), + new(Read, "@permission.states.read"), + new(Update, "@permission.states.update"), + new(Delete, "@permission.states.delete") + } + }); + } + + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/zero.Api/Endpoints/Translations/TranslationsController.cs b/zero.Api/Endpoints/Translations/TranslationsController.cs new file mode 100644 index 00000000..aa6d9991 --- /dev/null +++ b/zero.Api/Endpoints/Translations/TranslationsController.cs @@ -0,0 +1,45 @@ +using Microsoft.AspNetCore.Mvc; + +namespace zero.Api.Endpoints.Translations; + +public class TranslationsController : ZeroApiEntityStoreController +{ + public TranslationsController(ITranslationStore store) : base(store) + { + + } + + + [HttpGet("empty")] + [ZeroAuthorize(TranslationPermissions.Create)] + public virtual Task> Empty() => EmptyModel(); + + + [HttpGet("{id}")] + [ZeroAuthorize(TranslationPermissions.Read)] + public virtual Task> Get(string id, string changeVector = null) => GetModel(id, changeVector); + + + [HttpGet("")] + [ZeroAuthorize(TranslationPermissions.Read)] + public virtual Task> Get([FromQuery] ListQuery query) + { + query.SearchFor(x => x.Key, x => x.Value); + return GetModels(query); + } + + + [HttpPost("")] + [ZeroAuthorize(TranslationPermissions.Create)] + public virtual Task> Create(TranslationSave saveModel) => CreateModel(saveModel); + + + [HttpPut("{id}")] + [ZeroAuthorize(TranslationPermissions.Update)] + public virtual Task> Update(string id, TranslationSave updateModel, [FromQuery] string changeToken = null) => UpdateModel(id, updateModel, changeToken); + + + [HttpDelete("{id}")] + [ZeroAuthorize(TranslationPermissions.Delete)] + public virtual Task> Delete(string id) => DeleteModel(id); +} \ No newline at end of file diff --git a/zero.Backoffice/Modules_legacy/Integrations/IntegrationsController.cs b/zero.Api/Modules_legacy/Integrations/IntegrationsController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Integrations/IntegrationsController.cs rename to zero.Api/Modules_legacy/Integrations/IntegrationsController.cs diff --git a/zero.Backoffice/Modules_legacy/Links/LinksController.cs b/zero.Api/Modules_legacy/Links/LinksController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Links/LinksController.cs rename to zero.Api/Modules_legacy/Links/LinksController.cs diff --git a/zero.Backoffice/Modules_legacy/Mails/MailTemplatesController.cs b/zero.Api/Modules_legacy/Mails/MailTemplatesController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Mails/MailTemplatesController.cs rename to zero.Api/Modules_legacy/Mails/MailTemplatesController.cs diff --git a/zero.Backoffice/Modules_legacy/Mails/zero_MailTemplates.cs b/zero.Api/Modules_legacy/Mails/zero_MailTemplates.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Mails/zero_MailTemplates.cs rename to zero.Api/Modules_legacy/Mails/zero_MailTemplates.cs diff --git a/zero.Backoffice/Modules_legacy/Media/MediaController.cs b/zero.Api/Modules_legacy/Media/MediaController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Media/MediaController.cs rename to zero.Api/Modules_legacy/Media/MediaController.cs diff --git a/zero.Backoffice/Modules_legacy/Media/MediaEditModel.cs b/zero.Api/Modules_legacy/Media/MediaEditModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Media/MediaEditModel.cs rename to zero.Api/Modules_legacy/Media/MediaEditModel.cs diff --git a/zero.Backoffice/Modules_legacy/Media/MediaFolderController.cs b/zero.Api/Modules_legacy/Media/MediaFolderController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Media/MediaFolderController.cs rename to zero.Api/Modules_legacy/Media/MediaFolderController.cs diff --git a/zero.Backoffice/Modules_legacy/Media/MediaFolderEditModel.cs b/zero.Api/Modules_legacy/Media/MediaFolderEditModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Media/MediaFolderEditModel.cs rename to zero.Api/Modules_legacy/Media/MediaFolderEditModel.cs diff --git a/zero.Backoffice/Modules_legacy/Media/MediaListModel.cs b/zero.Api/Modules_legacy/Media/MediaListModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Media/MediaListModel.cs rename to zero.Api/Modules_legacy/Media/MediaListModel.cs diff --git a/zero.Backoffice/Modules_legacy/Media/MediaListResultModel.cs b/zero.Api/Modules_legacy/Media/MediaListResultModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Media/MediaListResultModel.cs rename to zero.Api/Modules_legacy/Media/MediaListResultModel.cs diff --git a/zero.Backoffice/Modules_legacy/Media/MediaTreeService.cs b/zero.Api/Modules_legacy/Media/MediaTreeService.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Media/MediaTreeService.cs rename to zero.Api/Modules_legacy/Media/MediaTreeService.cs diff --git a/zero.Backoffice/Modules_legacy/Pages/ModulesController.cs b/zero.Api/Modules_legacy/Pages/ModulesController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Pages/ModulesController.cs rename to zero.Api/Modules_legacy/Pages/ModulesController.cs diff --git a/zero.Backoffice/Modules_legacy/Pages/PagesController.cs b/zero.Api/Modules_legacy/Pages/PagesController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Pages/PagesController.cs rename to zero.Api/Modules_legacy/Pages/PagesController.cs diff --git a/zero.Backoffice/Modules_legacy/Pages/_PagesController.cs b/zero.Api/Modules_legacy/Pages/_PagesController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Pages/_PagesController.cs rename to zero.Api/Modules_legacy/Pages/_PagesController.cs diff --git a/zero.Backoffice/Modules_legacy/Previews/PreviewController.cs b/zero.Api/Modules_legacy/Previews/PreviewController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Previews/PreviewController.cs rename to zero.Api/Modules_legacy/Previews/PreviewController.cs diff --git a/zero.Backoffice/Modules_legacy/RecycleBin/RecycleBinController.cs b/zero.Api/Modules_legacy/RecycleBin/RecycleBinController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/RecycleBin/RecycleBinController.cs rename to zero.Api/Modules_legacy/RecycleBin/RecycleBinController.cs diff --git a/zero.Backoffice/Modules_legacy/Security/AuthenticationController.cs b/zero.Api/Modules_legacy/Security/AuthenticationController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Security/AuthenticationController.cs rename to zero.Api/Modules_legacy/Security/AuthenticationController.cs diff --git a/zero.Backoffice/Modules_legacy/Spaces/SpaceContentEditModel.cs b/zero.Api/Modules_legacy/Spaces/SpaceContentEditModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Spaces/SpaceContentEditModel.cs rename to zero.Api/Modules_legacy/Spaces/SpaceContentEditModel.cs diff --git a/zero.Backoffice/Modules_legacy/Spaces/SpacePermissions.cs b/zero.Api/Modules_legacy/Spaces/SpacePermissions.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Spaces/SpacePermissions.cs rename to zero.Api/Modules_legacy/Spaces/SpacePermissions.cs diff --git a/zero.Backoffice/Modules_legacy/Spaces/SpacesController.cs b/zero.Api/Modules_legacy/Spaces/SpacesController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Spaces/SpacesController.cs rename to zero.Api/Modules_legacy/Spaces/SpacesController.cs diff --git a/zero.Backoffice/Modules_legacy/Spaces/zero_Spaces.cs b/zero.Api/Modules_legacy/Spaces/zero_Spaces.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Spaces/zero_Spaces.cs rename to zero.Api/Modules_legacy/Spaces/zero_Spaces.cs diff --git a/zero.Backoffice/Modules_legacy/UI/SectionsController.cs b/zero.Api/Modules_legacy/UI/SectionsController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/UI/SectionsController.cs rename to zero.Api/Modules_legacy/UI/SectionsController.cs diff --git a/zero.Backoffice/Modules_legacy/UI/SettingsController.cs b/zero.Api/Modules_legacy/UI/SettingsController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/UI/SettingsController.cs rename to zero.Api/Modules_legacy/UI/SettingsController.cs diff --git a/zero.Backoffice/Modules_legacy/Users/UserEditModel.cs b/zero.Api/Modules_legacy/Users/UserEditModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Users/UserEditModel.cs rename to zero.Api/Modules_legacy/Users/UserEditModel.cs diff --git a/zero.Backoffice/Modules_legacy/Users/UserListModel.cs b/zero.Api/Modules_legacy/Users/UserListModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Users/UserListModel.cs rename to zero.Api/Modules_legacy/Users/UserListModel.cs diff --git a/zero.Backoffice/Modules_legacy/Users/UserPasswordEditModel.cs b/zero.Api/Modules_legacy/Users/UserPasswordEditModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Users/UserPasswordEditModel.cs rename to zero.Api/Modules_legacy/Users/UserPasswordEditModel.cs diff --git a/zero.Backoffice/Modules_legacy/Users/UserRoleEditModel.cs b/zero.Api/Modules_legacy/Users/UserRoleEditModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Users/UserRoleEditModel.cs rename to zero.Api/Modules_legacy/Users/UserRoleEditModel.cs diff --git a/zero.Backoffice/Modules_legacy/Users/UserRoleListModel.cs b/zero.Api/Modules_legacy/Users/UserRoleListModel.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Users/UserRoleListModel.cs rename to zero.Api/Modules_legacy/Users/UserRoleListModel.cs diff --git a/zero.Backoffice/Modules_legacy/Users/UserRolesController.cs b/zero.Api/Modules_legacy/Users/UserRolesController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Users/UserRolesController.cs rename to zero.Api/Modules_legacy/Users/UserRolesController.cs diff --git a/zero.Backoffice/Modules_legacy/Users/UsersController.cs b/zero.Api/Modules_legacy/Users/UsersController.cs similarity index 100% rename from zero.Backoffice/Modules_legacy/Users/UsersController.cs rename to zero.Api/Modules_legacy/Users/UsersController.cs diff --git a/zero.Api/Plugin.cs b/zero.Api/Plugin.cs index fa80efab..d77eada1 100644 --- a/zero.Api/Plugin.cs +++ b/zero.Api/Plugin.cs @@ -1,13 +1,9 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.ApplicationModels; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; -using zero.Api.Endpoints.Countries; -using zero.Api.Endpoints.Languages; -using zero.Api.Endpoints.Search; namespace zero.Api; @@ -30,9 +26,11 @@ public class ZeroApiPlugin : ZeroPlugin services.AddScoped(); ZeroModuleCollection.AddModule(services, configuration); - ZeroModuleCollection.AddModule(services, configuration); - ZeroModuleCollection.AddModule(services, configuration); - ZeroModuleCollection.AddModule(services, configuration); + ZeroModuleCollection.AddModule(services, configuration); + ZeroModuleCollection.AddModule(services, configuration); + ZeroModuleCollection.AddModule(services, configuration); + ZeroModuleCollection.AddModule(services, configuration); + ZeroModuleCollection.AddModule(services, configuration); PostConfigureServices?.Invoke(services, configuration); } diff --git a/zero.Api/Usings.cs b/zero.Api/Usings.cs index 10963cc8..f05e507a 100644 --- a/zero.Api/Usings.cs +++ b/zero.Api/Usings.cs @@ -16,6 +16,7 @@ global using zero.FileStorage; global using zero.Identity; global using zero.Localization; global using zero.Mapper; +global using zero.Mails; global using zero.Media; global using zero.Models; global using zero.Pages; diff --git a/zero.Api/ZeroApiEntityStoreController.cs b/zero.Api/ZeroApiEntityStoreController.cs index 83f1a00f..2d799520 100644 --- a/zero.Api/ZeroApiEntityStoreController.cs +++ b/zero.Api/ZeroApiEntityStoreController.cs @@ -78,13 +78,15 @@ public abstract class ZeroApiEntityStoreController : ZeroApiCont TModel model = Mapper.Map(saveModel); Result result = await Store.Create(model); + bool minimalResponse = Hints.ResponsePreference == ApiResponsePreference.Minimal; + if (result.IsSuccess) { - Result mappedResult = Mapper.Map(result); - return Created(GetAction(model), mappedResult); + Result mappedResult = Mapper.Map(result); + return Created(GetAction(model), minimalResponse ? null : mappedResult); } - if (Hints.ResponsePreference == ApiResponsePreference.Minimal) + if (minimalResponse) { return result.WithoutModel(); } diff --git a/zero.Backoffice/Modules_legacy/Blueprints/BlueprintController.cs b/zero.Backoffice/Modules_legacy/Blueprints/BlueprintController.cs deleted file mode 100644 index 6b2ac1a4..00000000 --- a/zero.Backoffice/Modules_legacy/Blueprints/BlueprintController.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using Raven.Client.Documents.Session; -using System.Threading.Tasks; -using zero.Core.Database; -using zero.Core.Entities; - -namespace zero.Web.Controllers -{ - public class BlueprintController : BackofficeController - { - IZeroStore Store; - - public BlueprintController(IZeroStore store) - { - Store = store; - } - - - public async Task GetById([FromQuery] string id) - { - IAsyncDocumentSession session = Store.Session(global: true); - return await session.LoadAsync(id); - } - } -} diff --git a/zero.Backoffice/Modules_legacy/Translations/Module.cs b/zero.Backoffice/Modules_legacy/Translations/Module.cs deleted file mode 100644 index 17ca36cd..00000000 --- a/zero.Backoffice/Modules_legacy/Translations/Module.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace zero.Backoffice.Modules; - -internal class TranslationsModule : ZeroModule -{ - /// - public override void Register(IZeroModuleConfiguration config) - { - config.Services.AddOptions().Bind(config.Configuration.GetSection(SearchOptions.KEY)); - config.Services.AddScoped(); - } - - - /// - public override void Configure(IZeroOptions options) - { - options.For().Indexes.Add(); - } -} \ No newline at end of file diff --git a/zero.Backoffice/Modules_legacy/Translations/TranslationEditModel.cs b/zero.Backoffice/Modules_legacy/Translations/TranslationEditModel.cs deleted file mode 100644 index 18e8eed8..00000000 --- a/zero.Backoffice/Modules_legacy/Translations/TranslationEditModel.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using zero.Core.Entities; - -namespace zero.Web.Models -{ - public class TranslationEditModel : ObsoleteEditModel - { - public string Key { get; set; } - - public string Value { get; set; } - - public TranslationDisplay Display { get; set; } - } -} diff --git a/zero.Backoffice/Modules_legacy/Translations/TranslationListModel.cs b/zero.Backoffice/Modules_legacy/Translations/TranslationListModel.cs deleted file mode 100644 index 63da43eb..00000000 --- a/zero.Backoffice/Modules_legacy/Translations/TranslationListModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; - -namespace zero.Web.Models -{ - public class TranslationListModel : ListModel - { - public string Key { get; set; } - - public string Value { get; set; } - - public DateTimeOffset CreatedDate { get; set; } - } -} diff --git a/zero.Backoffice/Modules_legacy/Translations/TranslationsController.cs b/zero.Backoffice/Modules_legacy/Translations/TranslationsController.cs deleted file mode 100644 index 234e7e3b..00000000 --- a/zero.Backoffice/Modules_legacy/Translations/TranslationsController.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using Raven.Client.Documents.Linq; -using System.Linq; -using System.Threading.Tasks; -using zero.Core.Collections; -using zero.Core.Database.Indexes; -using zero.Core.Entities; -using zero.Core.Identity; - -namespace zero.Web.Controllers -{ - [ZeroAuthorize(Permissions.Settings.Translations, PermissionsValue.Read)] - public class TranslationsController : ZeroBackofficeCollectionController - { - public TranslationsController(ITranslationsStore collection) : base(collection) { } - - public override async Task> GetByQuery([FromQuery] ListQuery query) - { - query.SearchFor(entity => entity.Key, entity => entity.Value); - query.OrderQuery = q => q.OrderByDescending(x => x.CreatedDate); - return await Collection.Load(query); - } - } -} diff --git a/zero.Core/Localization/TranslationStore.cs b/zero.Core/Localization/TranslationStore.cs index 7128c7c8..ff2557cf 100644 --- a/zero.Core/Localization/TranslationStore.cs +++ b/zero.Core/Localization/TranslationStore.cs @@ -16,7 +16,7 @@ public class TranslationStore : EntityStore, ITranslationStore protected override void ValidationRules(ZeroValidator validator) { - validator.RuleFor(x => x.Key).Length(2, 300).Unique(Context.Store); + validator.RuleFor(x => x.Key).NotEmpty().Length(2, 300).Unique(Context.Store); validator.RuleFor(x => x.Value).MaximumLength(10 * 1000); } }