This commit is contained in:
2026-05-04 00:37:06 +03:30
parent 37e537f385
commit fcf02c9b7b
21 changed files with 5640 additions and 2748 deletions
+246 -153
View File
@@ -2,18 +2,23 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Query;
using xModels.Base;
using xModels.Dtos;
namespace xDataService.Interfaces {
namespace xDataService.Interfaces
{
/// <summary>
/// a Base Repository Interface for Manipulate
/// an Entity in DataBase
/// Base Repository Pattern Contracts in XDashboard's Data Service ...
/// use for Data Manipulation ...
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="TKey"></typeparam>
public interface IXBaseRepository<T, TKey> : IDisposable
where T : XBaseEntity<TKey> {
where T : XBaseEntity<TKey>
{
//
#region Add ...
/// <summary>
@@ -21,10 +26,12 @@ namespace xDataService.Interfaces {
/// </summary>
/// <param name="item"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<T> AddAsync (
Task<T> AddAsync(
T item,
bool saveChanges = true
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
@@ -32,10 +39,12 @@ namespace xDataService.Interfaces {
/// </summary>
/// <param name="item"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<T> AddOrUpdateAsync (
Task<T> AddOrUpdateAsync(
T item,
bool saveChanges = true
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
@@ -43,135 +52,12 @@ namespace xDataService.Interfaces {
/// </summary>
/// <param name="items"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task AddRangeAsync (
Task AddRangeAsync(
IEnumerable<T> items,
bool saveChanges = true
);
#endregion
//
#region Remove ...
/// <summary>
/// remove an Entity by it's Id ...
/// </summary>
/// <param name="id"></param>
/// <param name="softDelete"></param>
/// <param name="saveChanges"></param>
/// <returns></returns>
Task<T> RemoveAsync (
TKey id,
bool softDelete = true,
bool saveChanges = true
);
/// <summary>
/// remove an Entity ...
/// </summary>
/// <param name="item"></param>
/// <param name="softDelete"></param>
/// <param name="saveChanges"></param>
/// <returns></returns>
Task<T> RemoveAsync (
T item,
bool softDelete = true,
bool saveChanges = true
);
/// <summary>
/// remove a range of exists Entities ...
/// </summary>
/// <param name="items"></param>
/// <param name="softDelete"></param>
/// <param name="saveChanges"></param>
/// <returns></returns>
Task RemoveRangeAsync (
IEnumerable<T> items,
bool softDelete = true,
bool saveChanges = true
);
#endregion
//
#region Retrieve ...
/// <summary>
/// retrieve whole items as queryable ...
/// </summary>
/// <returns></returns>
IQueryable<T> AsQueryable ();
/// <summary>
/// retrieve an Entity by it's Id ...
/// </summary>
/// <param name="id"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="containsDetail"></param>
/// <returns></returns>
Task<T> GetAsync (
TKey id,
bool ignoreSoftDeleteds = true,
bool containsDetail = false
);
/// <summary>
/// retrieve all exists Entities ...
/// </summary>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="containsDetail"></param>
/// <returns></returns>
Task<IEnumerable<T>> GetAllAsync (
bool ignoreSoftDeleteds = true,
bool containsDetail = false
);
/// <summary>
/// find an Entity by providing a Conditional Expression ...
/// </summary>
/// <param name="whereClause"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="containsDetail"></param>
/// <returns></returns>
Task<T> FindOneAsync (
Expression<Func<T, bool>> whereClause,
bool ignoreSoftDeleteds = true,
bool containsDetail = false
);
/// <summary>
/// find a collection of Entities by proving a Conditional Expression ...
/// </summary>
/// <param name="whereClause"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="containsDetail"></param>
/// <returns></returns>
Task<IEnumerable<T>> FindManyAsync (
Expression<Func<T, bool>> whereClause,
bool ignoreSoftDeleteds = true,
bool containsDetail = false
);
/// <summary>
/// retrieve Entities based on XQuery Pagination structure ...
/// </summary>
/// <param name="query"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <returns></returns>
Task<XQueryResult<T>> QueryAsync (
XQuery query,
bool ignoreSoftDeleteds = true
);
/// <summary>
/// retrieve Entities based on XQuery Pagination structure by providing a Conditional Expression ...
/// </summary>
/// <param name="whereClause"></param>
/// <param name="query"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <returns></returns>
Task<XQueryResult<T>> ConditionalQueryAsync (
Expression<Func<T, bool>> whereClause,
XQuery query,
bool ignoreSoftDeleteds = true
bool saveChanges = true,
CancellationToken cancellationToken = default
);
#endregion
@@ -183,11 +69,13 @@ namespace xDataService.Interfaces {
/// <param name="id"></param>
/// <param name="item"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<T> UpdateAsync (
Task<T> UpdateAsync(
TKey id,
T item,
bool saveChanges = true
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
@@ -195,10 +83,60 @@ namespace xDataService.Interfaces {
/// </summary>
/// <param name="items"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<bool> UpdateRangeAsync (
Task<bool> UpdateRangeAsync(
IEnumerable<T> items,
bool saveChanges = true
bool saveChanges = true,
CancellationToken cancellationToken = default
);
#endregion
//
#region Remove ...
/// <summary>
/// remove an Entity by it's Id ...
/// </summary>
/// <param name="id"></param>
/// <param name="softDelete"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<T> RemoveAsync(
TKey id,
bool softDelete = true,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
/// remove an Entity ...
/// </summary>
/// <param name="item"></param>
/// <param name="softDelete"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<T> RemoveAsync(
T item,
bool softDelete = true,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
/// remove a range of exists Entities ...
/// </summary>
/// <param name="items"></param>
/// <param name="softDelete"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task RemoveRangeAsync(
IEnumerable<T> items,
bool softDelete = true,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
#endregion
@@ -208,18 +146,139 @@ namespace xDataService.Interfaces {
/// count all exists Entities ...
/// </summary>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<int> CountAsync (bool ignoreSoftDeleteds = true);
Task<int> CountAsync(
bool ignoreSoftDeleteds = true,
CancellationToken cancellationToken = default
);
/// <summary>
/// count all exists Entities Pages by providing page size ...
/// </summary>
/// <param name="pageSize"></param>
/// <param name="totalItems"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<int> PagesCountAsync (
Task<int> PagesCountAsync(
int pageSize,
int? totalItems = null
int? totalItems = null,
bool ignoreSoftDeleteds = true,
CancellationToken cancellationToken = default
);
#endregion
//
#region Retrieve ...
/// <summary>
/// retrieve whole items as queryable ...
/// </summary>
/// <param name="asNoTracking">a flag for Tracking behaviour</param>
/// <param name="predicate">an Expression for Filter Items ...</param>
/// <param name="orderBuilder">an Order Builder expression for Ordering Query ...</param>
/// <param name="includeBuilder">an Include Builder expression for Including Navigation Properties ...</param>
/// <returns></returns>
IQueryable<T> AsQueryable(
bool asNoTracking = true,
Expression<Func<T, bool>> predicate = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBuilder = null,
Func<IQueryable<T>, IIncludableQueryable<T, object>> includeBuilder = null
);
/// <summary>
/// retrieve an Entity by it's Id ...
/// </summary>
/// <param name="id"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<T> GetAsync(
TKey id,
bool ignoreSoftDeleteds = true,
Func<IQueryable<T>, IIncludableQueryable<T, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// retrieve all exists Entities ...
/// </summary>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="orderBuilder"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<IEnumerable<T>> GetAllAsync(
bool ignoreSoftDeleteds = true,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBuilder = null,
Func<IQueryable<T>, IIncludableQueryable<T, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// retrieve all exists Entities
/// as Async Enumerable ...
/// </summary>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="orderBuilder"></param>
/// <param name="includeBuilder"></param>
/// <returns></returns>
IAsyncEnumerable<T> GetAllAsAsyncEnumerable(
bool ignoreSoftDeleteds = true,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBuilder = null,
Func<IQueryable<T>, IIncludableQueryable<T, object>> includeBuilder = null
);
/// <summary>
/// find an Entity by providing a Conditional Expression ...
/// </summary>
/// <param name="predicate"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<T> FindOneAsync(
Expression<Func<T, bool>> predicate,
bool ignoreSoftDeleteds = true,
Func<IQueryable<T>, IIncludableQueryable<T, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// find a collection of Entities by proving a Conditional Expression ...
/// </summary>
/// <param name="predicate"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="orderBuilder"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<IEnumerable<T>> FindManyAsync(
Expression<Func<T, bool>> predicate,
bool ignoreSoftDeleteds = true,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBuilder = null,
Func<IQueryable<T>, IIncludableQueryable<T, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// retrieve Entities based on XQuery Pagination structure ...
/// </summary>
/// <param name="query"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="predicate"></param>
/// <param name="orderBuilder"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<XQueryResult<T>> QueryAsync(
XQuery query,
bool ignoreSoftDeleteds = true,
Expression<Func<T, bool>> predicate = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBuilder = null,
Func<IQueryable<T>, IIncludableQueryable<T, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
#endregion
@@ -230,10 +289,12 @@ namespace xDataService.Interfaces {
/// </summary>
/// <param name="id"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<bool> IsExistsAsync (
Task<bool> IsExistsAsync(
TKey id,
bool ignoreSoftDeleteds = true
bool ignoreSoftDeleteds = true,
CancellationToken cancellationToken = default
);
#endregion
@@ -243,31 +304,63 @@ namespace xDataService.Interfaces {
/// Save all unsaved Transactions on DbContext ...
/// used fo Unit Of Works Design Pattern ...
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<int> SaveChangesAsync ();
Task<int> SaveChangesAsync(
CancellationToken cancellationToken = default
);
#endregion
//
#region Key ...
TKey GetKey (T item);
/// <summary>
/// Retrieve Key of Entity ...
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
TKey GetKey(T item);
void SetKey (
/// <summary>
/// Set Key of Entity ...
/// </summary>
/// <param name="item"></param>
/// <param name="id"></param>
void SetKey(
ref T item,
TKey id
);
Task<T> HandleKeyAsync (T item);
/// <summary>
/// Handle Checking Key ...
/// </summary>
/// <param name="item"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<T> HandleKeyAsync(
T item,
CancellationToken cancellationToken = default
);
#endregion
//
#region Detach ...
void Detach (T item);
/// <summary>
/// Detach an Entity ...
/// </summary>
/// <param name="item"></param>
void Detach(T item);
void Detach (IEnumerable<T> items);
/// <summary>
/// Detach an Enumerable of Entities ...
/// </summary>
/// <param name="items"></param>
void Detach(IEnumerable<T> items);
void Detach (XQueryResult<T> query);
void Detach (XPageResponse<T> page);
/// <summary>
/// Detach a Query Result of Entity ...
/// </summary>
/// <param name="query"></param>
void Detach(XQueryResult<T> query);
#endregion
}
}
+299
View File
@@ -0,0 +1,299 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using AutoMapper;
using Microsoft.EntityFrameworkCore.Query;
using xModels.Base;
using xModels.Dtos;
namespace xDataService.Interfaces
{
/// <summary>
/// an Interface for Manipulating Data Using Services based on Dto Mapping ...
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="TDto"></typeparam>
/// <typeparam name="TKey"></typeparam>
public interface IXBaseRepositoryService<TEntity, TDto, TKey> : IDisposable
where TEntity : XBaseEntity<TKey>
where TDto : XBaseEntityDto<TKey>
{
//
#region Properties ...
/// <summary>
/// Mapper Instance ...
/// </summary>
IMapper Mapper { get; }
/// <summary>
/// Repository Implementation for Data Manipulations ...
/// </summary>
IXBaseRepository<TEntity, TKey> Repository { get; }
/// <summary>
/// Mapping Profile Configuration ...
///
/// this Configuration used for Mapping TEntity to Dto and reverse ...
/// default mapping prepared on Constructing time, other custom maps
/// must handled manually if required ...
/// </summary>
MapperConfiguration MapperConfiguration { get; }
#endregion
//
#region Actions ...
//
#region Add ...
/// <summary>
/// add a new Dto ...
/// </summary>
/// <param name="item"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<TDto> AddAsync(
TDto item,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
/// add or update a Dto (add if not exists/update if exists) ...
/// </summary>
/// <param name="item"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<TDto> AddOrUpdateAsync(
TDto item,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
/// add a range of new Dtos ...
/// </summary>
/// <param name="items"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task AddRangeAsync(
IEnumerable<TDto> items,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
#endregion
//
#region Update ...
/// <summary>
/// Update an Dto values ...
/// </summary>
/// <param name="id"></param>
/// <param name="item"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<TDto> UpdateAsync(
TKey id,
TDto item,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
/// Update a range of Dtos ...
/// </summary>
/// <param name="items"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<bool> UpdateRangeAsync(
IEnumerable<TDto> items,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
#endregion
//
#region Remove ...
/// <summary>
/// remove an Dto by it's Id ...
/// </summary>
/// <param name="id"></param>
/// <param name="softDelete"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<TDto> RemoveAsync(
TKey id,
bool softDelete = true,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
/// remove an Dto ...
/// </summary>
/// <param name="item"></param>
/// <param name="softDelete"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<TDto> RemoveAsync(
TDto item,
bool softDelete = true,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
/// <summary>
/// remove a range of exists Dtos ...
/// </summary>
/// <param name="items"></param>
/// <param name="softDelete"></param>
/// <param name="saveChanges"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task RemoveRangeAsync(
IEnumerable<TDto> items,
bool softDelete = true,
bool saveChanges = true,
CancellationToken cancellationToken = default
);
#endregion
//
#region Count ...
/// <summary>
/// count all exists Dtos ...
/// </summary>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<int> CountAsync(
bool ignoreSoftDeleteds = true,
CancellationToken cancellationToken = default
);
/// <summary>
/// count all exists Entities Pages by providing page size ...
/// </summary>
/// <param name="pageSize"></param>
/// <param name="totalItems"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<int> PagesCountAsync(
int pageSize,
int? totalItems = null,
bool ignoreSoftDeleteds = true,
CancellationToken cancellationToken = default
);
#endregion
//
#region Retrieve ...
/// <summary>
/// retrieve an Dto by it's Id ...
/// </summary>
/// <param name="id"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<TDto> GetAsync(
TKey id,
bool ignoreSoftDeleteds = true,
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// retrieve all exists Dtos ...
/// </summary>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="orderBuilder"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<IEnumerable<TDto>> GetAllAsync(
bool ignoreSoftDeleteds = true,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBuilder = null,
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// find an Dto by providing a Conditional Expression ...
/// </summary>
/// <param name="predicate"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<TDto> FindOneAsync(
Expression<Func<TEntity, bool>> predicate,
bool ignoreSoftDeleteds = true,
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// find a collection of Dtos by proving a Conditional Expression ...
/// </summary>
/// <param name="predicate"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="orderBuilder"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<IEnumerable<TDto>> FindManyAsync(
Expression<Func<TEntity, bool>> predicate,
bool ignoreSoftDeleteds = true,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBuilder = null,
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// retrieve Dtos based on XQuery Pagination structure ...
/// </summary>
/// <param name="query"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="predicate"></param>
/// <param name="orderBuilder"></param>
/// <param name="includeBuilder"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<XQueryResult<TDto>> QueryAsync(
XQuery query,
bool ignoreSoftDeleteds = true,
Expression<Func<TEntity, bool>> predicate = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBuilder = null,
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> includeBuilder = null,
CancellationToken cancellationToken = default
);
#endregion
//
#region Exists ...
/// <summary>
/// Check a Dto exists or not ...
/// </summary>
/// <param name="id"></param>
/// <param name="ignoreSoftDeleteds"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<bool> IsExistsAsync(
TKey id,
bool ignoreSoftDeleteds = true,
CancellationToken cancellationToken = default
);
#endregion
#endregion
}
}
+123
View File
@@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore.Query;
using xModels.Base;
using xModels.Dtos;
namespace xDataService.Interfaces
{
/// <summary>
/// an Interface for Base Repository Actions Providing Using Controllers ...
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="TDto"></typeparam>
/// <typeparam name="TKey"></typeparam>
public interface IXEntityControllerActions<TEntity, TKey>
where TEntity : XBaseEntity<TKey>
{
//
IXBaseRepository<TEntity, TKey> Repository { get; }
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> DefaultOrderBuilder { get; }
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> DefaultIncludeBuilder { get; }
//
#region Add ...
Task<ActionResult<TEntity>> Add(
TEntity item,
CancellationToken cancellationToken = default
);
Task<ActionResult<TEntity>> AddOrUpdate(
TEntity item,
CancellationToken cancellationToken = default
);
Task<ActionResult> AddMany(
XBaseRangeRequest<TEntity> request,
CancellationToken cancellationToken = default
);
#endregion
//
#region Retrieve ...
Task<ActionResult<TEntity>> Get(
[FromRoute] TKey id,
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
Task<ActionResult<IEnumerable<TEntity>>> GetAll(
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
Task<ActionResult<TEntity>> FindOne(
[FromRoute] string query,
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
Task<ActionResult<IEnumerable<TEntity>>> FindMany(
[FromRoute] string query,
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
Task<ActionResult<XQueryResult<TEntity>>> Query(
[FromQuery] XQuery query,
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
#endregion
//
#region Update ...
Task<ActionResult<TEntity>> Update(
[FromRoute] TKey id,
[FromBody] TEntity item,
CancellationToken cancellationToken = default
);
Task<ActionResult<bool>> UpdateMany(
[FromBody] XBaseRangeRequest<TEntity> request,
CancellationToken cancellationToken = default
);
#endregion
//
#region Exists ...
Task<ActionResult<bool>> IsExists(
[FromRoute] TKey id,
[FromQuery] bool ignoreSoftDeletedss = true,
CancellationToken cancellationToken = default
);
#endregion
//
#region Remove ...
Task<ActionResult<TEntity>> Remove(
[FromRoute] TKey id,
[FromQuery] bool softDelete = true,
CancellationToken cancellationToken = default
);
Task<ActionResult> RemoveMany(
[FromBody] XBaseRangeRequest<TEntity> request,
[FromQuery] bool softDelete = true,
CancellationToken cancellationToken = default
);
#endregion
}
}
+124
View File
@@ -0,0 +1,124 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore.Query;
using xModels.Base;
using xModels.Dtos;
namespace xDataService.Interfaces
{
/// <summary>
/// an Interface for Base RepositoryService Actions Providing Using Controllers ...
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="TDto"></typeparam>
/// <typeparam name="TKey"></typeparam>
public interface IXEntityDtoControllerActions<TEntity, TDto, TKey>
where TEntity : XBaseEntity<TKey>
where TDto : XBaseEntityDto<TKey>
{
//
IXBaseRepositoryService<TEntity, TDto, TKey> RepositoryService { get; }
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> DefaultOrderBuilder { get; }
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> DefaultIncludeBuilder { get; }
//
#region Add ...
Task<ActionResult<TDto>> Add(
TDto item,
CancellationToken cancellationToken = default
);
Task<ActionResult<TDto>> AddOrUpdate(
TDto item,
CancellationToken cancellationToken = default
);
Task<ActionResult> AddMany(
XBaseRangeRequest<TDto> request,
CancellationToken cancellationToken = default
);
#endregion
//
#region Retrieve ...
Task<ActionResult<TDto>> Get(
[FromRoute] TKey id,
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
Task<ActionResult<IEnumerable<TDto>>> GetAll(
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
Task<ActionResult<TDto>> FindOne(
[FromRoute] string query,
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
Task<ActionResult<IEnumerable<TDto>>> FindMany(
[FromRoute] string query,
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
Task<ActionResult<XQueryResult<TDto>>> Query(
[FromQuery] XQuery query,
[FromQuery] bool ignoreSoftDeleteds = true,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
);
#endregion
//
#region Update ...
Task<ActionResult<TDto>> Update(
[FromRoute] TKey id,
[FromBody] TDto item,
CancellationToken cancellationToken = default
);
Task<ActionResult<bool>> UpdateMany(
[FromBody] XBaseRangeRequest<TDto> request,
CancellationToken cancellationToken = default
);
#endregion
//
#region Exists ...
Task<ActionResult<bool>> IsExists(
[FromRoute] TKey id,
[FromQuery] bool ignoreSoftDeletedss = true,
CancellationToken cancellationToken = default
);
#endregion
//
#region Remove ...
Task<ActionResult<TDto>> Remove(
[FromRoute] TKey id,
[FromQuery] bool softDelete = true,
CancellationToken cancellationToken = default
);
Task<ActionResult> RemoveMany(
[FromBody] XBaseRangeRequest<TDto> request,
[FromQuery] bool softDelete = true,
CancellationToken cancellationToken = default
);
#endregion
}
}
+3 -1
View File
@@ -1,3 +1,4 @@
using System.Threading;
using System.Threading.Tasks;
using xModels.Base;
@@ -6,7 +7,8 @@ namespace xDataService.Interfaces {
where TEntity : XBaseEntity<TKey> {
bool IsEmpty (TKey id);
Task<TKey> GenerateKey (
IXBaseRepository<TEntity, TKey> repository
IXBaseRepository<TEntity, TKey> repository,
CancellationToken cancellationToken = default
);
}
}
+4 -1
View File
@@ -1,4 +1,5 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using xDataService.Db;
@@ -15,6 +16,8 @@ namespace xDataService.Interfaces {
TDbContext DbContext { get; }
DbSet<T> GetDbSet<T, TKey> () where T : XBaseEntity<TKey>;
int SaveChanges ();
Task<int> SaveChangesAsync ();
Task<int> SaveChangesAsync (
CancellationToken cancellationToken = default
);
}
}