using DocuMed.Domain.Entities.City; using Mapster; namespace DocuMed.PWA.Pages; public class ProfilePageViewModel( IUserUtility userUtility, IRestWrapper restWrapper, ISnackbar snackbar, NavigationManager navigationManager) : BaseViewModel { public IUserUtility UserUtility { get; } = userUtility; public IRestWrapper RestWrapper { get; } = restWrapper; public ISnackbar Snackbar { get; } = snackbar; public ApplicationUserSDto User { get; set; } = new(); public List Cities { get; private set; } = new List(); public List Universities { get; private set; } = new List(); public List Sections { get; private set; } = new List(); public SectionSDto? SelectedSection { get; set; } public CitySDto? SelectedCity { get; set; } public UniversitySDto? SelectedUni { get; set; } public readonly string Version = Assembly.GetAssembly(typeof(Program))?.GetName()?.Version?.ToString() ?? string.Empty; public override async Task InitializeAsync() { User = await UserUtility.GetUserAsync(); var token = await UserUtility.GetBearerTokenAsync(); Cities = await RestWrapper.CrudDtoApiRest(Address.CityController).ReadAll(0, token); Universities = await RestWrapper.CrudDtoApiRest(Address.UniversityController).ReadAll(0, token); if (User.UniversityId != Guid.Empty) { SelectedUni = Universities.FirstOrDefault(u => u.Id == User.UniversityId); SelectedCity = Cities.FirstOrDefault(c => c.Id == SelectedUni?.CityId); if (SelectedUni != null) if (User.SectionId != Guid.Empty) { Sections = await RestWrapper.SectionRestApi.GetByUniversityAsync(SelectedUni.Id, token); SelectedSection = Sections.FirstOrDefault(s => s.Id == User.SectionId); } } await base.InitializeAsync(); } public async Task SubmitEditAsync() { try { IsProcessing = true; var token = await UserUtility.GetBearerTokenAsync(); var request = User.Adapt(); if (SelectedUni != null) { request.UniversityId = SelectedUni.Id; User.UniversityId = SelectedUni.Id; } if (SelectedSection != null) { request.SectionId = SelectedSection.Id; User.SectionId = SelectedSection.Id; User.SectionName = SelectedSection.Name; } await RestWrapper.UserRestApi.UpdateUserAsync(request, token); await UserUtility.SetUserAsync(User); Snackbar.Add("ویرایش حساب کاربری با موفقیت انجام شد", Severity.Success); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); Snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); } catch (Exception e) { Snackbar.Add(e.Message, Severity.Error); } finally { IsProcessing = false; } } public async Task LogoutAsync() { await UserUtility.LogoutAsync(); navigationManager.NavigateTo(""); } public async Task> SearchCity(string city) { try { if (Cities.Count == 0) { var token = await UserUtility.GetBearerTokenAsync(); Cities = await RestWrapper.CrudDtoApiRest(Address.CityController).ReadAll(0, token); } if (city.IsNullOrEmpty()) return Cities; return Cities.Where(c => c.Name.Contains(city)); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); Snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); return Cities; } catch (Exception e) { Snackbar.Add(e.Message, Severity.Error); return Cities; } } public async Task> SearchSection(string section) { try { if (SelectedUni != null) { var token = await UserUtility.GetBearerTokenAsync(); Sections = await RestWrapper.SectionRestApi.GetByUniversityAsync(SelectedUni.Id, token); } if (section.IsNullOrEmpty()) return Sections; return Sections.Where(c => c.Name.Contains(section)); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); Snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); return Sections; } catch (Exception e) { Snackbar.Add(e.Message, Severity.Error); return Sections; } } public async Task> SearchUniversity(string uni) { try { if (Universities.Count == 0) { var token = await UserUtility.GetBearerTokenAsync(); Universities = await RestWrapper.CrudDtoApiRest(Address.UniversityController).ReadAll(0, token); } if (uni.IsNullOrEmpty()) return Universities; return Universities.Where(c => c.Name.Contains(uni)); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); Snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); return Universities; } catch (Exception e) { Snackbar.Add(e.Message, Severity.Error); return Universities; } } }