profileShare

rasmusjy / splitapp-backend-microservices

Read-only snapshot

No repository description.

main default branch 501 files Expires Sep 13, 2026, 9:06 AM
DashboardController.cs 3,244 bytes
1 using SplitApp.WebApp.Application.DTO;
2 using SplitApp.WebApp.Application.Services.Admin;
3 using Microsoft.AspNetCore.Authorization;
4 using Microsoft.AspNetCore.Mvc;
5 using Microsoft.Extensions.Localization;
6 using SplitApp.WebApp.Areas.Admin.Models;
7
8 namespace SplitApp.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