From d41e03850b8358a840ce2b575452565b02994e6e Mon Sep 17 00:00:00 2001 From: "Amir.H Khademi" Date: Sun, 1 Sep 2024 12:28:42 +0330 Subject: [PATCH] feat ( ReviewEntitiy ) - Add review entity and CQRS --- .../Components/Originals/SideBarUi.razor | 1 + .../Pages/PagesSettingPage.razor | 131 ++++++++++ .../Pages/PagesSettingPage.razor.cs | 244 ++++++++++++++++++ 3 files changed, 376 insertions(+) create mode 100644 Netina.AdminPanel.PWA/Pages/PagesSettingPage.razor create mode 100644 Netina.AdminPanel.PWA/Pages/PagesSettingPage.razor.cs diff --git a/Netina.AdminPanel.PWA/Components/Originals/SideBarUi.razor b/Netina.AdminPanel.PWA/Components/Originals/SideBarUi.razor index 3d3c610..e51a3a8 100644 --- a/Netina.AdminPanel.PWA/Components/Originals/SideBarUi.razor +++ b/Netina.AdminPanel.PWA/Components/Originals/SideBarUi.razor @@ -41,6 +41,7 @@ Icon="@Icons.Material.Outlined.Pages"> برگه ها سوالات متداول + تنظیماتــ برگه ها diff --git a/Netina.AdminPanel.PWA/Pages/PagesSettingPage.razor b/Netina.AdminPanel.PWA/Pages/PagesSettingPage.razor new file mode 100644 index 0000000..e3004fc --- /dev/null +++ b/Netina.AdminPanel.PWA/Pages/PagesSettingPage.razor @@ -0,0 +1,131 @@ +@page "/setting/pages" +@attribute [Microsoft.AspNetCore.Authorization.Authorize] + +@inject IDialogService DialogService +@inject NavigationManager NavigationManager +@inject ISnackbar Snackbar +@inject IUserUtility UserUtility +@inject IRestWrapper RestWrapper + + + + تنظیمات برگه ها + برگه های وب سایت خود را ویرایش نمایید + + + + + + + افزودن لینک حذف شده + + + + + + + افزودن + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + افزودن ریدایرکت جدید + + + + + + + + + + افزودن + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@code +{ + public PagesSettingPageViewModel ViewModel { get; set; } + protected override async Task OnInitializedAsync() + { + ViewModel = new PagesSettingPageViewModel(NavigationManager, Snackbar, UserUtility, RestWrapper, DialogService); + await ViewModel.InitializeAsync(); + await base.OnInitializedAsync(); + } +} \ No newline at end of file diff --git a/Netina.AdminPanel.PWA/Pages/PagesSettingPage.razor.cs b/Netina.AdminPanel.PWA/Pages/PagesSettingPage.razor.cs new file mode 100644 index 0000000..bee7de6 --- /dev/null +++ b/Netina.AdminPanel.PWA/Pages/PagesSettingPage.razor.cs @@ -0,0 +1,244 @@ +namespace Netina.AdminPanel.PWA.Pages; + +public class PagesSettingPageViewModel(NavigationManager navigationManager, + ISnackbar snackbar, + IUserUtility userUtility, + IRestWrapper restWrapper, + IDialogService dialogService) : BaseViewModel (userUtility) +{ + public ObservableCollection RedirectItems { get; set; } = new ObservableCollection (); + public ObservableCollection DeletedPages { get; set; } = new ObservableCollection (); + + public override async Task InitializeAsync() + { + try + { + IsProcessing = true; + var token = await _userUtility.GetBearerTokenAsync(); + if (token == null) + throw new Exception("Token is null"); + var pages = await restWrapper.SettingRestApi.GetSettingAsync(nameof(PageSetting), token); + PageDto = pages; + RedirectItems.Clear(); + if (PageDto.RedirectItems.Count > 20) + RedirectItemPageCount = RedirectItemsCurrentPage + 2; + PageDto.RedirectItems.Skip(RedirectItemsCurrentPage * 20).Take(20).ToList().ForEach(a=>RedirectItems.Add(a)); + + DeletedPages.Clear(); + if (PageDto.DeletedPages.Count > 20) + DeletedPagesCount = DeletedPagesCurrentPage + 2; + PageDto.DeletedPages.Skip(DeletedPagesCurrentPage * 20).Take(20).ToList().ForEach(a => DeletedPages.Add(a)); + } + catch (ApiException e) + { + var exe = await e.GetContentAsAsync(); + if (e.StatusCode == HttpStatusCode.Unauthorized) + { + await _userUtility.LogoutAsync(); + navigationManager.NavigateTo("login", true, true); + } + snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); + } + catch (Exception ex) + { + snackbar.Add(ex.Message, Severity.Error); + } + finally + { + IsProcessing = false; + } + + await base.InitializeAsync(); + } + + public int RedirectItemsCurrentPage { get; set; } = 0; + public int RedirectItemPageCount { get; set; } = 0; + public void RedirectItemChangePageAsync(int page) + { + RedirectItemsCurrentPage = page - 1; + + if (PageDto.RedirectItems.Count > (RedirectItemsCurrentPage * 20)) + RedirectItemPageCount = RedirectItemsCurrentPage + 2; + + PageDto.RedirectItems.Skip(RedirectItemsCurrentPage * 20).Take(20).ToList().ForEach(a => RedirectItems.Add(a)); + } + + public RedirectItem NewRedirectItem { get; set; } = new(); + public async Task AddPageAsync() + { + try + { + IsProcessing = true; + var token = await _userUtility.GetBearerTokenAsync(); + if (token == null) + throw new Exception("Token is null"); + + if (NewRedirectItem.OldUrl.IsNullOrEmpty()) + throw new AppException("لینک قدیمی را وارد کنید"); + if (NewRedirectItem.NewUrl.IsNullOrEmpty()) + throw new AppException("لینک جدید را وارد کنید"); + var newUrl = StringExtensions.GetSlug(NewRedirectItem.NewUrl); + var oldUrl = StringExtensions.GetSlug(NewRedirectItem.OldUrl); + var item = new RedirectItem + { + NewUrl = newUrl, + OldUrl = oldUrl + }; + if (PageDto.RedirectItems.Any(c => c.OldUrl == item.OldUrl)) + throw new AppException("لینک مورد نظر قبلا اضافه شده است"); + PageDto.RedirectItems.Add(item); + await restWrapper.SettingRestApi.PostSettingAsync(nameof(PageSetting), PageDto, token); + NewRedirectItem = new RedirectItem(); + snackbar.Add("لینک ریدایرکت با موفقیت افزوده شد", Severity.Success); + await InitializeAsync(); + + } + catch (ApiException e) + { + var exe = await e.GetContentAsAsync(); + if (e.StatusCode == HttpStatusCode.Unauthorized) + { + await _userUtility.LogoutAsync(); + navigationManager.NavigateTo("login", true, true); + } + snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); + } + catch (Exception ex) + { + snackbar.Add(ex.Message, Severity.Error); + } + finally + { + IsProcessing = false; + } + } + public async Task RemovePageAsync(RedirectItem item) + { + try + { + IsProcessing = true; + var token = await _userUtility.GetBearerTokenAsync(); + if (token == null) + throw new Exception("Token is null"); + PageDto.RedirectItems.Remove(item); + await restWrapper.SettingRestApi.PostSettingAsync(nameof(PageSetting), PageDto, token); + snackbar.Add("لینک ریدایرکت مورد نظر با موفقیت حذف شد", Severity.Success); + await InitializeAsync(); + + + } + catch (ApiException e) + { + var exe = await e.GetContentAsAsync(); + if (e.StatusCode == HttpStatusCode.Unauthorized) + { + await _userUtility.LogoutAsync(); + navigationManager.NavigateTo("login", true, true); + } + snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); + } + catch (Exception ex) + { + snackbar.Add(ex.Message, Severity.Error); + } + finally + { + IsProcessing = false; + } + } + + public DeletedPageItem NewDeletedPage { get; set; } = new(); + public async Task AddDeletedPage() + { + + try + { + IsProcessing = true; + var token = await _userUtility.GetBearerTokenAsync(); + if (token == null) + throw new Exception("Token is null"); + + if (NewDeletedPage.Url.IsNullOrEmpty()) + throw new AppException("لینک حذف شده را وارد کنید"); + var item = new DeletedPageItem() + { + Url = NewDeletedPage.Url + }; + if (PageDto.DeletedPages.Any(c => c.Url == item.Url)) + throw new AppException("لینک مورد نظر قبلا اضافه شده است"); + + PageDto.DeletedPages.Add(NewDeletedPage); + DeletedPages.Add(NewDeletedPage); + await restWrapper.SettingRestApi.PostSettingAsync(nameof(PageSetting), PageDto, token); + NewRedirectItem = new RedirectItem(); + snackbar.Add("لینک حذف با موفقیت افزوده شد", Severity.Success); + await InitializeAsync(); + + } + catch (ApiException e) + { + var exe = await e.GetContentAsAsync(); + if (e.StatusCode == HttpStatusCode.Unauthorized) + { + await _userUtility.LogoutAsync(); + navigationManager.NavigateTo("login", true, true); + } + snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); + } + catch (Exception ex) + { + snackbar.Add(ex.Message, Severity.Error); + } + finally + { + IsProcessing = false; + } + } + + public async Task RemoveDeletedPageAsync(DeletedPageItem item) + { + try + { + IsProcessing = true; + var token = await _userUtility.GetBearerTokenAsync(); + if (token == null) + throw new Exception("Token is null"); + PageDto.DeletedPages.Remove(item); + await restWrapper.SettingRestApi.PostSettingAsync(nameof(PageSetting), PageDto, token); + snackbar.Add("لینک مورد نظر با موفقیت حذف شد", Severity.Success); + await InitializeAsync(); + + + } + catch (ApiException e) + { + var exe = await e.GetContentAsAsync(); + if (e.StatusCode == HttpStatusCode.Unauthorized) + { + await _userUtility.LogoutAsync(); + navigationManager.NavigateTo("login", true, true); + } + snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error); + } + catch (Exception ex) + { + snackbar.Add(ex.Message, Severity.Error); + } + finally + { + IsProcessing = false; + } + } + + public int DeletedPagesCurrentPage { get; set; } = 0; + public int DeletedPagesCount { get; set; } = 0; + public void DeletedPagesChangePageAsync(int page) + { + DeletedPagesCurrentPage = page - 1; + + if (PageDto.RedirectItems.Count > (DeletedPagesCurrentPage * 20)) + DeletedPagesCount = DeletedPagesCurrentPage + 2; + + PageDto.DeletedPages.Skip(DeletedPagesCurrentPage * 20).Take(20).ToList().ForEach(a => DeletedPages.Add(a)); + } +} \ No newline at end of file