last step is Implement using ConnectionId and Push Hub's in Tag Provider ...

This commit is contained in:
2025-12-08 22:47:52 +03:30
parent bb03fb0f40
commit 7e174fc14a
3 changed files with 556 additions and 4 deletions
+445
View File
@@ -0,0 +1,445 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using xCommons.Configurations;
using xCommons.Extensions;
using xCommons.Providers;
using xIdentityService.Controllers;
using xIdentityService.Interfaces;
using xModels.Dtos;
using xTagService.Interfaces;
using xTagService.Models.Dtos;
using xTagService.Models.Entities;
namespace xTagService.Controllers
{
public class XTagServiceControllerBase : XIBaseProviderController, IXTagServiceControllerActions
{
//
#region Props ...
public IXTagProvider TagProvider { get; }
#endregion
//
#region Constructor ...
public XTagServiceControllerBase(
ILogger logger,
IXTagProvider tagProvider,
XAppConfiguration appConfiguration,
IXIdentityProvider identityProvider,
XValidationProvider validationProvider
) : base(
logger,
appConfiguration,
identityProvider,
validationProvider
)
{
//
TagProvider = tagProvider;
}
#endregion
//
#region Actions ...
/// <summary>
/// Add Tag by Providing Dto ...
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost("Add")]
public async Task<ActionResult<XTagDto>> Add(
[FromBody] XTagDto model
)
{
//
// Do ...
try
{
//
// Retrieve User Info ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
var userId = userInfo.UserId;
//
var result = await TagProvider.Add(
model: model,
connectionId: connectionId
);
//
return Ok(result
.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Update Specified Tag ...
/// </summary>
/// <param name="id"></param>
/// <param name="model"></param>
/// <returns></returns>
[HttpPut("Update")]
public async Task<ActionResult<XTagDto>> Update(
[FromQuery] int id,
[FromBody] XTagDto model
)
{
//
// Do ...
try
{
//
// Retrieve User Info ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
var userId = userInfo.UserId;
//
var result = await TagProvider.Update(
id: id,
model: model,
connectionId: connectionId
);
//
return Ok(result
.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Remove Specified Tag by ID ...
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("Remove")]
public async Task<ActionResult<XTagDto>> Remove(
[FromQuery] int id
)
{
//
// Do ...
try
{
//
// Retrieve User Info ...
var userInfo = await GetUserInfo();
var connectionId = GetConnectionId();
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
var userId = userInfo.UserId;
//
var result = await TagProvider.Remove(
id: id,
connectionId: connectionId
);
//
return Ok(result
.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Retrieve Specified Tag Dto by ID ...
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("")]
public async Task<ActionResult<XTagDto>> Get(
[FromQuery] int id
)
{
//
// Do ...
try
{
//
var result = await TagProvider.Get(
id: id
);
//
return Ok(result
.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Retrieve Specified Tag Dto by it's Label ...
/// </summary>
/// <param name="tag"></param>
/// <returns></returns>
[HttpGet("GetTag")]
public async Task<ActionResult<XTagDto>> GetTag(
[FromQuery] string tag
)
{
//
// Do ...
try
{
//
var result = await TagProvider.GetTag(
tag: tag
);
//
return Ok(result
.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Retrieve All Exists Tags ...
/// </summary>
/// <returns></returns>
[HttpGet("All")]
public async Task<ActionResult<IEnumerable<XTagDto>>> GetAll()
{
//
// Do ...
try
{
//
var result = await TagProvider.GetAll();
//
return Ok(result
.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Search For Specified Tag by Providing a query on Label ...
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
[HttpGet("FindOne")]
public async Task<ActionResult<XTagDto>> FindOne(
[FromQuery] string query
)
{
//
// Do ...
try
{
//
Expression<Func<XTag, bool>> whereClause = t =>
!query.IsNullOrEmpty() &&
t.Tag.ToNormalString()
.Contains(query.ToNormalString());
var result = await TagProvider.FindOne(
whereClause: whereClause
);
//
return Ok(result
.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Search For Specified Tags By Providing Query on Labels ...
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
[HttpGet("FindMany")]
public async Task<ActionResult<IEnumerable<XTagDto>>> FindMany(
[FromQuery] string query
)
{
//
// Do ...
try
{
//
Expression<Func<XTag, bool>> whereClause = t =>
!query.IsNullOrEmpty() &&
t.Tag.ToNormalString()
.Contains(query.ToNormalString());
var result = await TagProvider.FindMany(
whereClause: whereClause
);
//
return Ok(result
.ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Retrieve Tags based on Query Model ...
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
[HttpGet("Query")]
public async Task<ActionResult<XQueryResult<XTagDto>>> Query(
[FromQuery] XQuery query
)
{
//
// Do ...
try
{
//
var result = await TagProvider
.Query(query);
//
return Ok(result.
ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Count Exists Tags ...
/// </summary>
/// <returns></returns>
[HttpGet("Count")]
public async Task<ActionResult<int>> Count()
{
//
// Do ...
try
{
//
var result = await TagProvider
.Count();
//
return Ok(result.
ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Check Tag Exists by ID ...
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("IsExists")]
public async Task<ActionResult<bool>> IsExists(
[FromRoute] int id
)
{
//
// Do ...
try
{
//
var result = await TagProvider
.IsExists(id);
//
return Ok(result.
ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
/// <summary>
/// Check Tag Exists by Providing Label ...
/// </summary>
/// <param name="tag"></param>
/// <returns></returns>
[HttpGet("IsTagExists")]
public async Task<ActionResult<bool>> IsTagExists(
[FromQuery] string tag
)
{
//
// Do ...
try
{
//
var result = await TagProvider
.IsTagExists(tag);
//
return Ok(result.
ToDynamicObject());
}
catch (Exception ex)
{
//
var result = GetExceptionActionResult(ex);
return result;
}
}
#endregion
}
}