public Task <TenantMapResult <TTenantMappings> > MapTenantAsync(string tenantName) { TenantMapResult <TTenantMappings> mapResult; var tMap = NamesStore.GetTenantMappingByName(tenantName); if (tMap == null) { mapResult = TenantMapResult <TTenantMappings> .NotFound; } else { mapResult = new TenantMapResult <TTenantMappings>(tMap); } return(Task.FromResult(mapResult)); }
public async Task Invoke(HttpContext httpContext, ITenantResolverService tenantResolverService, ITenantMapperService <TTenantMapping> tenantMapperService, ITenantInfoService <TTenant> tenantInfoService) { TenantContext <TTenant> _tenantContext = null; TenantResolveResult _tenantResolveResult = null; TenantMapResult <TTenantMapping> _tenantMapResult = null; TTenant _tenant = default; TTenantMapping _tenantMapping = default; ResolutionResult _resolutionResult = ResolutionResult.NotFound; MappingResult _mappingResult = MappingResult.NotFound; ResolutionType _resolutionType = ResolutionType.Nothing; string _tenantResolvedData = ""; _tenantResolveResult = await tenantResolverService.ResolveTenantAsync(httpContext); _resolutionResult = _tenantResolveResult.ResolutionResult; switch (_resolutionResult) { case ResolutionResult.Success: _resolutionType = _tenantResolveResult.ResolutionType; _tenantResolvedData = _tenantResolveResult.Value; switch (_resolutionType) { case ResolutionType.TenantId: _mappingResult = MappingResult.NotApply; break; case ResolutionType.TenantName: _mappingResult = MappingResult.Success; break; } break; case ResolutionResult.NotApply: _mappingResult = MappingResult.NotApply; _tenantResolvedData = ""; break; case ResolutionResult.NotFound: _mappingResult = MappingResult.NotFound; _tenantResolvedData = ""; break; case ResolutionResult.Error: _mappingResult = MappingResult.Error; _tenantResolvedData = ""; break; } if (_resolutionResult == ResolutionResult.Success) { if (_mappingResult != MappingResult.NotApply) //if applies mapping call mapping service { _tenantMapResult = await tenantMapperService.MapTenantAsync(_tenantResolveResult.Value); _mappingResult = _tenantMapResult.MappingResult; switch (_mappingResult) { case MappingResult.Success: _tenantMapping = _tenantMapResult.Value; _tenantResolvedData = _tenantMapping.TenantId; break; case MappingResult.NotFound: _tenantResolvedData = ""; _resolutionResult = ResolutionResult.NotFound; _resolutionType = ResolutionType.Nothing; break; case MappingResult.Error: _tenantResolvedData = ""; _resolutionResult = ResolutionResult.Error; _resolutionType = ResolutionType.Nothing; break; } } //at this point it must be the id if (!string.IsNullOrWhiteSpace(_tenantResolvedData)) { _tenant = await tenantInfoService.GetTenantInfoAsync(_tenantResolvedData); } } _tenantContext = new TenantContext <TTenant>(_tenant, _resolutionResult, _mappingResult, _resolutionType); httpContext.SetTenantContext(_tenantContext); await _next(httpContext); }