* Add scaffolding * Entities not Entitys * Remove unececary obsoleted constructor * Implement create script * Return a simplified ScriptFile instead of IScript That file abstraction seems way too bloated, containing a lot of stuff that's not relevant for files, such as IDs and keys. * Use IScript instead of custom return model * Add validation when creating script * Add Get script endpoint * Add response types * Add Delete * Throw if user key not found * Remove unused maapper * Add update endpoint * Add Get by path * Add create folder endpoint * Don't pass performingUserId to folder creation * Remove update folder * Add delete folder endpoint * Use specific ScriptFolderOperationStatus instead of ScriptOperationStatus * Add OperationStatusResult * Check folder for invalid name * Check name for invalid characters * Add partial view snippet endpoint * Start working on CreatePartialView * Add create partial view endpoint * Retrieve key from audit method * Add operation status results * Add Get endpoint * Return 201 when creating * Add update partial view endpoint * Add delete endpoint * Add response types * Add folder base implementation * Add folder endpoints * User property for allowed file extensions * Rename async method to async * Break snippet into endpoint in two * Make content non-nullable * Remove IService * Add get by path * Add viewmodels * Add create and update models * Add create stylesheet * Add update endpoint * Rename StylesheetControllerBase to StylesheetControllerBase * Add stylesheet delete * Rename controller bases * Add stylesheet folders * Add status results * Add response types to folders * Add richtext rules endpoints * Add Get all endpoint * Add get rules by path endpoint * Aling validates so they're not async These are private methods, so there's no reason to make them preemptively async * Add template obsoletions to interface * Add stream methods This is evidently used by deploy 🤷 * Obsolete stylesheet operations * Add get and getall across all services * Obsolete script operations * Obsolete old partial view methods * Add some method docs * Add compatibility suppression * Update OpenApi.json * Rename action * formatting * Fix import * add expression body * Invert if * Move base on own line * Rename file * Rename to all * Change to stylesheet instead of script * Add Umbraco.Code.MapAll to map definitions * Add comment about auditing * use publish cancelable async * use expression body * formatting * fix to use pattern matching --------- Co-authored-by: Zeegaan <nge@umbraco.dk>
51 lines
2.4 KiB
C#
51 lines
2.4 KiB
C#
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Umbraco.Cms.Api.Common.Builders;
|
|
using Umbraco.Cms.Api.Management.Routing;
|
|
using Umbraco.Cms.Core;
|
|
using Umbraco.Cms.Core.Services.OperationStatus;
|
|
|
|
namespace Umbraco.Cms.Api.Management.Controllers.Script;
|
|
|
|
[ApiVersion("1.0")]
|
|
[ApiController]
|
|
[VersionedApiBackOfficeRoute($"{Constants.UdiEntityType.Script}")]
|
|
[ApiExplorerSettings(GroupName = nameof(Constants.UdiEntityType.Script))]
|
|
public class ScriptControllerBase : ManagementApiControllerBase
|
|
{
|
|
protected IActionResult ScriptOperationStatusResult(ScriptOperationStatus status) =>
|
|
status switch
|
|
{
|
|
ScriptOperationStatus.Success => Ok(),
|
|
ScriptOperationStatus.AlreadyExists => BadRequest(new ProblemDetailsBuilder()
|
|
.WithTitle("Script already exists")
|
|
.WithDetail("A script with the same path already exists")
|
|
.Build()),
|
|
ScriptOperationStatus.CancelledByNotification => BadRequest(new ProblemDetailsBuilder()
|
|
.WithTitle("Cancelled by notification")
|
|
.WithDetail("A script notification handler prevented the script operation.")
|
|
.Build()),
|
|
ScriptOperationStatus.InvalidFileExtension => BadRequest(new ProblemDetailsBuilder()
|
|
.WithTitle("Invalid file extension")
|
|
.WithDetail("The file extension is not valid for a script.")
|
|
.Build()),
|
|
ScriptOperationStatus.ParentNotFound => NotFound(new ProblemDetailsBuilder()
|
|
.WithTitle("Parent not found")
|
|
.WithDetail("The parent folder was not found.")
|
|
.Build()),
|
|
ScriptOperationStatus.PathTooLong => BadRequest(new ProblemDetailsBuilder()
|
|
.WithTitle("Path too long")
|
|
.WithDetail("The file path is too long.")
|
|
.Build()),
|
|
ScriptOperationStatus.NotFound => NotFound(new ProblemDetailsBuilder()
|
|
.WithTitle("Script not found")
|
|
.WithDetail("The script was not found.")
|
|
.Build()),
|
|
ScriptOperationStatus.InvalidName => BadRequest(new ProblemDetailsBuilder()
|
|
.WithTitle("Invalid name")
|
|
.WithDetail("The script name is invalid.")
|
|
.Build()),
|
|
_ => StatusCode(StatusCodes.Status500InternalServerError, "Unknown script operation status")
|
|
};
|
|
}
|