Browse Source

Add more controllers to OpenApi.

pull/921/head
Sebastian 3 years ago
parent
commit
04d5d466bb
  1. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppAssetsController.cs
  2. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs
  3. 4
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppContributorsController.cs
  4. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppImageController.cs
  5. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppLanguagesController.cs
  6. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs
  7. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppSettingsController.cs
  8. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppWorkflowsController.cs
  9. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs
  10. 2
      backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs
  11. 4
      backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs
  12. 2
      backend/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs
  13. 2
      backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs
  14. 2
      backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs
  15. 2
      backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs
  16. 2
      backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs
  17. 2
      backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
  18. 34
      backend/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs
  19. 20
      backend/src/Squidex/Areas/Api/Controllers/EventConsumers/Models/EventConsumerDto.cs
  20. 2
      backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs
  21. 2
      backend/src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs
  22. 2
      backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs
  23. 2
      backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs
  24. 10
      backend/src/Squidex/Areas/Api/Controllers/Users/Models/ResourcesDto.cs
  25. 78
      backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs
  26. 2
      backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs

2
backend/src/Squidex/Areas/Api/Controllers/Apps/AppAssetsController.cs

@ -15,7 +15,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
/// <summary>
/// Manages and configures apps.
/// Update and query apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppAssetsController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Apps/AppClientsController.cs

@ -17,7 +17,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
/// <summary>
/// Manages and configures apps.
/// Update and query apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppClientsController : ApiController

4
backend/src/Squidex/Areas/Api/Controllers/Apps/AppContributorsController.cs

@ -23,7 +23,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
/// <summary>
/// Manages and configures apps.
/// Update and query apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppContributorsController : ApiController
@ -76,7 +76,7 @@ namespace Squidex.Areas.Api.Controllers.Apps
/// </returns>
[HttpPost]
[Route("apps/{app}/contributors/")]
[ProducesResponseType(typeof(ContributorsDto), 201)]
[ProducesResponseType(typeof(ContributorsDto), StatusCodes.Status201Created)]
[ApiPermissionOrAnonymous(PermissionIds.AppContributorsAssign)]
[ApiCosts(1)]
public async Task<IActionResult> PostContributor(string app, [FromBody] AssignContributorDto request)

2
backend/src/Squidex/Areas/Api/Controllers/Apps/AppImageController.cs

@ -17,7 +17,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
/// <summary>
/// Manages and configures apps.
/// Update and query apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppImageController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Apps/AppLanguagesController.cs

@ -18,7 +18,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
/// <summary>
/// Manages and configures apps.
/// Update and query apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppLanguagesController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Apps/AppRolesController.cs

@ -18,7 +18,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
/// <summary>
/// Manages and configures apps.
/// Update and query apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppRolesController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Apps/AppSettingsController.cs

@ -15,7 +15,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
/// <summary>
/// Manages and configures apps.
/// Update and query apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppSettingsController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Apps/AppWorkflowsController.cs

@ -19,7 +19,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
/// <summary>
/// Manages and configures apps.
/// Update and query apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppWorkflowsController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Apps/AppsController.cs

@ -21,7 +21,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps
{
/// <summary>
/// Manages and configures apps.
/// Update and query apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Apps))]
public sealed class AppsController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Assets/AssetFoldersController.cs

@ -79,7 +79,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
/// </returns>
[HttpPost]
[Route("apps/{app}/assets/folders", Order = -1)]
[ProducesResponseType(typeof(AssetFolderDto), 201)]
[ProducesResponseType(typeof(AssetFolderDto), StatusCodes.Status201Created)]
[AssetRequestSizeLimit]
[ApiPermissionOrAnonymous(PermissionIds.AppAssetsUpdate)]
[ApiCosts(1)]

4
backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs

@ -208,7 +208,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
/// </remarks>
[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
/// </remarks>
[OpenApiIgnore]
[Route("apps/{app}/assets/tus/{**fileId}")]
[ProducesResponseType(typeof(AssetDto), 201)]
[ProducesResponseType(typeof(AssetDto), StatusCodes.Status201Created)]
[AssetRequestSizeLimit]
[ApiPermissionOrAnonymous(PermissionIds.AppAssetsCreate)]
[ApiCosts(1)]

2
backend/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs

@ -15,7 +15,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Backups
{
/// <summary>
/// Manages backups for app.
/// Update and query backups for app.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Backups))]
public class BackupContentController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs

@ -17,7 +17,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Backups
{
/// <summary>
/// Manages backups for apps.
/// Update and query backups for apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Backups))]
public class BackupsController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs

@ -16,7 +16,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Backups
{
/// <summary>
/// Manages backups for apps.
/// Update and query backups for apps.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Backups))]
[ApiModelValidation(true)]

2
backend/src/Squidex/Areas/Api/Controllers/Comments/CommentsController.cs

@ -21,7 +21,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Comments
{
/// <summary>
/// Manages comments for any kind of app resource.
/// Update and query comments for any kind of app resource.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Comments))]
public sealed class CommentsController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Comments/Notifications/UserNotificationsController.cs

@ -20,7 +20,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Comments.Notifications
{
/// <summary>
/// Manages user notifications.
/// Update and query user notifications.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Notifications))]
public sealed class UserNotificationsController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs

@ -351,7 +351,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// </remarks>
[HttpPost]
[Route("content/{app}/{schema}/")]
[ProducesResponseType(typeof(ContentsDto), 201)]
[ProducesResponseType(typeof(ContentsDto), StatusCodes.Status201Created)]
[ApiPermissionOrAnonymous(PermissionIds.AppContentsCreate)]
[ApiCosts(1)]
public async Task<IActionResult> PostContent(string app, string schema, CreateContentDto request)

34
backend/src/Squidex/Areas/Api/Controllers/EventConsumers/EventConsumersController.cs

@ -14,6 +14,10 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.EventConsumers
{
/// <summary>
/// Update and query event consumers.
/// </summary>
[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;
}
/// <summary>
/// Get event consumers.
/// </summary>
/// <returns>
/// 200 => Event consumers returned.
/// </returns>
[HttpGet]
[Route("event-consumers/")]
[ProducesResponseType(typeof(EventConsumersDto), StatusCodes.Status200OK)]
@ -37,6 +47,14 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
return Ok(response);
}
/// <summary>
/// Start an event consumer.
/// </summary>
/// <param name="consumerName">The name of the event consumer.</param>
/// <returns>
/// 200 => Event consumer started asynchronously.
/// 404 => Event consumer not found.
/// </returns>
[HttpPut]
[Route("event-consumers/{consumerName}/start/")]
[ProducesResponseType(typeof(EventConsumerDto), StatusCodes.Status200OK)]
@ -50,6 +68,14 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
return Ok(response);
}
/// <summary>
/// Stop an event consumer.
/// </summary>
/// <param name="consumerName">The name of the event consumer.</param>
/// <returns>
/// 200 => Event consumer stopped asynchronously.
/// 404 => Event consumer not found.
/// </returns>
[HttpPut]
[Route("event-consumers/{consumerName}/stop/")]
[ProducesResponseType(typeof(EventConsumerDto), StatusCodes.Status200OK)]
@ -63,6 +89,14 @@ namespace Squidex.Areas.Api.Controllers.EventConsumers
return Ok(response);
}
/// <summary>
/// Reset an event consumer.
/// </summary>
/// <param name="consumerName">The name of the event consumer.</param>
/// <returns>
/// 200 => Event consumer resetted asynchronously.
/// 404 => Event consumer not found.
/// </returns>
[HttpPut]
[Route("event-consumers/{consumerName}/reset/")]
[ProducesResponseType(typeof(EventConsumerDto), StatusCodes.Status200OK)]

20
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
{
/// <summary>
/// Indicates if the event consumer has been started.
/// </summary>
public bool IsStopped { get; set; }
/// <summary>
/// Indicates if the event consumer is resetting at the moment.
/// </summary>
public bool IsResetting { get; set; }
/// <summary>
/// The number of handled events.
/// </summary>
public int Count { get; set; }
/// <summary>
/// The name of the event consumer.
/// </summary>
[LocalizedRequired]
public string Name { get; set; }
/// <summary>
/// The error details if the event consumer has been stopped after a failure.
/// </summary>
public string? Error { get; set; }
/// <summary>
/// The position within the vent stream.
/// </summary>
public string? Position { get; set; }
public static EventConsumerDto FromDomain(EventConsumerInfo eventConsumerInfo, Resources resources)

2
backend/src/Squidex/Areas/Api/Controllers/Plans/AppPlansController.cs

@ -16,7 +16,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Plans
{
/// <summary>
/// Manages and configures plans.
/// Update and query plans.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Plans))]
public sealed class AppPlansController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs

@ -27,7 +27,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Rules
{
/// <summary>
/// Manages and retrieves information about rules.
/// Update and query information about rules.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Rules))]
public sealed class RulesController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemaFieldsController.cs

@ -16,7 +16,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Schemas
{
/// <summary>
/// Manages and retrieves information about schemas.
/// Update and query information about schemas.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Schemas))]
public sealed class SchemaFieldsController : ApiController

2
backend/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs

@ -24,7 +24,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Schemas
{
/// <summary>
/// Manages and retrieves information about schemas.
/// Update and query information about schemas.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Schemas))]
public sealed class SchemasController : ApiController

10
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<PingController>(x => nameof(x.GetPing)));
resources.Url<PingController>(x => nameof(x.GetPing)));
if (resources.CanReadEvents)
{
result.AddGetLink("admin/events",
resources.Url<EventConsumersController>(x => nameof(x.GetEventConsumers)));
resources.Url<EventConsumersController>(x => nameof(x.GetEventConsumers)));
}
if (resources.CanRestoreBackup)
{
result.AddGetLink("admin/restore",
resources.Url<RestoreController>(x => nameof(x.GetRestoreJob)));
resources.Url<RestoreController>(x => nameof(x.GetRestoreJob)));
}
if (resources.CanReadUsers)
{
result.AddGetLink("admin/users",
resources.Url<UserManagementController>(x => nameof(x.GetUsers)));
resources.Url<UserManagementController>(x => nameof(x.GetUsers)));
}
result.AddGetLink("languages",
resources.Url<LanguagesController>(x => nameof(x.GetLanguages)));
resources.Url<LanguagesController>(x => nameof(x.GetLanguages)));
return result;
}

78
backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs

@ -16,7 +16,11 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Users
{
/// <summary>
/// Retrieve and manage users.
/// </summary>
[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;
}
/// <summary>
/// Get users by query.
/// </summary>
/// <param name="query">Optional query to search by email address or username.</param>
/// <param name="skip">The number of users to skip.</param>
/// <param name="take">The number of users to return.</param>
/// <returns>
/// 200 => Users returned.
/// </returns>
[HttpGet]
[Route("user-management/")]
[ProducesResponseType(typeof(UsersDto), StatusCodes.Status200OK)]
@ -40,9 +53,17 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
/// <summary>
/// Get a user by ID.
/// </summary>
/// <param name="id">The ID of the user.</param>
/// <returns>
/// 200 => User returned.
/// 404 => User not found.
/// </returns>
[HttpGet]
[Route("user-management/{id}/")]
[ProducesResponseType(typeof(UserDto), 201)]
[ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)]
[ApiPermission(PermissionIds.AdminUsersRead)]
public async Task<IActionResult> GetUser(string id)
{
@ -58,9 +79,17 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
/// <summary>
/// Create a new user.
/// </summary>
/// <param name="request">The user object that needs to be added.</param>
/// <returns>
/// 201 => User created.
/// 400 => User request not valid.
/// </returns>
[HttpPost]
[Route("user-management/")]
[ProducesResponseType(typeof(UserDto), 201)]
[ProducesResponseType(typeof(UserDto), StatusCodes.Status201Created)]
[ApiPermission(PermissionIds.AdminUsersCreate)]
public async Task<IActionResult> 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);
}
/// <summary>
/// Update a user.
/// </summary>
/// <param name="id">The ID of the user.</param>
/// <param name="request">The user object that needs to be updated.</param>
/// <returns>
/// 200 => User created.
/// 400 => User request not valid.
/// 404 => User not found.
/// </returns>
[HttpPut]
[Route("user-management/{id}/")]
[ProducesResponseType(typeof(UserDto), 201)]
[ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)]
[ApiPermission(PermissionIds.AdminUsersUpdate)]
public async Task<IActionResult> PutUser(string id, [FromBody] UpdateUserDto request)
{
@ -84,9 +123,18 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
/// <summary>
/// Lock a user.
/// </summary>
/// <param name="id">The ID of the user to lock.</param>
/// <returns>
/// 200 => User locked.
/// 403 => User is the current user.
/// 404 => User not found.
/// </returns>
[HttpPut]
[Route("user-management/{id}/lock/")]
[ProducesResponseType(typeof(UserDto), 201)]
[ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)]
[ApiPermission(PermissionIds.AdminUsersLock)]
public async Task<IActionResult> LockUser(string id)
{
@ -102,9 +150,18 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
/// <summary>
/// Unlock a user.
/// </summary>
/// <param name="id">The ID of the user to unlock.</param>
/// <returns>
/// 200 => User unlocked.
/// 403 => User is the current user.
/// 404 => User not found.
/// </returns>
[HttpPut]
[Route("user-management/{id}/unlock/")]
[ProducesResponseType(typeof(UserDto), 201)]
[ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)]
[ApiPermission(PermissionIds.AdminUsersUnlock)]
public async Task<IActionResult> UnlockUser(string id)
{
@ -120,6 +177,15 @@ namespace Squidex.Areas.Api.Controllers.Users
return Ok(response);
}
/// <summary>
/// Delete a User.
/// </summary>
/// <param name="id">The ID of the user to delete.</param>
/// <returns>
/// 204 => User deleted.
/// 403 => User is the current user.
/// 404 => User not found.
/// </returns>
[HttpDelete]
[Route("user-management/{id}/")]
[ProducesResponseType(StatusCodes.Status204NoContent)]

2
backend/src/Squidex/Areas/Api/Controllers/Users/UsersController.cs

@ -17,7 +17,7 @@ using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Users
{
/// <summary>
/// Readonly API to retrieve information about squidex users.
/// Update and query users.
/// </summary>
[ApiExplorerSettings(GroupName = nameof(Users))]
public sealed class UsersController : ApiController

Loading…
Cancel
Save