Refactored cache services
This commit is contained in:
@@ -153,5 +153,5 @@ public interface IProjectService
|
|||||||
Task<Result<SiteVisit[]>> GetSiteVisitsAsync(string projectIdHash, CancellationToken cancellationToken = default);
|
Task<Result<SiteVisit[]>> GetSiteVisitsAsync(string projectIdHash, CancellationToken cancellationToken = default);
|
||||||
|
|
||||||
[Log]
|
[Log]
|
||||||
Task<Result<SiteVisit>> GetSiteVisitAsync(string SiteVisitIdHash, CancellationToken cancellationToken = default);
|
Task<Result<SiteVisit>> GetSiteVisitAsync(string siteVisitIdHash, CancellationToken cancellationToken = default);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -215,26 +215,102 @@ public sealed class GovernanceCacheService(GovernanceService service, IDistribut
|
|||||||
return Result.Ok(cached.FromJson<Programme[]>());
|
return Result.Ok(cached.FromJson<Programme[]>());
|
||||||
}));
|
}));
|
||||||
|
|
||||||
public Task<Result<Tenant>> GetTenantAsync(string tenantIdHash, CancellationToken cancellationToken = default)
|
public async Task<Result<Tenant>> GetTenantAsync(string tenantIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<Tenant>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetTenantAsync(tenantIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"gettenant-{tenantIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetTenantAsync(tenantIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<TenantOrganisation>> GetTenantOrganisationAsync(string tenantOrganisationIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<Tenant>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<TenantOrganisation>> GetTenantOrganisationAsync(string tenantOrganisationIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<TenantOrganisation>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetTenantOrganisationAsync(tenantOrganisationIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"gettenantorganisation-{tenantOrganisationIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetTenantOrganisationAsync(tenantOrganisationIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<TenantOrganisation[]>> GetTenantOrganisationsAsync(CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<TenantOrganisation>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<TenantOrganisation[]>> GetTenantOrganisationsAsync(CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<TenantOrganisation[]>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetTenantOrganisationsAsync(cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"gettenantorganisations").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetTenantOrganisationsAsync(cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<Tenant[]>> GetTenantsAsync(CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<TenantOrganisation[]>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<Tenant[]>> GetTenantsAsync(CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<Tenant[]>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetTenantsAsync(cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"gettenants").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetTenantsAsync(cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Result.Ok(cached.FromJson<Tenant[]>());
|
||||||
|
}));
|
||||||
|
|
||||||
public async Task<Result<Organisation>> UpdateOrganisationAsync(UpdateOrganisationRequest request, CancellationToken cancellationToken = default) =>
|
public async Task<Result<Organisation>> UpdateOrganisationAsync(UpdateOrganisationRequest request, CancellationToken cancellationToken = default) =>
|
||||||
await service.UpdateOrganisationAsync(request, cancellationToken);
|
await service.UpdateOrganisationAsync(request, cancellationToken);
|
||||||
|
|
||||||
|
|||||||
@@ -86,46 +86,198 @@ public sealed class ProjectCacheService(ProjectService service, IDistributedCach
|
|||||||
return Result.Ok(cached.FromJson<Domain.Models.Activity>());
|
return Result.Ok(cached.FromJson<Domain.Models.Activity>());
|
||||||
}));
|
}));
|
||||||
|
|
||||||
public Task<Result<Beneficiary[]>> GetBeneficiariesAsync(string projectIdHash, CancellationToken cancellationToken = default)
|
public async Task<Result<Beneficiary[]>> GetBeneficiariesAsync(string projectIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<Beneficiary[]>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetBeneficiariesAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getbeneficiaries-{projectIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetBeneficiariesAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<Beneficiary>> GetBeneficiaryAsync(string beneficiaryIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<Beneficiary[]>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<Beneficiary>> GetBeneficiaryAsync(string beneficiaryIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<Beneficiary>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetBeneficiaryAsync(beneficiaryIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getbeneficiary-{beneficiaryIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetBeneficiaryAsync(beneficiaryIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<ChangeRequest>> GetChangeRequestAsync(string changeRequestIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<Beneficiary>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<ChangeRequest>> GetChangeRequestAsync(string changeRequestIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<ChangeRequest>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetChangeRequestAsync(changeRequestIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getchangerequest-{changeRequestIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetChangeRequestAsync(changeRequestIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<ChangeRequest[]>> GetChangeRequestsAsync(string projectIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<ChangeRequest>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<ChangeRequest[]>> GetChangeRequestsAsync(string projectIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<ChangeRequest[]>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetChangeRequestsAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getchangerequests-{projectIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetChangeRequestsAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<ComplianceItem>> GetComplianceItemAsync(string complianceItemIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<ChangeRequest[]>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<ComplianceItem>> GetComplianceItemAsync(string complianceItemIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<ComplianceItem>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetComplianceItemAsync(complianceItemIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getcomplianceitem-{complianceItemIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetComplianceItemAsync(complianceItemIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<ComplianceItem[]>> GetComplianceItemsAsync(string projectIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<ComplianceItem>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<ComplianceItem[]>> GetComplianceItemsAsync(string projectIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<ComplianceItem[]>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetComplianceItemsAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getcomplianceitems-{projectIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetComplianceItemsAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<Issue>> GetIssueAsync(string issueIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<ComplianceItem[]>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<Issue>> GetIssueAsync(string issueIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<Issue>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetIssueAsync(issueIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getissue-{issueIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetIssueAsync(issueIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<Issue[]>> GetIssuesAsync(string projectIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<Issue>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<Issue[]>> GetIssuesAsync(string projectIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<Issue[]>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetIssuesAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getissues-{projectIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetIssuesAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Result.Ok(cached.FromJson<Issue[]>());
|
||||||
|
}));
|
||||||
|
|
||||||
public async Task<Result<Milestone>> GetMilestoneAsync(string milestoneIdHash, CancellationToken cancellationToken = default) =>
|
public async Task<Result<Milestone>> GetMilestoneAsync(string milestoneIdHash, CancellationToken cancellationToken = default) =>
|
||||||
await Result.Try((Func<Task<Result<Milestone>>>)(async () =>
|
await Result.Try((Func<Task<Result<Milestone>>>)(async () =>
|
||||||
{
|
{
|
||||||
@@ -174,16 +326,54 @@ public sealed class ProjectCacheService(ProjectService service, IDistributedCach
|
|||||||
return Result.Ok(cached.FromJson<Milestone[]>());
|
return Result.Ok(cached.FromJson<Milestone[]>());
|
||||||
}));
|
}));
|
||||||
|
|
||||||
public Task<Result<Outcome>> GetOutcomeAsync(string outcomeIdHash, CancellationToken cancellationToken = default)
|
public async Task<Result<Outcome>> GetOutcomeAsync(string outcomeIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<Outcome>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetOutcomeAsync(outcomeIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getoutcome-{outcomeIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetOutcomeAsync(outcomeIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<Outcome[]>> GetOutcomesAsync(string beneficiaryIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<Outcome>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<Outcome[]>> GetOutcomesAsync(string beneficiaryIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<Outcome[]>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetOutcomesAsync(beneficiaryIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getoutcomes-{beneficiaryIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetOutcomesAsync(beneficiaryIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Result.Ok(cached.FromJson<Outcome[]>());
|
||||||
|
}));
|
||||||
|
|
||||||
public async Task<Result<Programme>> GetProgrammeAsync(string programmeIdHash, CancellationToken cancellationToken = default) =>
|
public async Task<Result<Programme>> GetProgrammeAsync(string programmeIdHash, CancellationToken cancellationToken = default) =>
|
||||||
await Result.Try((Func<Task<Result<Programme>>>)(async () =>
|
await Result.Try((Func<Task<Result<Programme>>>)(async () =>
|
||||||
{
|
{
|
||||||
@@ -376,16 +566,54 @@ public sealed class ProjectCacheService(ProjectService service, IDistributedCach
|
|||||||
return Result.Ok(cached.FromJson<Project[]>());
|
return Result.Ok(cached.FromJson<Project[]>());
|
||||||
}));
|
}));
|
||||||
|
|
||||||
public Task<Result<SiteVisit>> GetSiteVisitAsync(string SiteVisitIdHash, CancellationToken cancellationToken = default)
|
public async Task<Result<SiteVisit>> GetSiteVisitAsync(string siteVisitIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<SiteVisit>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetSiteVisitAsync(siteVisitIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getsitevisit-{siteVisitIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetSiteVisitAsync(siteVisitIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<SiteVisit[]>> GetSiteVisitsAsync(string projectIdHash, CancellationToken cancellationToken = default)
|
return Result.Ok(cached.FromJson<SiteVisit>());
|
||||||
|
}));
|
||||||
|
|
||||||
|
public async Task<Result<SiteVisit[]>> GetSiteVisitsAsync(string projectIdHash, CancellationToken cancellationToken = default) =>
|
||||||
|
await Result.Try((Func<Task<Result<SiteVisit[]>>>)(async () =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!await featureManager.IsEnabledAsync(ServiceCachingFeature))
|
||||||
|
return await service.GetSiteVisitsAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
var cacheKey = HashService.ToMd5Hash($"getsitevisits-{projectIdHash}").Value;
|
||||||
|
|
||||||
|
var cached = await cache.GetStringAsync(cacheKey, cancellationToken);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(cached))
|
||||||
|
{
|
||||||
|
var result = await service.GetSiteVisitsAsync(projectIdHash, cancellationToken);
|
||||||
|
|
||||||
|
if (result.IsFailed) return result;
|
||||||
|
|
||||||
|
await cache.SetStringAsync(cacheKey, result.Value.ToJson(), cacheOptions, cancellationToken);
|
||||||
|
|
||||||
|
return result.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Result.Ok(cached.FromJson<SiteVisit[]>());
|
||||||
|
}));
|
||||||
|
|
||||||
public async Task<Result> UpdateBeneficiaryItemAsync(UpdateBeneficiaryRequest request, Guid userId, CancellationToken cancellationToken = default) =>
|
public async Task<Result> UpdateBeneficiaryItemAsync(UpdateBeneficiaryRequest request, Guid userId, CancellationToken cancellationToken = default) =>
|
||||||
await service.UpdateBeneficiaryItemAsync(request, userId, cancellationToken);
|
await service.UpdateBeneficiaryItemAsync(request, userId, cancellationToken);
|
||||||
|
|
||||||
|
|||||||
@@ -498,7 +498,7 @@ public sealed class ProjectService(IDbContextFactory<ApplicationDbContext> conte
|
|||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result<SiteVisit>> GetSiteVisitAsync(string SiteVisitIdHash, CancellationToken cancellationToken = default)
|
public Task<Result<SiteVisit>> GetSiteVisitAsync(string siteVisitIdHash, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ public sealed class IdentityService(IDbContextFactory<ApplicationDbContext> cont
|
|||||||
{
|
{
|
||||||
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
||||||
|
|
||||||
|
// TODO: Ensure TenantUser status is checked
|
||||||
var userExistsAndActive = await context.Users
|
var userExistsAndActive = await context.Users
|
||||||
.AnyAsync(u => u.Id == userId && u.Status == ActivityStatus.Active, cancellationToken);
|
.AnyAsync(u => u.Id == userId && u.Status == ActivityStatus.Active, cancellationToken);
|
||||||
|
|
||||||
|
|||||||
@@ -14,8 +14,11 @@ public sealed class UserService(IDbContextFactory<ApplicationDbContext> contextF
|
|||||||
{
|
{
|
||||||
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
||||||
|
|
||||||
|
// TODO: refactor to use TenantUser
|
||||||
var user = await context.Users.FirstOrDefaultAsync(u => u.Id == userId, cancellationToken);
|
var user = await context.Users.FirstOrDefaultAsync(u => u.Id == userId, cancellationToken);
|
||||||
|
|
||||||
|
// TODO: refactor to use TenantUser
|
||||||
|
// TODO: Also add to TenantUser
|
||||||
if (user is null)
|
if (user is null)
|
||||||
context.Users.Add(new Domain.Entities.User
|
context.Users.Add(new Domain.Entities.User
|
||||||
{
|
{
|
||||||
@@ -40,8 +43,10 @@ public sealed class UserService(IDbContextFactory<ApplicationDbContext> contextF
|
|||||||
{
|
{
|
||||||
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
||||||
|
|
||||||
|
// TODO: refactor to use TenantUser
|
||||||
var query = context.Users.AsNoTracking();
|
var query = context.Users.AsNoTracking();
|
||||||
|
|
||||||
|
// TODO: refactor to use TenantUser
|
||||||
if (request.Status.HasValue)
|
if (request.Status.HasValue)
|
||||||
query = query.Where(u => u.Status == request.Status.Value);
|
query = query.Where(u => u.Status == request.Status.Value);
|
||||||
|
|
||||||
@@ -59,6 +64,7 @@ public sealed class UserService(IDbContextFactory<ApplicationDbContext> contextF
|
|||||||
else
|
else
|
||||||
query = query.OrderBy(u => u.Id);
|
query = query.OrderBy(u => u.Id);
|
||||||
|
|
||||||
|
// TODO: refactor to use TenantUser
|
||||||
var users = await query.Skip((pagination.Page - 1) * pagination.PageSize)
|
var users = await query.Skip((pagination.Page - 1) * pagination.PageSize)
|
||||||
.Take(pagination.PageSize).ToListAsync(cancellationToken);
|
.Take(pagination.PageSize).ToListAsync(cancellationToken);
|
||||||
|
|
||||||
@@ -70,6 +76,7 @@ public sealed class UserService(IDbContextFactory<ApplicationDbContext> contextF
|
|||||||
{
|
{
|
||||||
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
||||||
|
|
||||||
|
// TODO: Update TenantUser status as well
|
||||||
var changedTotal = await context.Users
|
var changedTotal = await context.Users
|
||||||
.Where(f => f.Id == userId)
|
.Where(f => f.Id == userId)
|
||||||
.ExecuteUpdateAsync(f => f.SetProperty(u => u.Status, status), cancellationToken);
|
.ExecuteUpdateAsync(f => f.SetProperty(u => u.Status, status), cancellationToken);
|
||||||
@@ -82,6 +89,7 @@ public sealed class UserService(IDbContextFactory<ApplicationDbContext> contextF
|
|||||||
{
|
{
|
||||||
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
||||||
|
|
||||||
|
// TODO: refactor to use TenantUser
|
||||||
var user = await context.Users.AsNoTracking()
|
var user = await context.Users.AsNoTracking()
|
||||||
.FirstOrDefaultAsync(f => f.Id == userId, cancellationToken);
|
.FirstOrDefaultAsync(f => f.Id == userId, cancellationToken);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user