DashboardController.cs
3,186 bytes
| 1 | using App.BLL.DTO; |
|---|---|
| 2 | using App.BLL.Services.Admin; |
| 3 | using Microsoft.AspNetCore.Authorization; |
| 4 | using Microsoft.AspNetCore.Mvc; |
| 5 | using Microsoft.Extensions.Localization; |
| 6 | using WebApp.Areas.Admin.Models; |
| 7 | |
| 8 | namespace WebApp.Areas.Admin.Controllers; |
| 9 | |
| 10 | [Area("Admin")] |
| 11 | [Authorize(Roles = "admin")] |
| 12 | public class DashboardController : Controller |
| 13 | { |
| 14 | private readonly IAdminStatsService _statsService; |
| 15 | private readonly IStringLocalizer<App.Resources.Views.Shared> _l; |
| 16 | |
| 17 | public DashboardController(IAdminStatsService statsService, |
| 18 | IStringLocalizer<App.Resources.Views.Shared> l) |
| 19 | { |
| 20 | _statsService = statsService; |
| 21 | _l = l; |
| 22 | } |
| 23 | |
| 24 | public async Task<IActionResult> Index() |
| 25 | { |
| 26 | var data = await _statsService.GetDashboardStatsAsync(); |
| 27 | |
| 28 | var vm = new AdminDashboardViewModel |
| 29 | { |
| 30 | Title = _l["Dashboard"].Value, |
| 31 | |
| 32 | TripCount = data.TripCount, |
| 33 | UserCount = data.UserCount, |
| 34 | ExpenseCount = data.ExpenseCount, |
| 35 | CategoryCount = data.CategoryCount, |
| 36 | SettlementCount = data.SettlementCount, |
| 37 | WishlistCount = data.WishlistCount, |
| 38 | PollCount = data.PollCount, |
| 39 | InvitationCount = data.InvitationCount, |
| 40 | CurrencyCount = data.CurrencyCount, |
| 41 | ParticipantCount = data.ParticipantCount, |
| 42 | |
| 43 | ActiveTrips = data.ActiveTrips, |
| 44 | SettledTrips = data.SettledTrips, |
| 45 | ArchivedTrips = data.ArchivedTrips, |
| 46 | TotalExpenseAmount = data.TotalExpenseAmount, |
| 47 | PendingSettlements = data.PendingSettlements, |
| 48 | InProgressSettlements = data.InProgressSettlements, |
| 49 | CompletedSettlements = data.CompletedSettlements, |
| 50 | PendingInvitations = data.PendingInvitations, |
| 51 | PendingPayments = data.PendingPayments, |
| 52 | MarkedPaidPayments = data.MarkedPaidPayments, |
| 53 | |
| 54 | RecentTrips = data.RecentTrips, |
| 55 | RecentExpenses = data.RecentExpenses, |
| 56 | RecentUsers = data.RecentUsers, |
| 57 | |
| 58 | TopActiveTrips = data.TopActiveTrips.Select(t => new TopActiveTripItem |
| 59 | { |
| 60 | Trip = t.Trip, |
| 61 | ParticipantCount = t.ParticipantCount, |
| 62 | ExpenseSum = t.ExpenseSum, |
| 63 | ExpenseCount = t.ExpenseCount |
| 64 | }).ToList(), |
| 65 | BiggestExpenses = data.BiggestExpenses, |
| 66 | NewUsersLast7Days = data.NewUsersLast7Days, |
| 67 | NewUsersLast30Days = data.NewUsersLast30Days, |
| 68 | TopActiveUsers = data.TopActiveUsers.Select(u => new TopActiveUserItem |
| 69 | { |
| 70 | UserId = u.UserId, |
| 71 | Email = u.Email, |
| 72 | FullName = u.FullName, |
| 73 | ExpenseCount = u.ExpenseCount, |
| 74 | TotalAmount = u.TotalAmount |
| 75 | }).ToList(), |
| 76 | ActivityFeed = data.ActivityFeed.Select(a => new ActivityFeedItem |
| 77 | { |
| 78 | Type = a.Type, |
| 79 | Message = _l[a.MessageKey, a.MessageArgs].Value, |
| 80 | Date = a.Date, |
| 81 | IconCssClass = a.IconCssClass, |
| 82 | BadgeCssClass = a.BadgeCssClass |
| 83 | }).ToList() |
| 84 | }; |
| 85 | |
| 86 | return View(vm); |
| 87 | } |
| 88 | } |
| 89 | |