Content and media type CRUD controllers and services (#14665)

* Add GetAsync method

* Fix up delete document type controller

* Add scope to delete async

* Add some scaffolding

* Add create model

* Start working on validation

* Move validation to its own service

* Use GetAllAsync instead of GetAsync

* Add initial composition support

Still need to figure out some kinks

* Validate compositions when creating

* Add initial folder support

* Initial handling of generic properties

* Add operation status responses

* Move create operation into service

* Add first test

* Fix issued shown by test

* Ensure a specific key can be specified when creating

* Rename container id to container key

Let's try and be consistent

* Create basic composition test

* Ensure new property groups are created with the correct key

* Add test showing property type issue

* Fix property types not using the expected key.

* Validate against model fetched from content type service

Just to make sure nothing explodes on the round trip

* Make helper for creating create models

* Add helper for creating container

* Make helper methods simpler to use

* Add test for compositions using compositions

* Add more composition tests

* Fix bug allowing element types to be composed by non element types

* Remove validators

This can just be a part of the editing service

* Minor cleanup

* Ensure that multiple levels of inheritance is possible

* Ensure doctype cannot be used as both composition and inheritance on the same doctype

* Ensure no duplicate aliases from composition and that compositions exists

* Minor cleanup

* Address todos

* Add SaveAsync method

* Renamed some models

* Rename from DocumentType to ContentType

* Clarify ParentKey as being container only + untangle things a tiny bit

* Clean out another TODO (less duplicate code) + more tests

* Refactor for reuse across different content types + add media type editing service + unit tests

* Refactor in preparation for update handling

* More tests + fixed bugs found while testing

* Simplify things a bit

* Content type update + a lot of unit tests + some refactor + fix bugs found while testing

* Begin building presentation factories for mapping view models to editing models

* Use async save

* Mapping factories and some clean-up

* Rename Key to Id (ParentKey to ParentId)

* Fix slight typo

* Use editing service in document type controllers and introduce media type controllers

* Validate containers and align container aliases with the current backoffice

* Remove ParentId from response

* Fix scope handling in DeleteAsync

* Refactor ContentTypeSort

* A little renaming for clarity + safeguard against changes to inheritance

* Persist allowed content types

* Fix bad merge + update controller response annotations

* Update OpenAPI JSON

* Update src/Umbraco.Cms.Api.Management/Controllers/DocumentType/DocumentTypeControllerBase.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Fix review comments

* Update usage of MapCreateAsync to ValidateAndMapForCreationAsync

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
This commit is contained in:
Kenn Jacobsen
2023-08-17 12:28:16 +02:00
committed by GitHub
parent a1f6531453
commit 0096addcb9
100 changed files with 5074 additions and 560 deletions

View File

@@ -10,12 +10,12 @@ namespace Umbraco.Cms.Tests.Common.Builders;
public class ContentTypeSortBuilder
: ChildBuilderBase<ContentTypeBuilder, ContentTypeSort>,
IWithIdBuilder,
IWithKeyBuilder,
IWithAliasBuilder,
IWithSortOrderBuilder
{
private Guid? _key;
private string _alias;
private int? _id;
private int? _sortOrder;
public ContentTypeSortBuilder()
@@ -34,10 +34,10 @@ public class ContentTypeSortBuilder
set => _alias = value;
}
int? IWithIdBuilder.Id
Guid? IWithKeyBuilder.Key
{
get => _id;
set => _id = value;
get => _key;
set => _key = value;
}
int? IWithSortOrderBuilder.SortOrder
@@ -48,11 +48,10 @@ public class ContentTypeSortBuilder
public override ContentTypeSort Build()
{
var id = _id ?? 1;
var alias = _alias ?? Guid.NewGuid().ToString().ToCamelCase();
var sortOrder = _sortOrder ?? 0;
var key = Guid.NewGuid();
var key = _key ?? Guid.NewGuid();
return new ContentTypeSort(new Lazy<int>(() => id), key, sortOrder, alias);
return new ContentTypeSort(key, sortOrder, alias);
}
}

View File

@@ -56,12 +56,12 @@ public static class ContentTypeBuilderExtensions
.Done()
.WithDefaultTemplateId(200)
.AddAllowedContentType()
.WithId(888)
.WithKey(new Guid("0793C350-04C4-475C-AC09-1D4B7CFD4DF4"))
.WithAlias("sub")
.WithSortOrder(8)
.Done()
.AddAllowedContentType()
.WithId(889)
.WithKey(new Guid("9A485133-BCD8-4996-8D1C-64B5600B6A19"))
.WithAlias("sub2")
.WithSortOrder(9)
.Done()