V14/feature/management tree count by take zero (#15308)

* Allow Tree endpoints that query entities to return count without entity data

* Apply count by take 0 in FileSystem Endpoints

* Apply count by take 0 in Dictionary Endpoints

* Apply count by take 0 in RootRelationType Endpoints

* Revert PaginationService takeZero flag as it only guards against things that already blow up

* Mark PagedResult as Obsolete as we want to step away from classic pagination system to skip/take

* Pushed management api RelationType pagination and async preperation down to the service layer

* Scope fix and allocation optimizations

* Pushed management api dictionary pagination and down to the service layer

Also did some nice allocation optimizations

* PR feedback + related strange count behaviour

* Moved count by pagesize logic from EntryController to service

* A tiny bit of formatting and comments

* Fix bad count filter logic

* Added integration tests for creating datatypes in a folder

* Added tests for count testing on TreeControllers

- ChildrenDataType
- RootDataType
- ChildrenDictionary
- RootDictionary
- ChildrenDocument
- RootDocument
- RootBluePrint
- RootDocumentType
- ChildrenDocumentType

* Revert "Added tests for count testing on TreeControllers", should be on services

This reverts commit ee2501fe620a584bba13ecd4fdce8142133fd82b.
This reverts commit 808d5b276fad267a645e474ead3278d4bb79d0c4.

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: kjac <kja@umbraco.dk>
Co-authored-by: Andreas Zerbst <andr317c@live.dk>
This commit is contained in:
Sven Geusens
2024-01-02 13:53:24 +01:00
committed by GitHub
parent f3cb8fe117
commit c937d0f2ed
22 changed files with 184 additions and 70 deletions

View File

@@ -30,6 +30,30 @@ internal class EntityRepository : RepositoryBase, IEntityRepositoryExtended
#region Repository
public int CountByQuery(IQuery<IUmbracoEntity> query, Guid objectType, IQuery<IUmbracoEntity>? filter)
{
Sql<ISqlContext> sql = Sql();
sql.SelectCount();
sql
.From<NodeDto>();
sql.WhereIn<NodeDto>(x => x.NodeObjectType, new[] { objectType } );
foreach (Tuple<string, object[]> queryClause in query.GetWhereClauses())
{
sql.Where(queryClause.Item1, queryClause.Item2);
}
if (filter is not null)
{
foreach (Tuple<string, object[]> filterClause in filter.GetWhereClauses())
{
sql.Where(filterClause.Item1, filterClause.Item2);
}
}
return Database.ExecuteScalar<int>(sql);
}
public IEnumerable<IEntitySlim> GetPagedResultsByQuery(IQuery<IUmbracoEntity> query, Guid objectType,
long pageIndex, int pageSize, out long totalRecords,
IQuery<IUmbracoEntity>? filter, Ordering? ordering) =>