diff --git a/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs b/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs index af59c84ae..14c4ea1b6 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Net.Http.Headers; diff --git a/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs b/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs index e146c90b3..2cce25530 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs @@ -47,7 +47,7 @@ namespace Squidex.Areas.Api.Controllers.Apps [ApiCosts(0)] public IActionResult GetRoles(string app) { - var response = RolesDto.FromApp(App); + var response = RolesDto.FromApp(App, this); Response.Headers[HeaderNames.ETag] = App.Version.ToString(); @@ -82,20 +82,23 @@ namespace Squidex.Areas.Api.Controllers.Apps /// The name of the app. /// Role object that needs to be added to the app. /// - /// 200 => User assigned to app. + /// 201 => User assigned to app. /// 400 => Role name already in use. /// 404 => App not found. /// [HttpPost] [Route("apps/{app}/roles/")] + [ProducesResponseType(typeof(RolesDto), 200)] [ProducesResponseType(typeof(ErrorDto), 400)] [ApiPermission(Permissions.AppRolesCreate)] [ApiCosts(1)] public async Task PostRole(string app, [FromBody] AddRoleDto request) { - await CommandBus.PublishAsync(request.ToCommand()); + var command = request.ToCommand(); + + var response = await InvokeCommandAsync(command); - return NoContent(); + return CreatedAtAction(nameof(GetRoles), new { app }, response); } /// @@ -105,19 +108,22 @@ namespace Squidex.Areas.Api.Controllers.Apps /// The name of the role to be updated. /// Role to be updated for the app. /// - /// 204 => Role updated. + /// 200 => Role updated. /// 400 => Role request not valid. /// 404 => Role or app not found. /// [HttpPut] [Route("apps/{app}/roles/{role}/")] + [ProducesResponseType(typeof(RolesDto), 200)] [ApiPermission(Permissions.AppRolesUpdate)] [ApiCosts(1)] public async Task UpdateRole(string app, string role, [FromBody] UpdateRoleDto request) { - await CommandBus.PublishAsync(request.ToCommand(role)); + var command = request.ToCommand(role); + + var response = await InvokeCommandAsync(command); - return NoContent(); + return Ok(response); } /// @@ -126,20 +132,33 @@ namespace Squidex.Areas.Api.Controllers.Apps /// The name of the app. /// The name of the role. /// - /// 204 => Role deleted. + /// 200 => Role deleted. /// 400 => Role is in use by contributor or client or default role. /// 404 => Role or app not found. /// [HttpDelete] [Route("apps/{app}/roles/{role}/")] + [ProducesResponseType(typeof(RolesDto), 200)] [ProducesResponseType(typeof(ErrorDto), 400)] [ApiPermission(Permissions.AppRolesDelete)] [ApiCosts(1)] public async Task DeleteRole(string app, string role) { - await CommandBus.PublishAsync(new DeleteRole { Name = role }); + var command = new DeleteRole { Name = role }; + + var response = await InvokeCommandAsync(command); + + return Ok(response); + } + + private async Task InvokeCommandAsync(ICommand command) + { + var context = await CommandBus.PublishAsync(command); + + var result = context.Result(); + var response = RolesDto.FromApp(result, this); - return NoContent(); + return response; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs b/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs index 0cf66505f..688893497 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Net.Http.Headers; diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/AppDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/AppDto.cs index 13b726623..ad7a0d072 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/AppDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/AppDto.cs @@ -98,7 +98,7 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models result.PlanUpgrade = plans.GetPlanUpgradeForApp(app)?.Name; } - return CreateLinks(result, controller, permissions); + return result.CreateLinks(controller, permissions); } private static PermissionSet GetPermissions(IAppEntity app, string userId, PermissionSet userPermissions) @@ -118,73 +118,73 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models return new PermissionSet(permissions); } - private static AppDto CreateLinks(AppDto result, ApiController controller, PermissionSet permissions) + private AppDto CreateLinks(ApiController controller, PermissionSet permissions) { - var values = new { app = result.Name }; + var values = new { app = Name }; - result.AddGetLink("ping", controller.Url(x => nameof(x.GetAppPing), values)); + AddGetLink("ping", controller.Url(x => nameof(x.GetAppPing), values)); - if (controller.HasPermission(AllPermissions.AppDelete, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppDelete, Name, permissions: permissions)) { - result.AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteApp), values)); + AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteApp), values)); } - if (controller.HasPermission(AllPermissions.AppAssetsRead, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppAssetsRead, Name, permissions: permissions)) { - result.AddGetLink("assets", controller.Url(x => nameof(x.GetAssets), values)); + AddGetLink("assets", controller.Url(x => nameof(x.GetAssets), values)); } - if (controller.HasPermission(AllPermissions.AppBackupsRead, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppBackupsRead, Name, permissions: permissions)) { - result.AddGetLink("backups", controller.Url(x => nameof(x.GetBackups), values)); + AddGetLink("backups", controller.Url(x => nameof(x.GetBackups), values)); } - if (controller.HasPermission(AllPermissions.AppClientsRead, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppClientsRead, Name, permissions: permissions)) { - result.AddGetLink("clients", controller.Url(x => nameof(x.GetClients), values)); + AddGetLink("clients", controller.Url(x => nameof(x.GetClients), values)); } - if (controller.HasPermission(AllPermissions.AppContributorsRead, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppContributorsRead, Name, permissions: permissions)) { - result.AddGetLink("contributors", controller.Url(x => nameof(x.GetContributors), values)); + AddGetLink("contributors", controller.Url(x => nameof(x.GetContributors), values)); } - if (controller.HasPermission(AllPermissions.AppCommon, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppCommon, Name, permissions: permissions)) { - result.AddGetLink("languages", controller.Url(x => nameof(x.GetLanguages), values)); + AddGetLink("languages", controller.Url(x => nameof(x.GetLanguages), values)); } - if (controller.HasPermission(AllPermissions.AppCommon, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppCommon, Name, permissions: permissions)) { - result.AddGetLink("patterns", controller.Url(x => nameof(x.GetPatterns), values)); + AddGetLink("patterns", controller.Url(x => nameof(x.GetPatterns), values)); } - if (controller.HasPermission(AllPermissions.AppPlansRead, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppPlansRead, Name, permissions: permissions)) { - result.AddGetLink("plans", controller.Url(x => nameof(x.GetPlans), values)); + AddGetLink("plans", controller.Url(x => nameof(x.GetPlans), values)); } - if (controller.HasPermission(AllPermissions.AppRolesRead, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppRolesRead, Name, permissions: permissions)) { - result.AddGetLink("roles", controller.Url(x => nameof(x.GetRoles), values)); + AddGetLink("roles", controller.Url(x => nameof(x.GetRoles), values)); } - if (controller.HasPermission(AllPermissions.AppRulesRead, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppRulesRead, Name, permissions: permissions)) { - result.AddGetLink("rules", controller.Url(x => nameof(x.GetRules), values)); + AddGetLink("rules", controller.Url(x => nameof(x.GetRules), values)); } - if (controller.HasPermission(AllPermissions.AppCommon, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppCommon, Name, permissions: permissions)) { - result.AddGetLink("schemas", controller.Url(x => nameof(x.GetSchemas), values)); + AddGetLink("schemas", controller.Url(x => nameof(x.GetSchemas), values)); } - if (controller.HasPermission(AllPermissions.AppSchemasCreate, result.Name, permissions: permissions)) + if (controller.HasPermission(AllPermissions.AppSchemasCreate, Name, permissions: permissions)) { - result.AddPostLink("schemas/create", controller.Url(x => nameof(x.PostSchema), values)); + AddPostLink("schemas/create", controller.Url(x => nameof(x.PostSchema), values)); } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguageDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguageDto.cs index 4ac3d8ad7..85f6ef7ce 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguageDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguageDto.cs @@ -56,27 +56,27 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models Fallback = language.LanguageFallbacks.ToArray() }); - return CreateLinks(result, controller, app); + return result.CreateLinks(controller, app); } - private static AppLanguageDto CreateLinks(AppLanguageDto result, ApiController controller, IAppEntity app) + private AppLanguageDto CreateLinks(ApiController controller, IAppEntity app) { - var values = new { app = app.Name, language = result.Iso2Code }; + var values = new { app = app.Name, language = Iso2Code }; - if (!result.IsMaster) + if (!IsMaster) { if (controller.HasPermission(Permissions.AppLanguagesUpdate, app.Name)) { - result.AddPutLink("update", controller.Url(x => nameof(x.PutLanguage), values)); + AddPutLink("update", controller.Url(x => nameof(x.PutLanguage), values)); } if (controller.HasPermission(Permissions.AppLanguagesDelete, app.Name) && app.LanguagesConfig.Count > 1) { - result.AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteLanguage), values)); + AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteLanguage), values)); } } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguagesDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguagesDto.cs index 250408598..77580f5e9 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguagesDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/AppLanguagesDto.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.ComponentModel.DataAnnotations; using System.Linq; using Squidex.Domain.Apps.Core.Apps; @@ -34,21 +33,21 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models .ToArray() }; - return CreateLinks(result, controller, app.Name); + return result.CreateLinks(controller, app.Name); } - private static AppLanguagesDto CreateLinks(AppLanguagesDto result, ApiController controller, string app) + private AppLanguagesDto CreateLinks(ApiController controller, string app) { var values = new { app }; - result.AddSelfLink(controller.Url(x => nameof(x.GetLanguages), values)); + AddSelfLink(controller.Url(x => nameof(x.GetLanguages), values)); if (controller.HasPermission(Permissions.AppLanguagesCreate, app)) { - result.AddPostLink("create", controller.Url(x => nameof(x.PostLanguage), values)); + AddPostLink("create", controller.Url(x => nameof(x.PostLanguage), values)); } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/ClientDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/ClientDto.cs index 70c4e3649..df66388b1 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/ClientDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/ClientDto.cs @@ -41,12 +41,12 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models { var result = SimpleMapper.Map(client, new ClientDto { Id = id }); - return CreateLinks(result, controller, app); + return result.CreateLinks(controller, app); } - private static ClientDto CreateLinks(ClientDto result, ApiController controller, string app) + private ClientDto CreateLinks(ApiController controller, string app) { - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/ClientsDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/ClientsDto.cs index cf92b47ac..33d470e75 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/ClientsDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/ClientsDto.cs @@ -27,12 +27,12 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models Items = app.Clients.Select(x => ClientDto.FromClient(x.Key, x.Value, controller, app.Name)).ToArray() }; - return CreateLinks(result, controller, app.Name); + return result.CreateLinks(controller, app.Name); } - private static ClientsDto CreateLinks(ClientsDto result, ApiController controller, string app) + private ClientsDto CreateLinks(ApiController controller, string app) { - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorDto.cs index bdd9e8947..4929ed76b 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorDto.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.ComponentModel.DataAnnotations; using Squidex.Shared; using Squidex.Web; @@ -29,25 +28,25 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models { var result = new ContributorDto { ContributorId = id, Role = role }; - return CreateLinks(result, controller, app); + return result.CreateLinks(controller, app); } - private static ContributorDto CreateLinks(ContributorDto result, ApiController controller, string app) + private ContributorDto CreateLinks(ApiController controller, string app) { - if (!controller.IsUser(result.ContributorId)) + if (!controller.IsUser(ContributorId)) { if (controller.HasPermission(Permissions.AppContributorsAssign, app)) { - result.AddPostLink("update", controller.Url(x => nameof(x.PostContributor), new { app })); + AddPostLink("update", controller.Url(x => nameof(x.PostContributor), new { app })); } if (controller.HasPermission(Permissions.AppContributorsRevoke, app)) { - result.AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteContributor), new { app, id = result.ContributorId })); + AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteContributor), new { app, id = ContributorId })); } } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorsDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorsDto.cs index 310efbea9..5f7c330fe 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorsDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorsDto.cs @@ -53,21 +53,21 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models result.MaxContributors = plans.GetPlanForApp(app).MaxContributors; - return CreateLinks(result, controller, app.Name); + return result.CreateLinks(controller, app.Name); } - private static ContributorsDto CreateLinks(ContributorsDto result, ApiController controller, string app) + private ContributorsDto CreateLinks(ApiController controller, string app) { var values = new { app }; - result.AddSelfLink(controller.Url(x => nameof(x.GetContributors), values)); + AddSelfLink(controller.Url(x => nameof(x.GetContributors), values)); if (controller.HasPermission(Permissions.AppContributorsAssign, app)) { - result.AddPostLink("create", controller.Url(x => nameof(x.PostContributor), values)); + AddPostLink("create", controller.Url(x => nameof(x.PostContributor), values)); } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/RoleDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/RoleDto.cs index 2c833707b..856e47ec7 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/RoleDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/RoleDto.cs @@ -11,6 +11,7 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using Squidex.Domain.Apps.Core.Apps; using Squidex.Domain.Apps.Entities.Apps; +using Squidex.Web; namespace Squidex.Areas.Api.Controllers.Apps.Models { @@ -38,17 +39,24 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models [Required] public IEnumerable Permissions { get; set; } - public static RoleDto FromRole(Role role, IAppEntity app) + public static RoleDto FromRole(Role role, IAppEntity app, ApiController controller) { var permissions = role.Permissions.WithoutApp(app.Name); - return new RoleDto + var result = new RoleDto { Name = role.Name, NumClients = app.Clients.Count(x => string.Equals(x.Value.Role, role.Name, StringComparison.OrdinalIgnoreCase)), NumContributors = app.Contributors.Count(x => string.Equals(x.Value, role.Name, StringComparison.OrdinalIgnoreCase)), Permissions = permissions.ToIds() }; + + return result.CreateLinks(controller, app.Name); + } + + private RoleDto CreateLinks(ApiController controller, string name) + { + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/RolesDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/RolesDto.cs index 64390c625..1e1b6b268 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/RolesDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/RolesDto.cs @@ -8,22 +8,31 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using Squidex.Domain.Apps.Entities.Apps; +using Squidex.Web; namespace Squidex.Areas.Api.Controllers.Apps.Models { - public sealed class RolesDto + public sealed class RolesDto : Resource { /// - /// The app roles. + /// The roles. /// [Required] - public RoleDto[] Roles { get; set; } + public RoleDto[] Items { get; set; } - public static RolesDto FromApp(IAppEntity app) + public static RolesDto FromApp(IAppEntity app, ApiController controller) { - var roles = app.Roles.Values.Select(x => RoleDto.FromRole(x, app)).ToArray(); + var result = new RolesDto + { + Items = app.Roles.Values.Select(x => RoleDto.FromRole(x, app, controller)).ToArray() + }; - return new RolesDto { Roles = roles }; + return result.CreateLinks(controller, app.Name); + } + + private RolesDto CreateLinks(ApiController controller, string app) + { + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobDto.cs b/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobDto.cs index 8cc2fd455..8f39a7140 100644 --- a/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobDto.cs @@ -50,19 +50,19 @@ namespace Squidex.Areas.Api.Controllers.Backups.Models { var result = SimpleMapper.Map(backup, new BackupJobDto()); - return CreateLinks(result, controller, app); + return result.CreateLinks(controller, app); } - private static BackupJobDto CreateLinks(BackupJobDto result, ApiController controller, string app) + private BackupJobDto CreateLinks(ApiController controller, string app) { - var values = new { app, id = result.Id }; + var values = new { app, id = Id }; if (controller.HasPermission(Permissions.AppBackupsDelete, app)) { - result.AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteBackup), values)); + AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteBackup), values)); } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobsDto.cs b/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobsDto.cs index 33c88bc25..d533a5030 100644 --- a/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobsDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobsDto.cs @@ -29,21 +29,21 @@ namespace Squidex.Areas.Api.Controllers.Backups.Models Items = backups.Select(x => BackupJobDto.FromBackup(x, controller, app)).ToArray() }; - return CreateLinks(result, controller, app); + return result.CreateLinks(controller, app); } - private static BackupJobsDto CreateLinks(BackupJobsDto result, ApiController controller, string app) + private BackupJobsDto CreateLinks(ApiController controller, string app) { var values = new { app }; - result.AddSelfLink(controller.Url(x => nameof(x.GetBackups), values)); + AddSelfLink(controller.Url(x => nameof(x.GetBackups), values)); if (controller.HasPermission(Permissions.AppBackupsCreate, app)) { - result.AddPostLink("create", controller.Url(x => nameof(x.PostBackup), values)); + AddPostLink("create", controller.Url(x => nameof(x.PostBackup), values)); } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumerDto.cs b/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumerDto.cs index df0846cbf..86ce40203 100644 --- a/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumerDto.cs +++ b/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumerDto.cs @@ -31,31 +31,31 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers.Models { var result = SimpleMapper.Map(eventConsumerInfo, new EventConsumerDto()); - return CreateLinks(result, controller); + return result.CreateLinks(controller); } - private static EventConsumerDto CreateLinks(EventConsumerDto result, ApiController controller) + private EventConsumerDto CreateLinks(ApiController controller) { if (controller.HasPermission(EventsManagePermission)) { - var values = new { name = result.Name }; + var values = new { name = Name }; - if (!result.IsResetting) + if (!IsResetting) { - result.AddPutLink("reset", controller.Url(x => nameof(x.ResetEventConsumer), values)); + AddPutLink("reset", controller.Url(x => nameof(x.ResetEventConsumer), values)); } - if (result.IsStopped) + if (IsStopped) { - result.AddPutLink("start", controller.Url(x => nameof(x.StartEventConsumer), values)); + AddPutLink("start", controller.Url(x => nameof(x.StartEventConsumer), values)); } else { - result.AddPutLink("stop", controller.Url(x => nameof(x.StopEventConsumer), values)); + AddPutLink("stop", controller.Url(x => nameof(x.StopEventConsumer), values)); } } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumersDto.cs b/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumersDto.cs index 8f9a20766..65f11e289 100644 --- a/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumersDto.cs +++ b/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumersDto.cs @@ -26,14 +26,14 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers.Models Items = items.Select(x => EventConsumerDto.FromEventConsumerInfo(x, controller)).ToArray() }; - return CreateLinks(result, controller); + return result.CreateLinks(controller); } - private static EventConsumersDto CreateLinks(EventConsumersDto result, ApiController controller) + private EventConsumersDto CreateLinks(ApiController controller) { - result.AddSelfLink(controller.Url(c => nameof(c.GetEventConsumers))); + AddSelfLink(controller.Url(c => nameof(c.GetEventConsumers))); - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs index f0894b1ae..2b8da5114 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs @@ -83,36 +83,36 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models result.Trigger = RuleTriggerDtoFactory.Create(rule.RuleDef.Trigger); } - return CreateLinks(result, controller, app); + return result.CreateLinks(controller, app); } - private static RuleDto CreateLinks(RuleDto result, ApiController controller, string app) + private RuleDto CreateLinks(ApiController controller, string app) { - var values = new { app, id = result.Id }; + var values = new { app, id = Id }; if (controller.HasPermission(Permissions.AppRulesDisable, app)) { - if (result.IsEnabled) + if (IsEnabled) { - result.AddPutLink("disable", controller.Url(x => nameof(x.DisableRule), values)); + AddPutLink("disable", controller.Url(x => nameof(x.DisableRule), values)); } else { - result.AddPutLink("enable", controller.Url(x => nameof(x.EnableRule), values)); + AddPutLink("enable", controller.Url(x => nameof(x.EnableRule), values)); } } if (controller.HasPermission(Permissions.AppRulesUpdate)) { - result.AddPutLink("update", controller.Url(x => nameof(x.PutRule), values)); + AddPutLink("update", controller.Url(x => nameof(x.PutRule), values)); } if (controller.HasPermission(Permissions.AppRulesDelete)) { - result.AddPutLink("delete", controller.Url(x => nameof(x.DeleteRule), values)); + AddPutLink("delete", controller.Url(x => nameof(x.DeleteRule), values)); } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs index 498ffd560..201e3dadd 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventDto.cs @@ -71,18 +71,18 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models SimpleMapper.Map(ruleEvent, result); SimpleMapper.Map(ruleEvent.Job, result); - return CreateLinks(result, controller, app); + return result.CreateLinks(controller, app); } - private static RuleEventDto CreateLinks(RuleEventDto result, ApiController controller, string app) + private RuleEventDto CreateLinks(ApiController controller, string app) { - var values = new { app, id = result.Id }; + var values = new { app, id = Id }; - result.AddPutLink("update", controller.Url(x => nameof(x.PutEvent), values)); + AddPutLink("update", controller.Url(x => nameof(x.PutEvent), values)); - result.AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteEvent), values)); + AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteEvent), values)); - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventsDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventsDto.cs index 83b6d4c6b..d0f382f98 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventsDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleEventsDto.cs @@ -34,14 +34,14 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models Items = items.Select(x => RuleEventDto.FromRuleEvent(x, controller, app)).ToArray() }; - return CreateLinks(result, controller, app); + return result.CreateLinks(controller, app); } - private static RuleEventsDto CreateLinks(RuleEventsDto result, ApiController controller, string app) + private RuleEventsDto CreateLinks(ApiController controller, string app) { - result.AddSelfLink(controller.Url(x => nameof(x.GetEvents), new { app })); + AddSelfLink(controller.Url(x => nameof(x.GetEvents), new { app })); - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/RulesDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/RulesDto.cs index bf4eea27b..c13c163fb 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/RulesDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/RulesDto.cs @@ -34,26 +34,26 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models Items = items.Select(x => RuleDto.FromRule(x, controller, app)).ToArray() }; - return CreateLinks(result, controller, app); + return result.CreateLinks(controller, app); } - private static RulesDto CreateLinks(RulesDto result, ApiController controller, string app) + private RulesDto CreateLinks(ApiController controller, string app) { var values = new { app }; - result.AddSelfLink(controller.Url(x => nameof(x.GetRules), values)); + AddSelfLink(controller.Url(x => nameof(x.GetRules), values)); if (controller.HasPermission(Permissions.AppRulesCreate, app)) { - result.AddPostLink("create", controller.Url(x => nameof(x.PostRule), values)); + AddPostLink("create", controller.Url(x => nameof(x.PostRule), values)); } if (controller.HasPermission(Permissions.AppRulesEvents, app)) { - result.AddGetLink("events", controller.Url(x => nameof(x.GetEvents), values)); + AddGetLink("events", controller.Url(x => nameof(x.GetEvents), values)); } - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Users/Models/UserDto.cs b/src/Squidex/Areas/Api/Controllers/Users/Models/UserDto.cs index 2481f73c8..bdc37fa82 100644 --- a/src/Squidex/Areas/Api/Controllers/Users/Models/UserDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Users/Models/UserDto.cs @@ -57,43 +57,43 @@ namespace Squidex.Areas.Api.Controllers.Users.Models var result = SimpleMapper.Map(user, new UserDto { DisplayName = userName, Permissions = userPermssions }); - return CreateLinks(result, controller); + return result.CreateLinks(controller); } - private static UserDto CreateLinks(UserDto result, ApiController controller) + private UserDto CreateLinks(ApiController controller) { - var values = new { id = result.Id }; + var values = new { id = Id }; if (controller is UserManagementController) { - result.AddSelfLink(controller.Url(c => nameof(c.GetUser), values)); + AddSelfLink(controller.Url(c => nameof(c.GetUser), values)); } else { - result.AddSelfLink(controller.Url(c => nameof(c.GetUser), values)); + AddSelfLink(controller.Url(c => nameof(c.GetUser), values)); } - if (!controller.IsUser(result.Id)) + if (!controller.IsUser(Id)) { - if (controller.HasPermission(LockPermission) && !result.IsLocked) + if (controller.HasPermission(LockPermission) && !IsLocked) { - result.AddPutLink("lock", controller.Url(c => nameof(c.LockUser), values)); + AddPutLink("lock", controller.Url(c => nameof(c.LockUser), values)); } - if (controller.HasPermission(UnlockPermission) && result.IsLocked) + if (controller.HasPermission(UnlockPermission) && IsLocked) { - result.AddPutLink("unlock", controller.Url(c => nameof(c.UnlockUser), values)); + AddPutLink("unlock", controller.Url(c => nameof(c.UnlockUser), values)); } } if (controller.HasPermission(UpdatePermission)) { - result.AddPutLink("update", controller.Url(c => nameof(c.PutUser), values)); + AddPutLink("update", controller.Url(c => nameof(c.PutUser), values)); } - result.AddGetLink("picture", controller.Url(c => nameof(c.GetUserPicture), values)); + AddGetLink("picture", controller.Url(c => nameof(c.GetUserPicture), values)); - return result; + return this; } } } diff --git a/src/Squidex/Areas/Api/Controllers/Users/Models/UsersDto.cs b/src/Squidex/Areas/Api/Controllers/Users/Models/UsersDto.cs index e866c8af4..662dc7f0b 100644 --- a/src/Squidex/Areas/Api/Controllers/Users/Models/UsersDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Users/Models/UsersDto.cs @@ -36,19 +36,19 @@ namespace Squidex.Areas.Api.Controllers.Users.Models Items = items.Select(x => UserDto.FromUser(x, controller)).ToArray() }; - return CreateLinks(result, controller); + return result.CreateLinks(controller); } - private static UsersDto CreateLinks(UsersDto result, ApiController controller) + private UsersDto CreateLinks(ApiController controller) { - result.AddSelfLink(controller.Url(c => nameof(c.GetUsers))); + AddSelfLink(controller.Url(c => nameof(c.GetUsers))); if (controller.HasPermission(CreatePermissions)) { - result.AddPostLink("create", controller.Url(c => nameof(c.PostUser))); + AddPostLink("create", controller.Url(c => nameof(c.PostUser))); } - return result; + return this; } } } diff --git a/src/Squidex/app/features/administration/services/users.service.ts b/src/Squidex/app/features/administration/services/users.service.ts index a1eb3e9c8..b0165b9de 100644 --- a/src/Squidex/app/features/administration/services/users.service.ts +++ b/src/Squidex/app/features/administration/services/users.service.ts @@ -73,7 +73,7 @@ export class UsersService { public getUser(id: string): Observable { const url = this.apiUrl.buildUrl(`api/user-management/${id}`); - return this.http.get(url).pipe( + return this.http.get(url).pipe( map(body => { return parseUser(body); }), @@ -83,7 +83,7 @@ export class UsersService { public postUser(dto: CreateUserDto): Observable { const url = this.apiUrl.buildUrl('api/user-management'); - return this.http.post(url, dto).pipe( + return this.http.post(url, dto).pipe( map(body => { return parseUser(body); }), diff --git a/src/Squidex/app/features/settings/pages/clients/client.component.html b/src/Squidex/app/features/settings/pages/clients/client.component.html index 7fc58d7ad..845ee316d 100644 --- a/src/Squidex/app/features/settings/pages/clients/client.component.html +++ b/src/Squidex/app/features/settings/pages/clients/client.component.html @@ -21,7 +21,7 @@ {{client.name}} - +
@@ -29,6 +29,7 @@