From 7b5a060c07d419d3db8714529e19b7f9580821df Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 17 Dec 2022 22:01:53 +1100 Subject: [PATCH] Issue-39: Handle multiple groups in profile --- Topo/Services/LoginService.cs | 26 +++++++++++++++++++------- Topo/Services/TerrainAPIService.cs | 17 ++++------------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/Topo/Services/LoginService.cs b/Topo/Services/LoginService.cs index eebb988..c3529f2 100644 --- a/Topo/Services/LoginService.cs +++ b/Topo/Services/LoginService.cs @@ -24,7 +24,7 @@ public LoginService(StorageService storageService, ITerrainAPIService terrainAPI public async Task LoginAsync(string? branch, string? username, string? password) { var authenticationResultModel = await _terrainAPIService.LoginAsync(branch, username, password); - + _storageService.IsAuthenticated = false; if (authenticationResultModel.AuthenticationSuccessResultModel.AuthenticationResult != null) { @@ -37,24 +37,36 @@ public LoginService(StorageService storageService, ITerrainAPIService terrainAPI public async Task GetUserAsync() { - var getUserResultModel = await _terrainAPIService.GetUserAsync(); + var getUserResultModel = await _terrainAPIService.GetUserAsync(); _storageService.GetUserResult = getUserResultModel; } public async Task GetProfilesAsync() { var getProfilesResultModel = await _terrainAPIService.GetProfilesAsync(); + var profilesWithUnits = getProfilesResultModel.profiles.Where(p => p.unit != null).ToArray(); + getProfilesResultModel.profiles = profilesWithUnits; if (_storageService != null) _storageService.GetProfilesResult = getProfilesResultModel; } public List? GetUnits() { - return _storageService.GetProfilesResult?.profiles? - .Where(p => p.member.name == _storageService.MemberName) - .Select(p => p.unit) - .Select(u => new SelectListItem { Text = u?.name, Value = u?.id }) - .ToList(); + var groupCount = _storageService.GetProfilesResult?.profiles.Select(p => p.group.name).Distinct().Count(); + if (groupCount == 1) + { + return _storageService.GetProfilesResult?.profiles? + .Where(p => p.member.name == _storageService.MemberName) + .Select(p => new SelectListItem { Text = $"{p.unit?.name}", Value = p.unit?.id }) + .ToList(); + } + else + { + return _storageService.GetProfilesResult?.profiles? + .Where(p => p.member.name == _storageService.MemberName) + .Select(p => new SelectListItem { Text = $"{p.unit?.name} ({p.group?.name})", Value = p.unit?.id }) + .ToList(); + } } diff --git a/Topo/Services/TerrainAPIService.cs b/Topo/Services/TerrainAPIService.cs index 2e14134..5e5fb63 100644 --- a/Topo/Services/TerrainAPIService.cs +++ b/Topo/Services/TerrainAPIService.cs @@ -165,21 +165,12 @@ public async Task RefreshTokenAsync() public async Task GetProfilesAsync() { await RefreshTokenAsync(); - GetProfilesResultModel? getProfilesResultModel = new GetProfilesResultModel(); - using (var httpClient = new HttpClient()) - { - HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Get, membersAddress + "profiles"); - httpRequest.Content = new StringContent("", Encoding.UTF8, "application/x-amz-json-1.1"); - httpRequest.Headers.Add("authorization", _storageService?.AuthenticationResult?.IdToken); - httpRequest.Headers.Add("accept", "application/json, text/plain, */*"); + string requestUri = $"{membersAddress}profiles"; + var result = await SendRequest(HttpMethod.Get, requestUri); + var getProfilesResultModel = DeserializeObject(result); - var response = await httpClient.SendAsync(httpRequest); - var responseContent = response.Content.ReadAsStringAsync(); - var result = responseContent.Result; - getProfilesResultModel = DeserializeObject(result); - return getProfilesResultModel; - } + return getProfilesResultModel; } public async Task GetMembersAsync(string selectedUnitId)