Add tenant services

This commit is contained in:
2025-08-03 15:19:16 -06:00
parent 7c92a7e791
commit 0eadd6e217
18 changed files with 1134 additions and 514 deletions

View File

@@ -10,7 +10,6 @@ using Core.Blueprint.Redis.Helpers;
using Core.Thalos.BuildingBlocks;
using Core.Thalos.Provider.Contracts;
using Mapster;
using Microsoft.Extensions.Options;
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;
@@ -24,17 +23,17 @@ namespace Core.Thalos.Provider.Providers.Onboarding
public class UserProvider : IUserProvider
{
private readonly CollectionRepository<UserAdapter> repository;
private readonly CacheSettings cacheSettings;
private readonly ICacheSettings cacheSettings;
private readonly IRedisCacheProvider cacheProvider;
public UserProvider(CollectionRepository<UserAdapter> repository,
IRedisCacheProvider cacheProvider,
IOptions<CacheSettings> cacheSettings
ICacheSettings cacheSettings
)
{
this.repository = repository;
this.repository.CollectionInitialization();
this.cacheSettings = cacheSettings.Value;
this.cacheSettings = cacheSettings;
this.cacheProvider = cacheProvider;
}
@@ -56,7 +55,7 @@ namespace Core.Thalos.Provider.Providers.Onboarding
/// <summary>
/// Gets an User by identifier.
/// </summary>
/// <param name="id">The User identifier.</param>
/// <param name="_id">The User mongo identifier.</param>
/// <returns>A <see cref="{Task{UserAdapter}}"/> representing
/// the asynchronous execution of the service.</returns>
public async ValueTask<UserAdapter> GetUserById(string _id, CancellationToken cancellationToken)
@@ -68,7 +67,7 @@ namespace Core.Thalos.Provider.Providers.Onboarding
var user = await repository.FindByIdAsync(_id);
await cacheProvider.SetAsync(cacheKey, user);
await cacheProvider.SetAsync(cacheKey, user, TimeSpan.FromMinutes(cacheSettings.DefaultCacheDurationInMinutes));
return user;
}
@@ -83,11 +82,11 @@ namespace Core.Thalos.Provider.Providers.Onboarding
var cacheKey = CacheKeyHelper.GenerateCacheKey(this, "GetAllUsers");
var cachedData = await cacheProvider.GetAsync<IEnumerable<UserAdapter>>(cacheKey) ?? [];
if (cachedData.Any()) return cachedData;
//if (cachedData.Any()) return cachedData;
var users = await repository.AsQueryable();
await cacheProvider.SetAsync(cacheKey, users);
await cacheProvider.SetAsync(cacheKey, users, TimeSpan.FromMinutes(cacheSettings.DefaultCacheDurationInMinutes));
return users;
}
@@ -98,7 +97,7 @@ namespace Core.Thalos.Provider.Providers.Onboarding
/// <param name="email">The User email.</param>
/// <returns>A <see cref="{Task{UserAdapter}}"/> representing
/// the asynchronous execution of the service.</returns>
public async ValueTask<UserAdapter> GetUserByEmail(string? email, CancellationToken cancellationToken)
public async ValueTask<UserAdapter> GetUserByEmail(string email, CancellationToken cancellationToken)
{
var cacheKey = CacheKeyHelper.GenerateCacheKey(this, "GetUserByEmail", email);
var cachedData = await cacheProvider.GetAsync<UserAdapter>(cacheKey);
@@ -120,7 +119,7 @@ namespace Core.Thalos.Provider.Providers.Onboarding
/// <param name="email">The User email.</param>
/// <returns>A <see cref="{Task{UserAdapter}}"/> representing
/// the asynchronous execution of the service.</returns>
public async ValueTask<UserExistenceAdapter> ValidateUserExistence(string? email, CancellationToken cancellationToken)
public async ValueTask<UserExistenceAdapter> ValidateUserExistence(string email, CancellationToken cancellationToken)
{
var cacheKey = CacheKeyHelper.GenerateCacheKey(this, "GetUserByEmail", email);
var cachedData = await cacheProvider.GetAsync<UserAdapter>(cacheKey);
@@ -143,13 +142,13 @@ namespace Core.Thalos.Provider.Providers.Onboarding
/// <summary>
/// Changes the status of the user.
/// </summary>
/// <param name="id">The user identifier.</param>
/// <param name="_id">The user mongo identifier.</param>
/// <param name="newStatus">The new status of the user.</param>
/// <returns>A <see cref="{Task{UserAdapter}}"/> representing
/// the asynchronous execution of the service.</returns>
public async ValueTask<UserAdapter> ChangeUserStatus(string id, Core.Blueprint.Mongo.StatusEnum newStatus, CancellationToken cancellationToken)
public async ValueTask<UserAdapter> ChangeUserStatus(string _id, Core.Blueprint.Mongo.StatusEnum newStatus, CancellationToken cancellationToken)
{
var entity = await repository.FindByIdAsync(id);
var entity = await repository.FindByIdAsync(_id);
entity.Status = newStatus;
await repository.ReplaceOneAsync(entity);
@@ -158,10 +157,10 @@ namespace Core.Thalos.Provider.Providers.Onboarding
}
/// <summary>
/// Updates a User by id.
/// Updates a User by _id.
/// </summary>
/// <param name="entity">The User to be updated.</param>
/// <param name="id">The User identifier.</param>
/// <param name="_id">The User mongo identifier.</param>
/// <returns>A <see cref="{Task{UserAdapter}}"/> representing
/// the asynchronous execution of the service.</returns>
public async ValueTask<UserAdapter> UpdateUser(UserAdapter entity, CancellationToken cancellationToken)
@@ -174,7 +173,7 @@ namespace Core.Thalos.Provider.Providers.Onboarding
/// <summary>
/// Logs in the user.
/// </summary>
/// <param name="id">The User identifier.</param>
/// <param name="_id">The User mongo identifier.</param>
/// <returns>A <see cref="{Task{UserAdapter}}"/> representing
/// the asynchronous execution of the service.</returns>
public async ValueTask<UserAdapter?> LogInUser(string email, CancellationToken cancellationToken)
@@ -318,19 +317,19 @@ namespace Core.Thalos.Provider.Providers.Onboarding
User = new UserAdapter
{
Id = result["_id"]?.ToString() ?? "",
Guid = result.Contains("guid") && !result["guid"].IsBsonNull ? result["guid"].AsString : "",
Email = result.Contains("email") && !result["email"].IsBsonNull ? result["email"].AsString : "",
Name = result.Contains("name") && !result["name"].IsBsonNull ? result["name"].AsString : "",
MiddleName = result.Contains("middleName") && !result["middleName"].IsBsonNull ? result["middleName"].AsString : "",
LastName = result.Contains("lastName") && !result["lastName"].IsBsonNull ? result["lastName"].AsString : "",
DisplayName = result.Contains("displayName") && !result["displayName"].IsBsonNull ? result["displayName"].AsString : "",
RoleId = result.Contains("roleId") && !result["roleId"].IsBsonNull ? result["roleId"].ToString() : "",
Guid = result.Contains("guid") && !result["guid"].IsBsonNull ? result["guid"].AsString : string.Empty,
Email = result.Contains("email") && !result["email"].IsBsonNull ? result["email"].AsString : string.Empty,
Name = result.Contains("name") && !result["name"].IsBsonNull ? result["name"].AsString : string.Empty,
MiddleName = result.Contains("middleName") && !result["middleName"].IsBsonNull ? result["middleName"].AsString : string.Empty,
LastName = result.Contains("lastName") && !result["lastName"].IsBsonNull ? result["lastName"].AsString : string.Empty,
DisplayName = result.Contains("displayName") && !result["displayName"].IsBsonNull ? result["displayName"].AsString : string.Empty,
RoleId = result.Contains("roleId") && !result["roleId"].IsBsonNull ? result["roleId"].ToString() : string.Empty,
LastLogIn = result.Contains("lastLogIn") && !result["lastLogIn"].IsBsonNull ? result["lastLogIn"].ToUniversalTime() : DateTime.MinValue,
LastLogOut = result.Contains("lastLogOut") && !result["lastLogOut"].IsBsonNull ? result["lastLogOut"].ToUniversalTime() : DateTime.MinValue,
CreatedAt = result.Contains("createdAt") && !result["createdAt"].IsBsonNull ? result["createdAt"].ToUniversalTime() : DateTime.MinValue,
CreatedBy = result.Contains("createdBy") && !result["createdBy"].IsBsonNull ? result["createdBy"].AsString : "",
CreatedBy = result.Contains("createdBy") && !result["createdBy"].IsBsonNull ? result["createdBy"].AsString : string.Empty,
UpdatedAt = result.Contains("updatedAt") && !result["updatedAt"].IsBsonNull ? result["updatedAt"].ToUniversalTime() : DateTime.MinValue,
UpdatedBy = result.Contains("updatedBy") && !result["updatedBy"].IsBsonNull ? result["updatedBy"].AsString : "",
UpdatedBy = result.Contains("updatedBy") && !result["updatedBy"].IsBsonNull ? result["updatedBy"].AsString : string.Empty,
Status = result.Contains("status") && !result["status"].IsBsonNull
? (Core.Blueprint.Mongo.StatusEnum)Enum.Parse(typeof(Core.Blueprint.Mongo.StatusEnum), result["status"].AsString)
: Core.Blueprint.Mongo.StatusEnum.Inactive
@@ -339,13 +338,13 @@ namespace Core.Thalos.Provider.Providers.Onboarding
{
Id = result.Contains("role") && result["role"].IsBsonDocument && result["role"].AsBsonDocument.Contains("_id")
? result["role"]["_id"]?.ToString() ?? ""
: "",
: string.Empty,
Name = result.Contains("role") && result["role"].IsBsonDocument && result["role"].AsBsonDocument.Contains("name")
? result["role"]["name"]?.AsString ?? ""
: "",
: string.Empty,
Description = result.Contains("role") && result["role"].IsBsonDocument && result["role"].AsBsonDocument.Contains("description")
? result["role"]["description"]?.AsString ?? ""
: "",
: string.Empty,
Applications = result.Contains("role") && result["role"].IsBsonDocument &&
result["role"].AsBsonDocument.Contains("applications") &&
result["role"]["applications"].IsBsonArray
@@ -389,12 +388,12 @@ namespace Core.Thalos.Provider.Providers.Onboarding
result["role"].AsBsonDocument.Contains("createdBy") &&
!result["role"]["createdBy"].IsBsonNull
? result["role"]["createdBy"].AsString
: "",
: string.Empty,
UpdatedBy = result.Contains("role") && result["role"].IsBsonDocument &&
result["role"].AsBsonDocument.Contains("updatedBy") &&
!result["role"]["updatedBy"].IsBsonNull
? result["role"]["updatedBy"].AsString
: ""
: string.Empty
},
Permissions = result.Contains("permissions") && result["permissions"].IsBsonArray
? result["permissions"].AsBsonArray
@@ -416,12 +415,12 @@ namespace Core.Thalos.Provider.Providers.Onboarding
}
/// <summary>
/// Deletes an User by id.
/// Deletes an User by _id.
/// </summary>
/// <param name="id">The User identifier.</param>
/// <param name="_id">The User mongo identifier.</param>
/// <returns>A <see cref="{Task{UserAdapter}}"/> representing
/// the asynchronous execution of the service.</returns>
public async ValueTask<UserAdapter> DeleteUser(string _id, CancellationToken cancellationToken)
public async ValueTask<UserAdapter?> DeleteUser(string _id, CancellationToken cancellationToken)
{
var entity = await repository.DeleteOneAsync(doc => doc.Id == _id);