diff --git a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppAssetsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppAssetsController.cs
index b6d3745aa..7448c381a 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppAssetsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppAssetsController.cs
@@ -15,7 +15,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
///
- /// Manages and configures apps.
+ /// Update and query apps.
///
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppAssetsController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs
index 3482510de..781ef6349 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs
@@ -17,7 +17,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
///
- /// Manages and configures apps.
+ /// Update and query apps.
///
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppClientsController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppContributorsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppContributorsController.cs
index 2dd8665eb..bc27eaa9f 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppContributorsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppContributorsController.cs
@@ -23,7 +23,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
///
- /// Manages and configures apps.
+ /// Update and query apps.
///
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppContributorsController : ApiController
@@ -76,7 +76,7 @@ namespace Squidex.Areas.Api.Controllers.Apps
///
[HttpPost]
[Route("apps/{app}/contributors/")]
- [ProducesResponseType(typeof(ContributorsDto), 201)]
+ [ProducesResponseType(typeof(ContributorsDto), StatusCodes.Status201Created)]
[ApiPermissionOrAnonymous(PermissionIds.AppContributorsAssign)]
[ApiCosts(1)]
public async Task PostContributor(string app, [FromBody] AssignContributorDto request)
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppImageController.cs b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppImageController.cs
index 4faf0a48a..825f20cf9 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppImageController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppImageController.cs
@@ -17,7 +17,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
///
- /// Manages and configures apps.
+ /// Update and query apps.
///
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppImageController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppLanguagesController.cs b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppLanguagesController.cs
index 98eb8cd18..0c0303648 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppLanguagesController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppLanguagesController.cs
@@ -18,7 +18,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
///
- /// Manages and configures apps.
+ /// Update and query apps.
///
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppLanguagesController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs
index 91edfd15b..d1fefd7fc 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs
@@ -18,7 +18,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
///
- /// Manages and configures apps.
+ /// Update and query apps.
///
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppRolesController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppSettingsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppSettingsController.cs
index 832a55fc6..df0603a92 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppSettingsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppSettingsController.cs
@@ -15,7 +15,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
///
- /// Manages and configures apps.
+ /// Update and query apps.
///
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppSettingsController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppWorkflowsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppWorkflowsController.cs
index 2f14346b3..d51c40c78 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppWorkflowsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppWorkflowsController.cs
@@ -19,7 +19,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
///
- /// Manages and configures apps.
+ /// Update and query apps.
///
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppWorkflowsController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs
index 0d9cfe971..97f666614 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs
@@ -21,7 +21,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
///
- /// Manages and configures apps.
+ /// Update and query apps.
///
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppsController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs
index 5e5f95ed2..ac9317383 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs
@@ -79,7 +79,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
///
[HttpPost]
[Route("apps/{app}/assets/folders", Order = -1)]
- [ProducesResponseType(typeof(AssetFolderDto), 201)]
+ [ProducesResponseType(typeof(AssetFolderDto), StatusCodes.Status201Created)]
[AssetRequestSizeLimit]
[ApiPermissionOrAnonymous(PermissionIds.AppAssetsUpdate)]
[ApiCosts(1)]
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs
index b17c24fc2..2f0c62617 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs
@@ -208,7 +208,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
///
[HttpPost]
[Route("apps/{app}/assets/")]
- [ProducesResponseType(typeof(AssetDto), 201)]
+ [ProducesResponseType(typeof(AssetDto), StatusCodes.Status201Created)]
[AssetRequestSizeLimit]
[ApiPermissionOrAnonymous(PermissionIds.AppAssetsCreate)]
[ApiCosts(1)]
@@ -236,7 +236,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
///
[OpenApiIgnore]
[Route("apps/{app}/assets/tus/{**fileId}")]
- [ProducesResponseType(typeof(AssetDto), 201)]
+ [ProducesResponseType(typeof(AssetDto), StatusCodes.Status201Created)]
[AssetRequestSizeLimit]
[ApiPermissionOrAnonymous(PermissionIds.AppAssetsCreate)]
[ApiCosts(1)]
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs b/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs
index 3d10533ef..9be09dd94 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs
@@ -15,7 +15,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Backups
{
///
- /// Manages backups for app.
+ /// Update and query backups for app.
///
[ApiExplorerSettings(GroupName = nameof(Backups))]
public class BackupContentController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs
index 7c94d559a..27ca1a44c 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs
@@ -17,7 +17,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Backups
{
///
- /// Manages backups for apps.
+ /// Update and query backups for apps.
///
[ApiExplorerSettings(GroupName = nameof(Backups))]
public class BackupsController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs b/backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs
index 53f5c7056..779badd41 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs
@@ -16,7 +16,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Backups
{
///
- /// Manages backups for apps.
+ /// Update and query backups for apps.
///
[ApiExplorerSettings(GroupName = nameof(Backups))]
[ApiModelValidation(true)]
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs
index 492b0e215..bedc8ece7 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs
@@ -21,7 +21,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Comments
{
///
- /// Manages comments for any kind of app resource.
+ /// Update and query comments for any kind of app resource.
///
[ApiExplorerSettings(GroupName = nameof(Comments))]
public sealed class CommentsController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs
index e92789a79..548fecc35 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs
@@ -20,7 +20,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Comments.Notifications
{
///
- /// Manages user notifications.
+ /// Update and query user notifications.
///
[ApiExplorerSettings(GroupName = nameof(Notifications))]
public sealed class UserNotificationsController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
index e309bf7ea..1c8553ea7 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
@@ -351,7 +351,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
///
[HttpPost]
[Route("content/{app}/{schema}/")]
- [ProducesResponseType(typeof(ContentsDto), 201)]
+ [ProducesResponseType(typeof(ContentsDto), StatusCodes.Status201Created)]
[ApiPermissionOrAnonymous(PermissionIds.AppContentsCreate)]
[ApiCosts(1)]
public async Task PostContent(string app, string schema, CreateContentDto request)
diff --git a/backend/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs b/backend/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs
index 2511bf03a..ee2080223 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs
@@ -14,6 +14,10 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.EventConsumers
{
+ ///
+ /// Update and query event consumers.
+ ///
+ [ApiExplorerSettings(GroupName = nameof(EventConsumers))]
public sealed class EventConsumersController : ApiController
{
private readonly IEventConsumerManager eventConsumerManager;
@@ -24,6 +28,12 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
this.eventConsumerManager = eventConsumerManager;
}
+ ///
+ /// Get event consumers.
+ ///
+ ///
+ /// 200 => Event consumers returned.
+ ///
[HttpGet]
[Route("event-consumers/")]
[ProducesResponseType(typeof(EventConsumersDto), StatusCodes.Status200OK)]
@@ -37,6 +47,14 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
return Ok(response);
}
+ ///
+ /// Start an event consumer.
+ ///
+ /// The name of the event consumer.
+ ///
+ /// 200 => Event consumer started asynchronously.
+ /// 404 => Event consumer not found.
+ ///
[HttpPut]
[Route("event-consumers/{consumerName}/start/")]
[ProducesResponseType(typeof(EventConsumerDto), StatusCodes.Status200OK)]
@@ -50,6 +68,14 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
return Ok(response);
}
+ ///
+ /// Stop an event consumer.
+ ///
+ /// The name of the event consumer.
+ ///
+ /// 200 => Event consumer stopped asynchronously.
+ /// 404 => Event consumer not found.
+ ///
[HttpPut]
[Route("event-consumers/{consumerName}/stop/")]
[ProducesResponseType(typeof(EventConsumerDto), StatusCodes.Status200OK)]
@@ -63,6 +89,14 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
return Ok(response);
}
+ ///
+ /// Reset an event consumer.
+ ///
+ /// The name of the event consumer.
+ ///
+ /// 200 => Event consumer resetted asynchronously.
+ /// 404 => Event consumer not found.
+ ///
[HttpPut]
[Route("event-consumers/{consumerName}/reset/")]
[ProducesResponseType(typeof(EventConsumerDto), StatusCodes.Status200OK)]
diff --git a/backend/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumerDto.cs b/backend/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumerDto.cs
index da253b0f5..05db4eb50 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumerDto.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumerDto.cs
@@ -7,22 +7,42 @@
using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Reflection;
+using Squidex.Infrastructure.Validation;
using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.EventConsumers.Models
{
public sealed class EventConsumerDto : Resource
{
+ ///
+ /// Indicates if the event consumer has been started.
+ ///
public bool IsStopped { get; set; }
+ ///
+ /// Indicates if the event consumer is resetting at the moment.
+ ///
public bool IsResetting { get; set; }
+ ///
+ /// The number of handled events.
+ ///
public int Count { get; set; }
+ ///
+ /// The name of the event consumer.
+ ///
+ [LocalizedRequired]
public string Name { get; set; }
+ ///
+ /// The error details if the event consumer has been stopped after a failure.
+ ///
public string? Error { get; set; }
+ ///
+ /// The position within the vent stream.
+ ///
public string? Position { get; set; }
public static EventConsumerDto FromDomain(EventConsumerInfo eventConsumerInfo, Resources resources)
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs b/backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs
index a9707fa67..2e6510122 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs
@@ -16,7 +16,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Plans
{
///
- /// Manages and configures plans.
+ /// Update and query plans.
///
[ApiExplorerSettings(GroupName = nameof(Plans))]
public sealed class AppPlansController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs b/backend/src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs
index 1a9d37c82..488b6f153 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs
@@ -27,7 +27,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Rules
{
///
- /// Manages and retrieves information about rules.
+ /// Update and query information about rules.
///
[ApiExplorerSettings(GroupName = nameof(Rules))]
public sealed class RulesController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs
index 1d5296b47..c613f1562 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs
@@ -16,7 +16,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Schemas
{
///
- /// Manages and retrieves information about schemas.
+ /// Update and query information about schemas.
///
[ApiExplorerSettings(GroupName = nameof(Schemas))]
public sealed class SchemaFieldsController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs b/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs
index f9962e002..440556373 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs
@@ -24,7 +24,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Schemas
{
///
- /// Manages and retrieves information about schemas.
+ /// Update and query information about schemas.
///
[ApiExplorerSettings(GroupName = nameof(Schemas))]
public sealed class SchemasController : ApiController
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Users/Models/ResourcesDto.cs b/backend/src/Squidex/Areas/Api/Controllers/Users/Models/ResourcesDto.cs
index 03a0db791..6a9e2ccfd 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Users/Models/ResourcesDto.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Users/Models/ResourcesDto.cs
@@ -20,28 +20,28 @@ namespace Squidex.Areas.Api.Controllers.Users.Models
var result = new ResourcesDto();
result.AddGetLink("ping",
- resources.Url(x => nameof(x.GetPing)));
+ resources.Url(x => nameof(x.GetPing)));
if (resources.CanReadEvents)
{
result.AddGetLink("admin/events",
- resources.Url(x => nameof(x.GetEventConsumers)));
+ resources.Url(x => nameof(x.GetEventConsumers)));
}
if (resources.CanRestoreBackup)
{
result.AddGetLink("admin/restore",
- resources.Url(x => nameof(x.GetRestoreJob)));
+ resources.Url(x => nameof(x.GetRestoreJob)));
}
if (resources.CanReadUsers)
{
result.AddGetLink("admin/users",
- resources.Url(x => nameof(x.GetUsers)));
+ resources.Url(x => nameof(x.GetUsers)));
}
result.AddGetLink("languages",
- resources.Url(x => nameof(x.GetLanguages)));
+ resources.Url(x => nameof(x.GetLanguages)));
return result;
}
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs b/backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs
index dc055cc60..dff46d148 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs
@@ -16,7 +16,11 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Users
{
+ ///
+ /// Retrieve and manage users.
+ ///
[ApiModelValidation(true)]
+ [ApiExplorerSettings(GroupName = "UserManagement")]
public sealed class UserManagementController : ApiController
{
private readonly IUserService userService;
@@ -27,6 +31,15 @@ namespace Squidex.Areas.Api.Controllers.Users
this.userService = userService;
}
+ ///
+ /// Get users by query.
+ ///
+ /// Optional query to search by email address or username.
+ /// The number of users to skip.
+ /// The number of users to return.
+ ///
+ /// 200 => Users returned.
+ ///
[HttpGet]
[Route("user-management/")]
[ProducesResponseType(typeof(UsersDto), StatusCodes.Status200OK)]
@@ -40,9 +53,17 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
+ ///
+ /// Get a user by ID.
+ ///
+ /// The ID of the user.
+ ///
+ /// 200 => User returned.
+ /// 404 => User not found.
+ ///
[HttpGet]
[Route("user-management/{id}/")]
- [ProducesResponseType(typeof(UserDto), 201)]
+ [ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)]
[ApiPermission(PermissionIds.AdminUsersRead)]
public async Task GetUser(string id)
{
@@ -58,9 +79,17 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
+ ///
+ /// Create a new user.
+ ///
+ /// The user object that needs to be added.
+ ///
+ /// 201 => User created.
+ /// 400 => User request not valid.
+ ///
[HttpPost]
[Route("user-management/")]
- [ProducesResponseType(typeof(UserDto), 201)]
+ [ProducesResponseType(typeof(UserDto), StatusCodes.Status201Created)]
[ApiPermission(PermissionIds.AdminUsersCreate)]
public async Task PostUser([FromBody] CreateUserDto request)
{
@@ -68,12 +97,22 @@ namespace Squidex.Areas.Api.Controllers.Users
var response = UserDto.FromDomain(user, Resources);
- return Ok(response);
+ return CreatedAtAction(nameof(GetUser), new { id = user.Id }, response);
}
+ ///
+ /// Update a user.
+ ///
+ /// The ID of the user.
+ /// The user object that needs to be updated.
+ ///
+ /// 200 => User created.
+ /// 400 => User request not valid.
+ /// 404 => User not found.
+ ///
[HttpPut]
[Route("user-management/{id}/")]
- [ProducesResponseType(typeof(UserDto), 201)]
+ [ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)]
[ApiPermission(PermissionIds.AdminUsersUpdate)]
public async Task PutUser(string id, [FromBody] UpdateUserDto request)
{
@@ -84,9 +123,18 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
+ ///
+ /// Lock a user.
+ ///
+ /// The ID of the user to lock.
+ ///
+ /// 200 => User locked.
+ /// 403 => User is the current user.
+ /// 404 => User not found.
+ ///
[HttpPut]
[Route("user-management/{id}/lock/")]
- [ProducesResponseType(typeof(UserDto), 201)]
+ [ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)]
[ApiPermission(PermissionIds.AdminUsersLock)]
public async Task LockUser(string id)
{
@@ -102,9 +150,18 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
+ ///
+ /// Unlock a user.
+ ///
+ /// The ID of the user to unlock.
+ ///
+ /// 200 => User unlocked.
+ /// 403 => User is the current user.
+ /// 404 => User not found.
+ ///
[HttpPut]
[Route("user-management/{id}/unlock/")]
- [ProducesResponseType(typeof(UserDto), 201)]
+ [ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)]
[ApiPermission(PermissionIds.AdminUsersUnlock)]
public async Task UnlockUser(string id)
{
@@ -120,6 +177,15 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
+ ///
+ /// Delete a User.
+ ///
+ /// The ID of the user to delete.
+ ///
+ /// 204 => User deleted.
+ /// 403 => User is the current user.
+ /// 404 => User not found.
+ ///
[HttpDelete]
[Route("user-management/{id}/")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs b/backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs
index 13640c40a..48842195a 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs
@@ -17,7 +17,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Users
{
///
- /// Readonly API to retrieve information about squidex users.
+ /// Update and query users.
///
[ApiExplorerSettings(GroupName = nameof(Users))]
public sealed class UsersController : ApiController