### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Configurations\XCategoryServiceConfiguration.cs
using xCategoryService.Models.Dtos;
namespace xCategoryService.Configurations
{
///
/// a Configuration Class for Providing Data to Configure XCategoryService ...
///
public class XCategoryServiceConfiguration
{
///
/// a List of Categories for Seeding ...
///
public XCategoryResourceDto[] Categories { get; set; } = [];
///
/// a List of SubCategories for Seeding ...
///
public XSubCategoryResourceDto[] SubCategories { get; set; } = [];
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Configurations\Entities\XCategoryEntityConfiguration.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using xCategoryService.Constants;
using xCategoryService.Models.Entities;
using xDataService.Providers;
namespace xCategoryService.Configurations.Entities
{
public class XCategoryEntityConfiguration : XBaseEntityTypeConfiguration
{
public override void Configure(EntityTypeBuilder builder)
{
builder.ToTable(XCategoryServiceConstants.XCategoryTable);
}
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Configurations\Entities\XSubCategoryEntityConfiguration.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using xCategoryService.Constants;
using xCategoryService.Models.Entities;
using xDataService.Providers;
namespace xCategoryService.Configurations.Entities
{
public class XSubCategoryEntityConfiguration : XBaseEntityTypeConfiguration
{
public override void Configure(EntityTypeBuilder builder)
{
builder.ToTable(XCategoryServiceConstants.XSubCategoryTable);
}
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Constants\ConfigurationNodeNames.cs
namespace xCategoryService.Constants
{
public partial struct ConfigurationNodeNames
{
public const string CATEGORY_SERVICE_NODE = "CategoryServiceConfiguration";
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Constants\XCategoryServiceConstants.cs
namespace xCategoryService.Constants
{
public struct XCategoryServiceConstants
{
//
// Service Extensions Log Tag ...
public const string XCategoryServiceDILogTag = "XCategoryService";
//
// Table Mapping Identifiers ...
public const string XCategoryTable = "Categories";
public const string XSubCategoryTable = "SubCategories";
//
// GraphQL Collection Mappings ...
public const string XCategorySingleName = "category";
public const string XCategoryCollectionName = "categories";
public const string XSubCategorySingleName = "subCategory";
public const string XSubCategoryCollectionName = "subCategories";
//
// Hubs ...
public const string XCategoryDtoHub = "categoryDto";
public const string XCategoryEntityHub = "categoryEntity";
public const string XSubCategoryDtoHub = "subCategoryDto";
public const string XSubCategoryEntityHub = "subCategoryEntity";
//
// Custome Constants ...
public const string SubCategoryReference = "SubCat";
public const string CategoryTitleResourceIdentifier = "CatT";
public const string CategoryDescriptionResourceIdentifier = "CatD";
public const string SubCategoryTitleResourceIdentifier = "SubCatT";
public const string SubCategoryDescriptionResourceIdentifier = "SubCatD";
//
// EF Repositories Helper Extensions ...
public const string GetXCategoryEFRepositoryDescriptor = "GetXCategoryEFRepositoryDescriptor";
public const string GetXSubCategoryEFRepositoryDescriptor = "GetXSubCategoryEFRepositoryDescriptor";
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XCategoryProviderControllerBase.cs
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 Microsoft.Extensions.Logging;
using xCategoryService.Interfaces;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Dtos;
using xCommons.Configurations;
using xCommons.Extensions;
using xCommons.Providers;
using xExceptions.Constants;
using xIdentityService.Interfaces;
using xModels.Dtos;
using xPushService.Controllers;
namespace xCategoryService.Controllers
{
public abstract class XCategoryProviderControllerBase : XBaseProvidedController, IXCategoryProviderController
{
private readonly IXCategoryProvider provider;
protected XCategoryProviderControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
IXIdentityProvider identityProvider,
XValidationProvider validationProvider,
IXCategoryProvider provider,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
identityProvider,
validationProvider,
provider,
defaultOrderBuilder,
defaultIncludeBuilder
)
{
this.provider = provider;
}
//
#region Overrides ...
[NonAction]
[HttpGet("{id}")]
public override async Task> Get(
[FromRoute] int id,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.Get(
id: id,
useDefaultIncludes: useDefaultIncludes,
cancellationToken: cancellationToken
);
}
[NonAction]
[HttpGet("")]
public override async Task>> GetAll(
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.GetAll(
useDefaultOrders: useDefaultOrders,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpGet("Find/One")]
public override async Task> FindOne(
[FromRoute] string query,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.FindOne(
query: query,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpGet("Find/Many")]
public override async Task>> FindMany(
[FromRoute] string query,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.FindMany(
query: query,
useDefaultOrders: useDefaultOrders,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpGet("Query")]
public override async Task>> Query(
[FromQuery] XQuery query,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.Query(
query: query,
useDefaultOrders: useDefaultOrders,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpGet("Query/Owned")]
public override async Task>> QueryOwned(
[FromQuery] XQuery query,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.QueryOwned(
query: query,
useDefaultOrders: useDefaultOrders,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpPost("")]
public override async Task> Add(
[FromBody] XCategoryDto item,
CancellationToken cancellationToken = default
)
{
//
return await base.Add(
item: item,
cancellationToken: cancellationToken
);
}
[NonAction]
[HttpPut("{id}")]
public override async Task> Update(
[FromRoute] int id,
[FromBody] XCategoryDto item,
CancellationToken cancellationToken = default
)
{
//
return await base.Update(
id: id,
item: item,
cancellationToken: cancellationToken
);
}
[NonAction]
[HttpDelete("{id}")]
public override async Task> Remove(
[FromRoute] int id,
CancellationToken cancellationToken = default
)
{
//
return await base.Remove(
id: id,
cancellationToken: cancellationToken
);
}
#endregion
//
#region Actions ...
///
/// Check Has Specified Locale or not ...
///
///
///
///
///
[HttpGet("Resources/{id}/HasLocale")]
public virtual async Task> HasLocale(
[FromRoute] int id,
[FromQuery] string language,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid ||
!id.IsValidIntId())
{
XException.InvalidArgs.Throw();
}
ValidationProvider.NotEmpty(language);
//
var result = await provider.HasLocale(
id: id,
language: language,
cancellationToken: cancellationToken
);
//
return Ok(result);
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Load an Item by all of it's Related Translations ...
///
///
///
///
[HttpGet("Resources/{id}")]
public virtual async Task> GetResource(
[FromRoute] int id,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid ||
!id.IsValidIntId())
{
XException.InvalidArgs.Throw();
}
//
var result = await provider.GetResource(
id: id,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Add Category Item for Specified Language ...
///
///
///
///
///
[HttpPost("Resources")]
public virtual async Task> Add(
[FromBody] XCategoryDto item,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(item)
.AddNotEmpty(language)
.AddNotEmpty(item.Title)
.AddNotEmpty(item.Description)
.ValidateGroupAsync();
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.Add(
item: item,
language: language,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Add Category Item for by It's Locales ...
///
///
///
///
[HttpPost("Resources/AddResource")]
public virtual async Task> AddResource(
[FromBody] XCategoryResourceDto item,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(item)
.AddNotNull(item.Titles)
.AddNotZeroChilds(item.Titles.Locales)
.ValidateGroupAsync();
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.AddResource(
item: item,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Remove Item for Specified Language ...
///
///
/// if null, Remove All
///
///
[HttpDelete("Resources/{id}")]
public virtual async Task> Remove(
[FromRoute] int id,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid ||
!id.IsValidIntId())
{
XException.InvalidArgs.Throw();
}
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.Remove(
id: id,
language: language,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Update a Category Item for Specified Language ...
///
///
///
///
///
///
[HttpPut("Resources/{id}")]
public virtual async Task> Update(
[FromRoute] int id,
[FromBody] XCategoryDto item,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid ||
!id.IsValidIntId())
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(item)
.AddNotEmpty(language)
.AddNotEmpty(item.Title)
.AddNotEmpty(item.Description)
.ValidateGroupAsync();
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.Update(
id: id,
item: item,
language: language,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Refresh a Resource ...
///
///
///
///
[HttpPost("Resources/Refresh")]
public virtual async Task> Refresh(
[FromBody] XCategoryResourceDto resource,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(resource)
.AddNotNull(resource.Item)
.ValidateGroupAsync();
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.Refresh(
resource: resource,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Get All Resources ...
///
///
///
[HttpGet("Resources/All")]
public virtual async Task>> GetAllResources(
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
//
var result = await provider.GetAllResources(
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Find One Resource ...
///
///
///
///
[HttpGet("Resources/Find/One")]
public virtual async Task> FindOneResource(
[FromQuery] string query,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotEmpty(query)
.ValidateGroupAsync();
//
var result = await provider.FindOneResource(
cancellationToken: cancellationToken,
predicate: x => x.PropValuesContains(query)
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Find Many Resource ...
///
///
///
///
[HttpGet("Resources/Find/Many")]
public virtual async Task>> FindManyResource(
[FromQuery] string query,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotEmpty(query)
.ValidateGroupAsync();
//
var result = await provider.FindManyResource(
cancellationToken: cancellationToken,
predicate: x => x.PropValuesContains(query),
orderBuilder: x => x.OrderBy(y => y.Item.Id)
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Retrieve Resources by Query Pattern ...
///
///
///
///
[HttpGet("Resources/Query")]
public virtual async Task>> QueryResources(
[FromQuery] XQuery query = null,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(query)
.ValidateGroupAsync();
//
var result = await provider.QueryResources(
query: query,
predicate: null,
cancellationToken: cancellationToken,
orderBuilder: x => x.OrderBy(y => y.Item.Id)
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
#endregion
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XCategoryRepositoryControllerBase.cs
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.Extensions.Logging;
using xCategoryService.Interfaces.Entities;
using xCategoryService.Models.Entities;
using xCommons.Configurations;
using xCommons.Providers;
using xDataService.Controllers;
using xDataService.Interfaces;
namespace xCategoryService.Controllers
{
public abstract class XCategoryRepositoryControllerBase : XBaseRepositoryController, IXBaseRepositoryController
{
protected XCategoryRepositoryControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
XValidationProvider validationProvider,
IXCategoryRepository repository,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
validationProvider,
repository,
defaultOrderBuilder,
defaultIncludeBuilder
)
{ }
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XCategoryRepositoryProviderControllerBase.cs
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.Extensions.Logging;
using xCategoryService.Interfaces.Entities;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Entities;
using xCommons.Configurations;
using xCommons.Providers;
using xIdentityService.Interfaces;
using xPushService.Controllers;
using xPushService.Interfaces;
namespace xCategoryService.Controllers
{
public abstract class XCategoryRepositoryProviderControllerBase : XBaseRepositoryProviderController, IXBaseRepositoryProviderController
{
protected XCategoryRepositoryProviderControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
IXIdentityProvider identityProvider,
XValidationProvider validationProvider,
IXCategoryRepositoryProvider provider,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
identityProvider,
validationProvider,
provider,
defaultOrderBuilder,
defaultIncludeBuilder
)
{ }
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XCategoryServiceControllerBase.cs
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.Extensions.Logging;
using xCategoryService.Interfaces.Dtos;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCommons.Configurations;
using xCommons.Providers;
using xDataService.Controllers;
using xDataService.Interfaces;
namespace xCategoryService.Controllers
{
public abstract class XCategoryServiceControllerBase : XBaseServiceController, IXBaseServiceController
{
protected XCategoryServiceControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
XValidationProvider validationProvider,
IXCategoryRepositoryService repositoryService,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
validationProvider,
repositoryService,
defaultOrderBuilder,
defaultIncludeBuilder
)
{ }
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XCategoryServiceProviderControllerBase.cs
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.Extensions.Logging;
using xCategoryService.Interfaces.Dtos;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Dtos;
using xCommons.Configurations;
using xCommons.Providers;
using xIdentityService.Interfaces;
using xPushService.Controllers;
using xPushService.Interfaces;
namespace xCategoryService.Controllers
{
public abstract class XCategoryServiceProviderControllerBase : XBaseServiceProviderController, IXBaseServiceProviderController
{
protected XCategoryServiceProviderControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
IXIdentityProvider identityProvider,
XValidationProvider validationProvider,
IXCategoryServiceProvider provider,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
identityProvider,
validationProvider,
provider,
defaultOrderBuilder,
defaultIncludeBuilder
)
{ }
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XSubCategoryProviderControllerBase.cs
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 Microsoft.Extensions.Logging;
using xCategoryService.Interfaces;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Dtos;
using xCommons.Configurations;
using xCommons.Extensions;
using xCommons.Providers;
using xExceptions.Constants;
using xIdentityService.Interfaces;
using xModels.Dtos;
using xPushService.Controllers;
namespace xCategoryService.Controllers
{
public abstract class XSubCategoryProviderControllerBase : XBaseProvidedController, IXSubCategoryProviderController
{
private readonly IXSubCategoryProvider provider;
protected XSubCategoryProviderControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
IXIdentityProvider identityProvider,
XValidationProvider validationProvider,
IXSubCategoryProvider provider,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
identityProvider,
validationProvider,
provider,
defaultOrderBuilder,
defaultIncludeBuilder
)
{
this.provider = provider;
}
//
#region Overrides ...
[NonAction]
[HttpGet("{id}")]
public override async Task> Get(
[FromRoute] int id,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.Get(
id: id,
useDefaultIncludes: useDefaultIncludes,
cancellationToken: cancellationToken
);
}
[NonAction]
[HttpGet("")]
public override async Task>> GetAll(
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.GetAll(
useDefaultOrders: useDefaultOrders,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpGet("Find/One")]
public override async Task> FindOne(
[FromRoute] string query,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.FindOne(
query: query,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpGet("Find/Many")]
public override async Task>> FindMany(
[FromRoute] string query,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.FindMany(
query: query,
useDefaultOrders: useDefaultOrders,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpGet("Query")]
public override async Task>> Query(
[FromQuery] XQuery query,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.Query(
query: query,
useDefaultOrders: useDefaultOrders,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpGet("Query/Owned")]
public override async Task>> QueryOwned(
[FromQuery] XQuery query,
[FromQuery] bool useDefaultOrders = false,
[FromQuery] bool useDefaultIncludes = false,
CancellationToken cancellationToken = default
)
{
//
return await base.QueryOwned(
query: query,
useDefaultOrders: useDefaultOrders,
cancellationToken: cancellationToken,
useDefaultIncludes: useDefaultIncludes
);
}
[NonAction]
[HttpPost("")]
public override async Task> Add(
[FromBody] XSubCategoryDto item,
CancellationToken cancellationToken = default
)
{
//
return await base.Add(
item: item,
cancellationToken: cancellationToken
);
}
[NonAction]
[HttpPut("{id}")]
public override async Task> Update(
[FromRoute] int id,
[FromBody] XSubCategoryDto item,
CancellationToken cancellationToken = default
)
{
//
return await base.Update(
id: id,
item: item,
cancellationToken: cancellationToken
);
}
[NonAction]
[HttpDelete("{id}")]
public override async Task> Remove(
[FromRoute] int id,
CancellationToken cancellationToken = default
)
{
//
return await base.Remove(
id: id,
cancellationToken: cancellationToken
);
}
#endregion
//
#region Actions ...
///
/// Check Has Specified Locale or not ...
///
///
///
///
///
[HttpGet("Resources/{id}/HasLocale")]
public virtual async Task> HasLocale(
[FromRoute] int id,
[FromQuery] string language,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid ||
!id.IsValidIntId())
{
XException.InvalidArgs.Throw();
}
ValidationProvider.NotEmpty(language);
//
var result = await provider.HasLocale(
id: id,
language: language,
cancellationToken: cancellationToken
);
//
return Ok(result);
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Load an Item by all of it's Related Translations ...
///
///
///
///
[HttpGet("Resources/{id}")]
public virtual async Task> GetResource(
[FromRoute] int id,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid ||
!id.IsValidIntId())
{
XException.InvalidArgs.Throw();
}
//
var result = await provider.GetResource(
id: id,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Add Category Item for Specified Language ...
///
///
///
///
///
[HttpPost("Resources")]
public virtual async Task> Add(
[FromBody] XSubCategoryDto item,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(item)
.AddNotEmpty(language)
.AddNotEmpty(item.Title)
.AddNotEmpty(item.Description)
.ValidateGroupAsync();
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.Add(
item: item,
language: language,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Add Item by it's Locales and Reference ...
///
///
///
///
[HttpPost("Resources/AddResource")]
public virtual async Task> AddResource(
[FromBody] XSubCategoryResourceDto item,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(item)
.AddNotNull(item.Titles)
.AddNotZeroChilds(item.Titles.Locales)
.ValidateGroupAsync();
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.AddResource(
item: item,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Remove Item for Specified Language ...
///
///
/// if null, Remove All
///
///
[HttpDelete("Resources/{id}")]
public virtual async Task> Remove(
[FromRoute] int id,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid ||
!id.IsValidIntId())
{
XException.InvalidArgs.Throw();
}
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.Remove(
id: id,
language: language,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Update a Category Item for Specified Language ...
///
///
///
///
///
///
[HttpPut("Resources/{id}")]
public virtual async Task> Update(
[FromRoute] int id,
[FromBody] XSubCategoryDto item,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid ||
!id.IsValidIntId())
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(item)
.AddNotEmpty(language)
.AddNotEmpty(item.Title)
.AddNotEmpty(item.Description)
.ValidateGroupAsync();
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.Update(
id: id,
item: item,
language: language,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Refresh a Resource ...
///
///
///
///
[HttpPost("Resources/Refresh")]
public virtual async Task> Refresh(
[FromBody] XSubCategoryResourceDto resource,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(resource)
.AddNotNull(resource.Item)
.ValidateGroupAsync();
//
// Reading Requirements ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
//
var result = await provider.Refresh(
resource: resource,
userInfo: userInfo,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Get All Resources ...
///
///
///
[HttpGet("Resources/All")]
public virtual async Task>> GetAllResources(
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
//
var result = await provider.GetAllResources(
cancellationToken: cancellationToken
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Find One Resource ...
///
///
///
///
[HttpGet("Resources/Find/One")]
public virtual async Task> FindOneResource(
[FromQuery] string query,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotEmpty(query)
.ValidateGroupAsync();
//
var result = await provider.FindOneResource(
cancellationToken: cancellationToken,
predicate: x => x.PropValuesContains(query)
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Find Many Resource ...
///
///
///
///
[HttpGet("Resources/Find/Many")]
public virtual async Task>> FindManyResource(
[FromQuery] string query,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotEmpty(query)
.ValidateGroupAsync();
//
var result = await provider.FindManyResource(
cancellationToken: cancellationToken,
predicate: x => x.PropValuesContains(query),
orderBuilder: x => x.OrderBy(y => y.Item.Id)
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
///
/// Retrieve Resources by Query Pattern ...
///
///
///
///
[HttpGet("Resources/Query")]
public virtual async Task>> QueryResources(
[FromQuery] XQuery query = null,
CancellationToken cancellationToken = default
)
{
//
try
{
//
// Validate ...
if (!ModelState.IsValid)
{
XException.InvalidArgs.Throw();
}
await ValidationProvider
.GroupValidationBuilder()
.AddNotNull(query)
.ValidateGroupAsync();
//
var result = await provider.QueryResources(
query: query,
predicate: null,
cancellationToken: cancellationToken,
orderBuilder: x => x.OrderBy(y => y.Item.Id)
);
//
return Ok(result.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
#endregion
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XSubCategoryRepositoryControllerBase.cs
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.Extensions.Logging;
using xCategoryService.Interfaces.Entities;
using xCategoryService.Models.Entities;
using xCommons.Configurations;
using xCommons.Providers;
using xDataService.Controllers;
using xDataService.Interfaces;
namespace xCategoryService.Controllers
{
public abstract class XSubCategoryRepositoryControllerBase : XBaseRepositoryController, IXBaseRepositoryController
{
protected XSubCategoryRepositoryControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
XValidationProvider validationProvider,
IXSubCategoryRepository repository,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
validationProvider,
repository,
defaultOrderBuilder,
defaultIncludeBuilder
)
{ }
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XSubCategoryRepositoryProviderControllerBase.cs
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.Extensions.Logging;
using xCategoryService.Interfaces.Entities;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Entities;
using xCommons.Configurations;
using xCommons.Providers;
using xIdentityService.Interfaces;
using xPushService.Controllers;
using xPushService.Interfaces;
namespace xCategoryService.Controllers
{
public abstract class XSubCategoryRepositoryProviderControllerBase : XBaseRepositoryProviderController, IXBaseRepositoryProviderController
{
protected XSubCategoryRepositoryProviderControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
IXIdentityProvider identityProvider,
XValidationProvider validationProvider,
IXSubCategoryRepositoryProvider provider,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
identityProvider,
validationProvider,
provider,
defaultOrderBuilder,
defaultIncludeBuilder
)
{ }
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XSubCategoryServiceControllerBase.cs
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.Extensions.Logging;
using xCategoryService.Interfaces.Dtos;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCommons.Configurations;
using xCommons.Providers;
using xDataService.Controllers;
using xDataService.Interfaces;
namespace xCategoryService.Controllers
{
public abstract class XSubCategoryServiceControllerBase : XBaseServiceController, IXBaseServiceController
{
protected XSubCategoryServiceControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
XValidationProvider validationProvider,
IXSubCategoryRepositoryService repositoryService,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
validationProvider,
repositoryService,
defaultOrderBuilder,
defaultIncludeBuilder
)
{ }
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Controllers\XSubCategoryServiceProviderControllerBase.cs
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.Extensions.Logging;
using xCategoryService.Interfaces.Dtos;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Dtos;
using xCommons.Configurations;
using xCommons.Providers;
using xIdentityService.Interfaces;
using xPushService.Controllers;
using xPushService.Interfaces;
namespace xCategoryService.Controllers
{
public abstract class XSubCategoryServiceProviderControllerBase : XBaseServiceProviderController, IXBaseServiceProviderController
{
protected XSubCategoryServiceProviderControllerBase(
ILogger logger,
XAppConfiguration appConfiguration,
IXIdentityProvider identityProvider,
XValidationProvider validationProvider,
IXSubCategoryServiceProvider provider,
Func, IOrderedQueryable> defaultOrderBuilder = null,
Func, IIncludableQueryable> defaultIncludeBuilder = null
) : base(
logger,
appConfiguration,
identityProvider,
validationProvider,
provider,
defaultOrderBuilder,
defaultIncludeBuilder
)
{ }
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\DI\XDIHelperExtension.cs
using System;
using System.Linq;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using xCategoryService.Configurations;
using xCategoryService.Constants;
using xCategoryService.Helpers;
using xCategoryService.Interfaces;
using xCategoryService.Interfaces.Dtos;
using xCategoryService.Interfaces.Entities;
using xCategoryService.Providers;
using xCategoryService.Providers.Dtos;
using xCategoryService.Providers.Entities;
using xCommons.Extensions;
using xCommons.Helpers;
using xDataService.Constants;
using xDataService.Db;
using xDataService.DI;
using xDataService.Models;
using xExceptions.Constants;
using xPushService.DI;
using xPushService.Helpers;
namespace xCategoryService.DI
{
public static class XDIHelperExtension
{
///
/// Extract Service Configurations ...
///
///
///
public static XCategoryServiceConfiguration GetXCategoryServiceConfigurations(
this IConfiguration source
)
{
//
XCategoryServiceConfiguration result = null;
//
var section = source.GetSection(Constants.ConfigurationNodeNames.CATEGORY_SERVICE_NODE);
var sectionJson = source.GetSectionAsJson(Constants.ConfigurationNodeNames.CATEGORY_SERVICE_NODE);
if (!section.IsNull())
{
result = sectionJson.FromJSON();
}
//
return result;
}
///
/// Register Service Configuration ...
///
///
///
public static void AddXCategoryServiceConfiguration(
this IServiceCollection source,
IConfiguration configuration
)
{
//
// Extract Configuration Class ...
var config = configuration.GetXCategoryServiceConfigurations();
//
// Register Class as Service ...
source.AddXCategoryServiceConfiguration(config);
}
///
/// Register Service Configuration ...
///
///
///
public static void AddXCategoryServiceConfiguration(
this IServiceCollection source,
XCategoryServiceConfiguration configuration
)
{
//
// Normalize Configuration Class ...
if (configuration.IsNull())
{
configuration = new XCategoryServiceConfiguration();
}
//
// Register ...
source.AddSingleton(configuration);
}
///
/// Register Service ...
///
///
///
///
public static void AddXCategoryService(
this IServiceCollection services,
XRepositoryType repositoryType,
ServiceLifetime lifeTime = ServiceLifetime.Scoped
)
{
AddCategoryService(
contextType: null,
services: services,
lifeTime: lifeTime,
repositoryType: repositoryType
);
}
///
/// Register Service ...
///
///
///
///
///
public static void AddXCategoryService(
this IServiceCollection services,
XRepositoryType repositoryType,
ServiceLifetime lifeTime = ServiceLifetime.Scoped
)
where TContext : XDbContext
{
AddCategoryService(
services: services,
lifeTime: lifeTime,
contextType: typeof(TContext),
repositoryType: repositoryType
);
}
///
/// Use XSubCategoryService Middleware ...
///
///
///
public static void UseXCategoryService(
this IApplicationBuilder app,
bool isDevelopmentEnvironment = false
)
{
//
#region Using Hubs ...
//
var pushHelper = new XPushServiceHelper();
//
// Category ...
pushHelper.AddHub(XCategoryServiceConstants.XCategoryDtoHub);
pushHelper.AddHub(XCategoryServiceConstants.XCategoryEntityHub);
//
// SubCategory ...
pushHelper.AddHub(XCategoryServiceConstants.XSubCategoryDtoHub);
pushHelper.AddHub(XCategoryServiceConstants.XSubCategoryEntityHub);
//
app.UseXPushService(pushHelper);
#endregion
//
// Using XCategory Repository Descriptor ...
if (!categoryDescriptor.IsNull())
{
//
app.UseXRepository(
descriptor: categoryDescriptor,
isDevelopmentEnvironment: isDevelopmentEnvironment
);
}
//
// Using XSubCategory Repository Descriptor ...
if (!subCategoryDescriptor.IsNull())
{
//
app.UseXRepository(
descriptor: subCategoryDescriptor,
isDevelopmentEnvironment: isDevelopmentEnvironment
);
}
//
// Create an Scope for Services Acces ...
// Handle Seeding Category/SubCategory Resources ...
using (var scope = app.ApplicationServices.CreateScope())
{
//
// Retrieve Configuratuions ...
var categoryProvider = scope.ServiceProvider.GetService();
var subCategoryProvider = scope.ServiceProvider.GetService();
var configuration = scope.ServiceProvider.GetService();
if (!configuration.IsNullOrDefault() &&
!categoryProvider.IsNullOrDefault() &&
!subCategoryDescriptor.IsNullOrDefault()
)
{
//
// Logging ...
Log("Start Seeding ...");
//
// Count Data in Category ...
var hasCategory = categoryProvider.Count().GetAwaiter().GetResult() > 0;
var hasSubCategory = subCategoryProvider.Count().GetAwaiter().GetResult() > 0;
//
// Seed Category Resources ...
var canSeed =
!hasCategory &&
configuration.Categories.HasChild();
if (canSeed)
{
//
// Loop through Provided items ...
foreach (var cat in configuration.Categories)
{
//
try
{
//
Log($"Start Seeding Category: {cat.Titles.Locales.ToArray()[0].Value} ...");
//
categoryProvider.Refresh(
resource: cat,
userInfo: null,
connectionId: null,
cancellationToken: default
)
.GetAwaiter()
.GetResult();
//
Log($"Seeding Category: {cat.Titles.Locales.ToArray()[0].Value} Finished Successfully ...");
}
catch (Exception ex)
{
Log($"Seeding Category: {cat.Titles.Locales.ToArray()[0].Value} Failed due: {ex.Message} ...");
}
}
}
//
// Seed SubCategory Resources ...
canSeed =
!hasSubCategory &&
configuration.SubCategories.HasChild();
if (canSeed)
{
//
// Loop through Provided items ...
foreach (var subcat in configuration.SubCategories)
{
//
try
{
//
Log($"Start Seeding SubCategory: {subcat.Titles.Locales.ToArray()[0].Value} ...");
//
subCategoryProvider.Refresh(
userInfo: null,
resource: subcat,
connectionId: null,
cancellationToken: default
)
.GetAwaiter()
.GetResult();
//
Log($"Seeding SubCategory: {subcat.Titles.Locales.ToArray()[0].Value} Finished Successfully ...");
}
catch (Exception ex)
{
Log($"Seeding SubCategory: {subcat.Titles.Locales.ToArray()[0].Value} Failed due: {ex.Message} ...");
}
}
}
//
Log("Finish Seeding ...");
}
}
}
//
#region Private ...
private static XRepositoryDescriptor categoryDescriptor = null;
private static XRepositoryDescriptor subCategoryDescriptor = null;
///
/// a LogTag for Service ...
///
private static string XLogTag = XCategoryServiceConstants.XCategoryServiceDILogTag;
///
/// print a log in Console ...
///
///
private static void Log(string message)
{
Console.WriteLine($"{XLogTag} => {message}");
}
///
/// Register Service ...
///
///
///
///
///
private static void AddCategoryService(
IServiceCollection services,
XRepositoryType repositoryType,
Type contextType = null,
ServiceLifetime lifeTime = ServiceLifetime.Scoped
)
{
//
var exception = XException.InvalidArgs.ToException(); ;
//
// Services ...
var isServicesExists = !services.IsNull();
if (!isServicesExists)
{
//
Log("Service Registration failed, services not provided ...");
throw exception;
}
//
// Lifetime ...
var isLifetimeExists = !lifeTime.IsNull();
if (!isLifetimeExists)
{
//
Log("Service Registration failed, lifetime not provided ...");
throw exception;
}
//
// Validate Repository Type ...
var isRepositoryTypeValid =
(repositoryType == XRepositoryType.EF &&
!contextType.IsNull()) ||
((repositoryType == XRepositoryType.Mongo ||
repositoryType == XRepositoryType.InMemory) &&
contextType.IsNull());
if (!isRepositoryTypeValid)
{
//
Log("Service Registration failed, Invalid Repository Type and Context Type ...");
throw exception;
}
//
// Maske Instance of Repository Descriptor
// Based on Provided Type ...
switch (repositoryType)
{
//
case XRepositoryType.EF:
//
// Category ...
categoryDescriptor = typeof(XCategoryServiceHelper)
.InvokeGenericMethod(
args: null,
runtimeType: contextType,
methodName: XCategoryServiceConstants.GetXCategoryEFRepositoryDescriptor
);
//
// SubCategory ...
subCategoryDescriptor = typeof(XCategoryServiceHelper)
.InvokeGenericMethod(
args: null,
runtimeType: contextType,
methodName: XCategoryServiceConstants.GetXSubCategoryEFRepositoryDescriptor
);
break;
//
case XRepositoryType.Mongo:
//
// Category ...
categoryDescriptor = XCategoryServiceHelper.GetXCategoryMongoRepositoryDescriptor();
//
// SubCategory ...
subCategoryDescriptor = XCategoryServiceHelper.GetXSubCategoryMongoRepositoryDescriptor();
break;
//
case XRepositoryType.InMemory:
//
// Category ...
categoryDescriptor = XCategoryServiceHelper.GetXCategoryInMemoryRepositoryDescriptor();
//
// SubCategory ...
subCategoryDescriptor = XCategoryServiceHelper.GetXSubCategoryInMemoryRepositoryDescriptor();
break;
}
//
// Register Category Repository Descriptor ...
if (!categoryDescriptor.IsNull())
{
//
services.AddXRepository(
lifeTime: lifeTime,
descriptor: categoryDescriptor
);
}
//
// Register SubCategory Repository Descriptor ...
if (!subCategoryDescriptor.IsNull())
{
//
services.AddXRepository(
lifeTime: lifeTime,
descriptor: subCategoryDescriptor
);
}
//
#region Register Services ...
//
#region Category ...
//
// Models ...
services.Add(
new ServiceDescriptor(typeof(IXCategoryServiceProvider), typeof(XCategoryServiceProvider), lifeTime)
);
services.Add(
new ServiceDescriptor(typeof(IXCategoryRepositoryService), typeof(XCategoryRepositoryService), lifeTime)
);
services.Add(
new ServiceDescriptor(typeof(IXCategoryRepositoryProvider), typeof(XCategoryRepositoryProvider), lifeTime)
);
//
// Resource Providers ...
services.Add(
new ServiceDescriptor(typeof(IXCategoryTitleResourceProvider), typeof(XCategoryTitleResourceProvider), lifeTime)
);
services.Add(
new ServiceDescriptor(typeof(IXCategoryDescriptionResourceProvider), typeof(XCategoryDescriptionResourceProvider), lifeTime)
);
//
// Reference Providers ...
services.Add(
new ServiceDescriptor(typeof(IXCategorySubCategoryReferenceProvider), typeof(XCategorySubCategoryReferenceProvider), lifeTime)
);
//
// Provider ...
services.Add(
new ServiceDescriptor(typeof(IXCategoryProvider), typeof(XCategoryProvider), lifeTime)
);
#endregion
//
#region SubCategory ...
//
// Models ...
services.Add(
new ServiceDescriptor(typeof(IXSubCategoryServiceProvider), typeof(XSubCategoryServiceProvider), lifeTime)
);
services.Add(
new ServiceDescriptor(typeof(IXSubCategoryRepositoryService), typeof(XSubCategoryRepositoryService), lifeTime)
);
services.Add(
new ServiceDescriptor(typeof(IXSubCategoryRepositoryProvider), typeof(XSubCategoryRepositoryProvider), lifeTime)
);
//
// Resource Providers ...
services.Add(
new ServiceDescriptor(typeof(IXSubCategoryTitleResourceProvider), typeof(XSubCategoryTitleResourceProvider), lifeTime)
);
services.Add(
new ServiceDescriptor(typeof(IXSubCategoryDescriptionResourceProvider), typeof(XSubCategoryDescriptionResourceProvider), lifeTime)
);
//
// Provider ...
services.Add(
new ServiceDescriptor(typeof(IXSubCategoryProvider), typeof(XSubCategoryProvider), lifeTime)
);
#endregion
#endregion
//
// Register Service Main Provider ...
services.Add(
new ServiceDescriptor(typeof(IXCategoryService), typeof(XCategoryService), lifeTime)
);
//
Log("Service Regitration Succeed ...");
}
#endregion
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Extensions\XCategoryResourceExtensions.cs
using System.Linq;
using xCategoryService.Models.Dtos;
using xCategoryService.Providers.Dtos;
using xCommons.Extensions;
namespace xCategoryService.Extensions
{
///
/// Extensions Method Related to XCategoryResourceDto ...
///
public static class XCategoryResourceExtensions
{
///
/// Extract Available Languages ...
///
///
///
public static string[] ExtractLanguages(
this XCategoryResourceDto source
)
{
//
var result = new string[] { };
//
// Validate ...
if (!source.IsNullOrDefault())
{
return result;
}
//
result =
source.Titles.Locales.Select(x => x.Language)
.Union(source.Descriptions.Locales.Select(x => x.Language))
.Distinct()
.ToArray();
//
return result;
}
///
/// Check Has Locale or not ...
///
///
///
///
public static bool HasLocale(
this XCategoryResourceDto source,
string language
)
{
//
var result =
!language.IsNullOrEmpty() &&
!source.IsNullOrDefault() &&
source.Titles.Locales
.Any(l => l.Language
.Equals(
language,
System.StringComparison.InvariantCultureIgnoreCase));
//
return result;
}
///
/// Get Item Translation ...
///
///
///
///
public static XCategoryDto GetTranslate(
this XCategoryResourceDto source,
string language
)
{
//
XCategoryDto result = null;
//
var isValid = source
.HasLocale(language);
if (!isValid)
{
return result;
}
//
var titleLocale = source.Titles.Locales
.FirstOrDefault(l => l.Language
.Equals(
language,
System.StringComparison.InvariantCultureIgnoreCase));
var descriptionLocale = source.Descriptions.Locales
.FirstOrDefault(l => l.Language
.Equals(
language,
System.StringComparison.InvariantCultureIgnoreCase));
//
isValid = !titleLocale.IsNullOrDefault();
if (!isValid)
{
return result;
}
//
result = source.Item;
result.Title = titleLocale.Value;
result.Description =
descriptionLocale.IsNullOrDefault()
? string.Empty
: descriptionLocale.Value;
//
return result;
}
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Extensions\XModelExtensions.cs
using System.Collections.Generic;
using System.Linq;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCommons.Extensions;
using xDataService.Extensions;
using xDataService.Models;
namespace xCategoryService.Extensions
{
public static class XModelExtensions
{
///
/// Extract References of a Model ...
///
///
///
public static IList> GetReferences(
this XCategory source
)
{
//
var result = new List>();
//
if (
!source.IsNullOrDefault() &&
!source.References.IsNullOrEmpty()
)
{
//
result = source.References
.ParseXReferenceList()
.ToList();
}
//
return result;
}
///
/// Extract References of a Model ...
///
///
///
public static IList> GetReferences(
this XCategoryDto source
)
{
//
var result = new List>();
//
if (
!source.IsNullOrDefault() &&
!source.References.IsNullOrEmpty()
)
{
//
result = source.References
.ParseXReferenceList()
.ToList();
}
//
return result;
}
///
/// Update a Model's References by Providing References List ...
///
///
///
///
///
public static XCategory UpdateReferences(
this XCategory source,
IList> references,
bool forceClean = true
)
{
//
XCategory result = source;
//
if (!source.IsNullOrDefault())
{
//
result = source;
//
if (forceClean)
{
result.References = string.Empty;
}
//
if (!references.IsNull() &&
references.HasChild())
{
result.References = references.ToXReferenceString();
}
}
//
return result;
}
///
/// Update a Model's References by Providing References List ...
///
///
///
///
///
public static XCategoryDto UpdateReferences(
this XCategoryDto source,
IList> references,
bool forceClean = true
)
{
//
XCategoryDto result = source;
//
if (!source.IsNullOrDefault())
{
//
result = source;
//
if (forceClean)
{
result.References = string.Empty;
}
//
if (!references.IsNull() &&
references.HasChild())
{
result.References = references.ToXReferenceString();
}
}
//
return result;
}
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Extensions\XSubCategoryResourceExtensions.cs
using System.Linq;
using xCategoryService.Models.Dtos;
using xCategoryService.Providers.Dtos;
using xCommons.Extensions;
namespace xCategoryService.Extensions
{
///
/// Extensions Method Related to XSubCategoryResourceDto ...
///
public static class XSubCategoryResourceExtensions
{
///
/// Extract Available Languages ...
///
///
///
public static string[] ExtractLanguages(
this XSubCategoryResourceDto source
)
{
//
var result = new string[] { };
//
// Validate ...
if (!source.IsNullOrDefault())
{
return result;
}
//
result =
source.Titles.Locales.Select(x => x.Language)
.Union(source.Descriptions.Locales.Select(x => x.Language))
.Distinct()
.ToArray();
//
return result;
}
///
/// Check Has Locale or not ...
///
///
///
///
public static bool HasLocale(
this XSubCategoryResourceDto source,
string language
)
{
//
var result =
!language.IsNullOrEmpty() &&
!source.IsNullOrDefault() &&
source.Titles.Locales
.Any(l => l.Language
.Equals(
language,
System.StringComparison.InvariantCultureIgnoreCase));
//
return result;
}
///
/// Get Item Translation ...
///
///
///
///
public static XSubCategoryDto GetTranslate(
this XSubCategoryResourceDto source,
string language
)
{
//
XSubCategoryDto result = null;
//
var isValid = source
.HasLocale(language);
if (!isValid)
{
return result;
}
//
var titleLocale = source.Titles.Locales
.FirstOrDefault(l => l.Language
.Equals(
language,
System.StringComparison.InvariantCultureIgnoreCase));
var descriptionLocale = source.Descriptions.Locales
.FirstOrDefault(l => l.Language
.Equals(
language,
System.StringComparison.InvariantCultureIgnoreCase));
//
isValid = !titleLocale.IsNullOrDefault();
if (!isValid)
{
return result;
}
//
result = source.Item;
result.Title = titleLocale.Value;
result.Description =
descriptionLocale.IsNullOrDefault()
? string.Empty
: descriptionLocale.Value;
//
return result;
}
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Helpers\XCategoryServiceHelper.cs
using GraphQL.Types;
using xCategoryService.Interfaces;
using xCategoryService.Interfaces.Entities;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Entities;
using xCategoryService.Providers.GraphQL;
using xDataService.Db;
using xDataService.Models;
using xDataService.Providers;
namespace xCategoryService.Helpers
{
public static class XCategoryServiceHelper
{
//
#region EF Repository Descriptor Provider(s) ...
//
#region Category
public static XEFRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryEFRepository,
TContext
> GetXCategoryEFRepositoryDescriptor()
where TContext : XDbContext
{
//
var result = new XEFRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryEFRepository,
TContext
>();
//
return result;
}
public static XEFRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryEFRepository,
TContext,
IXCategorySeeder,
TSeederImplementation
> GetXCategoryEFRepositoryDescriptor()
where TContext : XDbContext
where TSeederImplementation : XBaseDbSeeder
{
//
var result = new XEFRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryEFRepository,
TContext,
IXCategorySeeder,
TSeederImplementation
>();
//
return result;
}
#endregion
//
#region SubCategory
public static XEFRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryEFRepository,
TContext
> GetXSubCategoryEFRepositoryDescriptor()
where TContext : XDbContext
{
//
var result = new XEFRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryEFRepository,
TContext
>();
//
return result;
}
public static XEFRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryEFRepository,
TContext,
IXSubCategorySeeder,
TSeederImplementation
> GetXSubCategoryEFRepositoryDescriptor()
where TContext : XDbContext
where TSeederImplementation : XBaseDbSeeder
{
//
var result = new XEFRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryEFRepository,
TContext,
IXSubCategorySeeder,
TSeederImplementation
>();
//
return result;
}
#endregion
#endregion
//
#region Mongo Repository Descriptor Provider(s) ...
//
#region Category
public static XMongoRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryMongoRepository
> GetXCategoryMongoRepositoryDescriptor()
{
//
var result = new XMongoRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryMongoRepository
>();
//
return result;
}
public static XMongoRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryMongoRepository,
IXCategorySeeder,
TSeederImplementation
> GetXCategoryMongoRepositoryDescriptor()
where TSeederImplementation : XBaseDbSeeder
{
//
var result = new XMongoRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryMongoRepository,
IXCategorySeeder,
TSeederImplementation
>();
//
return result;
}
#endregion
//
#region SubCategory
public static XMongoRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryMongoRepository
> GetXSubCategoryMongoRepositoryDescriptor()
{
//
var result = new XMongoRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryMongoRepository
>();
//
return result;
}
public static XMongoRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryMongoRepository,
IXSubCategorySeeder,
TSeederImplementation
> GetXSubCategoryMongoRepositoryDescriptor()
where TSeederImplementation : XBaseDbSeeder
{
//
var result = new XMongoRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryMongoRepository,
IXSubCategorySeeder,
TSeederImplementation
>();
//
return result;
}
#endregion
#endregion
//
#region InMemory Repository Descriptor Provider(s) ...
//
#region Category
public static XInMemoryRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryInMemoryRepository
> GetXCategoryInMemoryRepositoryDescriptor()
{
//
var result = new XInMemoryRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryInMemoryRepository
>();
//
return result;
}
public static XInMemoryRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryInMemoryRepository,
IXCategorySeeder,
TSeederImplementation
> GetXCategoryInMemoryRepositoryDescriptor()
where TSeederImplementation : XBaseDbSeeder
{
//
var result = new XInMemoryRepositoryDescriptor<
XCategory,
int,
IXCategoryKeyGenerator,
XCategoryKeyGenerator,
IXCategoryRepositoryEvents,
XCategoryRepositoryEvents,
XCategoryGraphType,
IntGraphType,
XCategoryGraphQuery,
IXCategoryGraphQLTypeHelper,
XCategoryGraphQLTypeHelper,
XCategoryGraphSchema,
IXCategoryRepository,
XCategoryInMemoryRepository,
IXCategorySeeder,
TSeederImplementation
>();
//
return result;
}
#endregion
//
#region SubCategory
public static XInMemoryRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryInMemoryRepository
> GetXSubCategoryInMemoryRepositoryDescriptor()
{
//
var result = new XInMemoryRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryInMemoryRepository
>();
//
return result;
}
public static XInMemoryRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryInMemoryRepository,
IXSubCategorySeeder,
TSeederImplementation
> GetXSubCategoryInMemoryRepositoryDescriptor()
where TSeederImplementation : XBaseDbSeeder
{
//
var result = new XInMemoryRepositoryDescriptor<
XSubCategory,
int,
IXSubCategoryKeyGenerator,
XSubCategoryKeyGenerator,
IXSubCategoryRepositoryEvents,
XSubCategoryRepositoryEvents,
XSubCategoryGraphType,
IntGraphType,
XSubCategoryGraphQuery,
IXSubCategoryGraphQLTypeHelper,
XSubCategoryGraphQLTypeHelper,
XSubCategoryGraphSchema,
IXSubCategoryRepository,
XSubCategoryInMemoryRepository,
IXSubCategorySeeder,
TSeederImplementation
>();
//
return result;
}
#endregion
#endregion
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXBaseCategoryProvider.cs
using xCategoryService.Models.Dtos;
using xDataService.Interfaces;
namespace xCategoryService.Interfaces
{
public interface IXBaseCategoryProvider : IXBaseReferencedProvider
{}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXCategoryDescriptionResourceProvider.cs
using xStringService.Interfaces;
namespace xCategoryService.Interfaces
{
public interface IXCategoryDescriptionResourceProvider : IXItemResourceProvider
{ }
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXCategoryProvider.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Dtos;
using xIdentityModels.Models;
using xModels.Dtos;
using xPushService.Interfaces;
namespace xCategoryService.Interfaces
{
public interface IXCategoryProvider : IXBaseProvided, IXCategorySubCategoryReferenceProvider
{
///
/// Check Has Specified Locale or not ...
///
///
///
///
///
Task HasLocale(
int id,
string language,
CancellationToken cancellationToken = default
);
///
/// Load an Item by all of it's Related Translations ...
///
///
///
///
Task GetResource(
int id,
CancellationToken cancellationToken = default
);
///
/// Add Item for Specified Language ...
///
///
///
///
///
///
///
Task Add(
XCategoryDto item,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Add Item by It's Locales ...
///
///
///
///
///
///
Task AddResource(
XCategoryResourceDto item,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Remove Item for Specified Language ...
///
///
/// if null, Remove All
///
///
///
///
Task Remove(
int id,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Update an Item for Specified Language ...
///
///
///
///
///
///
///
///
Task Update(
int id,
XCategoryDto item,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Refresh a Resource ...
///
///
///
///
///
///
Task Refresh(
XCategoryResourceDto resource,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Get All Resources ...
///
///
///
Task> GetAllResources(
CancellationToken cancellationToken = default
);
///
/// Find One Resource ...
///
///
///
///
Task FindOneResource(
Expression> predicate = null,
CancellationToken cancellationToken = default
);
///
/// Find Many Resource ...
///
///
///
///
///
Task> FindManyResource(
Expression> predicate = null,
Func, IOrderedQueryable> orderBuilder = null,
CancellationToken cancellationToken = default
);
///
/// Retrieve Resources by Query Pattern ...
///
///
///
///
///
///
Task> QueryResources(
XQuery query = null,
Expression> predicate = null,
Func, IOrderedQueryable> orderBuilder = null,
CancellationToken cancellationToken = default
);
///
/// Get All Resources as Async Enumerable ...
///
///
///
IAsyncEnumerable GetAllResourcesAsAsyncEnumerable(
CancellationToken cancellationToken = default
);
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXCategoryProviderController.cs
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Dtos;
using xModels.Dtos;
using xPushService.Interfaces;
namespace xCategoryService.Interfaces
{
public interface IXCategoryProviderController : IXBaseProvidedController
{
///
/// Check Has Specified Locale or not ...
///
///
///
///
///
[HttpGet("Resources/{id}/HasLocale")]
Task> HasLocale(
[FromRoute] int id,
[FromQuery] string language,
CancellationToken cancellationToken = default
);
///
/// Load an Item by all of it's Related Translations ...
///
///
///
///
[HttpGet("Resources/{id}")]
Task> GetResource(
[FromRoute] int id,
CancellationToken cancellationToken = default
);
///
/// Add Item for Specified Language ...
///
///
///
///
///
[HttpPost("Resources")]
Task> Add(
[FromBody] XCategoryDto item,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
);
///
/// Add Item by It's Locales ...
///
///
///
///
[HttpPost("Resources/AddResource")]
Task> AddResource(
[FromBody] XCategoryResourceDto item,
CancellationToken cancellationToken = default
);
///
/// Remove Item for Specified Language ...
///
///
/// if null, Remove All
///
///
[HttpDelete("Resources/{id}")]
Task> Remove(
[FromRoute] int id,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
);
///
/// Update an Item for Specified Language ...
///
///
///
///
///
///
[HttpPut("Resources/{id}")]
Task> Update(
[FromRoute] int id,
[FromBody] XCategoryDto item,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
);
///
/// Refresh a Resource ...
///
///
///
///
[HttpPost("Resources/Refresh")]
Task> Refresh(
[FromBody] XCategoryResourceDto resource,
CancellationToken cancellationToken = default
);
///
/// Get All Resources ...
///
///
///
[HttpGet("Resources/All")]
Task>> GetAllResources(
CancellationToken cancellationToken = default
);
///
/// Find One Resource ...
///
///
///
///
[HttpGet("Resources/Find/One")]
Task> FindOneResource(
[FromQuery] string query,
CancellationToken cancellationToken = default
);
///
/// Find Many Resource ...
///
///
///
///
[HttpGet("Resources/Find/Many")]
Task>> FindManyResource(
[FromQuery] string query,
CancellationToken cancellationToken = default
);
///
/// Retrieve Resources by Query Pattern ...
///
///
///
///
[HttpGet("Resources/Query")]
Task>> QueryResources(
[FromQuery] XQuery query = null,
CancellationToken cancellationToken = default
);
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXCategoryService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using xCategoryService.Models.Dtos;
using xIdentityModels.Models;
using xModels.Dtos;
namespace xCategoryService.Interfaces
{
///
/// Completely Exported Service ...
///
public interface IXCategoryService
{
//
#region Category Provider ...
///
/// Check Has Specified Locale or not ...
///
///
///
///
///
Task CategoryHasLocale(
int id,
string language,
CancellationToken cancellationToken = default
);
///
/// Load an Item by all of it's Related Translations ...
///
///
///
///
Task GetCategoryResource(
int id,
CancellationToken cancellationToken = default
);
///
/// Add Item for Specified Language ...
///
///
///
///
///
///
///
Task AddCategory(
XCategoryDto item,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Add Item by It's Locales ...
///
///
///
///
///
///
Task AddCategoryResource(
XCategoryResourceDto item,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Remove Item for Specified Language ...
///
///
/// if null, Remove All
///
///
///
///
Task RemoveCategory(
int id,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Update an Item for Specified Language ...
///
///
///
///
///
///
///
///
Task UpdateCategory(
int id,
XCategoryDto item,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Refresh a Resource ...
///
///
///
///
///
///
Task RefreshCategory(
XCategoryResourceDto resource,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Get All Resources ...
///
///
///
Task> GetAllCategoryResources(
CancellationToken cancellationToken = default
);
///
/// Find One Resource ...
///
///
///
///
Task FindOneCategoryResource(
Expression> predicate = null,
CancellationToken cancellationToken = default
);
///
/// Find Many Resource ...
///
///
///
///
///
Task> FindManyCategoryResource(
Expression> predicate = null,
Func, IOrderedQueryable> orderBuilder = null,
CancellationToken cancellationToken = default
);
///
/// Retrieve Resources by Query Pattern ...
///
///
///
///
///
///
Task> QueryCategoryResources(
XQuery query = null,
Expression> predicate = null,
Func, IOrderedQueryable> orderBuilder = null,
CancellationToken cancellationToken = default
);
///
/// Get All Resources as Async Enumerable ...
///
///
///
IAsyncEnumerable GetAllCategoryResourcesAsAsyncEnumerable(
CancellationToken cancellationToken = default
);
#endregion
//
#region SubCategory Provider ...
///
/// Check Has Specified Locale or not ...
///
///
///
///
///
Task SubCategoryHasLocale(
int id,
string language,
CancellationToken cancellationToken = default
);
///
/// Load an Item by all of it's Related Translations ...
///
///
///
///
Task GetSubCategoryResource(
int id,
CancellationToken cancellationToken = default
);
///
/// Add Item for Specified Language ...
///
///
///
///
///
///
///
Task AddSubCategory(
XSubCategoryDto item,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Add Item by it's Locales and Reference ...
///
///
///
///
///
///
Task AddSubCategoryResource(
XSubCategoryResourceDto item,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Remove Item for Specified Language ...
///
///
/// if null, Remove All
///
///
///
///
Task RemoveSubCategory(
int id,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Update an Item for Specified Language ...
///
///
///
///
///
///
///
///
Task UpdateSubCategory(
int id,
XSubCategoryDto item,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Refresh a Resource ...
///
///
///
///
///
///
Task RefreshSubCategory(
XSubCategoryResourceDto resource,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Get All Resources ...
///
///
///
Task> GetAllSubCategoryResources(
CancellationToken cancellationToken = default
);
///
/// Find One Resource ...
///
///
///
///
Task FindOneSubCategoryResource(
Expression> predicate = null,
CancellationToken cancellationToken = default
);
///
/// Find Many Resource ...
///
///
///
///
///
Task> FindManySubCategoryResource(
Expression> predicate = null,
Func, IOrderedQueryable> orderBuilder = null,
CancellationToken cancellationToken = default
);
///
/// Retrieve Resources by Query Pattern ...
///
///
///
///
///
///
Task> QuerySubCategoryResources(
XQuery query = null,
Expression> predicate = null,
Func, IOrderedQueryable> orderBuilder = null,
CancellationToken cancellationToken = default
);
///
/// Get All Resources as Async Enumerable ...
///
///
///
IAsyncEnumerable GetAllSubCategoryResourcesAsAsyncEnumerable(
CancellationToken cancellationToken = default
);
#endregion
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXCategorySubCategoryReferenceProvider.cs
namespace xCategoryService.Interfaces
{
///
/// a Service for SubCategory Referencing on Category ...
///
public interface IXCategorySubCategoryReferenceProvider : IXBaseCategoryProvider
{ }
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXCategoryTitleResourceProvider.cs
using xStringService.Interfaces;
namespace xCategoryService.Interfaces
{
public interface IXCategoryTitleResourceProvider : IXItemResourceProvider
{ }
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXSubCategoryDescriptionResourceProvider.cs
using xStringService.Interfaces;
namespace xCategoryService.Interfaces
{
public interface IXSubCategoryDescriptionResourceProvider : IXItemResourceProvider
{ }
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXSubCategoryProvider.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Dtos;
using xIdentityModels.Models;
using xModels.Dtos;
using xPushService.Interfaces;
namespace xCategoryService.Interfaces
{
public interface IXSubCategoryProvider : IXBaseProvided
{
///
/// Check Has Specified Locale or not ...
///
///
///
///
///
Task HasLocale(
int id,
string language,
CancellationToken cancellationToken = default
);
///
/// Load an Item by all of it's Related Translations ...
///
///
///
///
Task GetResource(
int id,
CancellationToken cancellationToken = default
);
///
/// Add Item for Specified Language ...
///
///
///
///
///
///
///
Task Add(
XSubCategoryDto item,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Add Item by it's Locales and Reference ...
///
///
///
///
///
///
Task AddResource(
XSubCategoryResourceDto item,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Remove Item for Specified Language ...
///
///
/// if null, Remove All
///
///
///
///
Task Remove(
int id,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Update an Item for Specified Language ...
///
///
///
///
///
///
///
///
Task Update(
int id,
XSubCategoryDto item,
string language = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Refresh a Resource ...
///
///
///
///
///
///
Task Refresh(
XSubCategoryResourceDto resource,
string connectionId = null,
XUserClaimsInfoDto userInfo = null,
CancellationToken cancellationToken = default
);
///
/// Get All Resources ...
///
///
///
Task> GetAllResources(
CancellationToken cancellationToken = default
);
///
/// Find One Resource ...
///
///
///
///
Task FindOneResource(
Expression> predicate = null,
CancellationToken cancellationToken = default
);
///
/// Find Many Resource ...
///
///
///
///
///
Task> FindManyResource(
Expression> predicate = null,
Func, IOrderedQueryable> orderBuilder = null,
CancellationToken cancellationToken = default
);
///
/// Retrieve Resources by Query Pattern ...
///
///
///
///
///
///
Task> QueryResources(
XQuery query = null,
Expression> predicate = null,
Func, IOrderedQueryable> orderBuilder = null,
CancellationToken cancellationToken = default
);
///
/// Get All Resources as Async Enumerable ...
///
///
///
IAsyncEnumerable GetAllResourcesAsAsyncEnumerable(
CancellationToken cancellationToken = default
);
}
}
### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xCategoryService\Interfaces\IXSubCategoryProviderController.cs
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using xCategoryService.Models.Dtos;
using xCategoryService.Models.Entities;
using xCategoryService.Providers.Dtos;
using xModels.Dtos;
using xPushService.Interfaces;
namespace xCategoryService.Interfaces
{
public interface IXSubCategoryProviderController : IXBaseProvidedController
{
///
/// Check Has Specified Locale or not ...
///
///
///
///
///
[HttpGet("Resources/{id}/HasLocale")]
Task> HasLocale(
[FromRoute] int id,
[FromQuery] string language,
CancellationToken cancellationToken = default
);
///
/// Load an Item by all of it's Related Translations ...
///
///
///
///
[HttpGet("Resources/{id}")]
Task> GetResource(
[FromRoute] int id,
CancellationToken cancellationToken = default
);
///
/// Add Item for Specified Language ...
///
///
///
///
///
[HttpPost("Resources")]
Task> Add(
[FromBody] XSubCategoryDto item,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
);
///
/// Add Item by it's Locales and Reference ...
///
///
///
///
[HttpPost("Resources/AddResource")]
Task> AddResource(
[FromBody] XSubCategoryResourceDto item,
CancellationToken cancellationToken = default
);
///
/// Remove Item for Specified Language ...
///
///
/// if null, Remove All
///
///
[HttpDelete("Resources/{id}")]
Task> Remove(
[FromRoute] int id,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
);
///
/// Update an Item for Specified Language ...
///
///
///
///
///
///
[HttpPut("Resources/{id}")]
Task> Update(
[FromRoute] int id,
[FromBody] XSubCategoryDto item,
[FromQuery] string language = null,
CancellationToken cancellationToken = default
);
///
/// Refresh a Resource ...
///
///
///
///
[HttpPost("Resources/Refresh")]
Task> Refresh(
[FromBody] XSubCategoryResourceDto resource,
CancellationToken cancellationToken = default
);
///