Files
LeaJobTrackerWebApp/Desktop/hallo/LEA/Controllers/HomeController.cs
younes elhaddoury bb13759af4 hallo
2025-09-17 10:28:02 +02:00

98 lines
3.7 KiB
C#

using System.Diagnostics;
using System.Globalization;
using LEA.Data;
using LEA.Models;
using LEA.ViewModels;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace LEA.Controllers;
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly AppDbContext _context;
private readonly UserManager<ApplicationUser> _userManager;
public HomeController(
ILogger<HomeController> logger,
AppDbContext context,
UserManager<ApplicationUser> userManager)
{
_logger = logger;
_context = context;
_userManager = userManager;
}
public async Task<IActionResult> Index()
{
var viewModel = new DashboardViewModel();
if (User.Identity?.IsAuthenticated ?? false)
{
var userId = _userManager.GetUserId(User);
var user = await _userManager.GetUserAsync(User);
var applications = await _context.Applications
.Include(a => a.Contact)
.Where(a => a.UserId == userId)
.OrderByDescending(a => a.UpdatedAt)
.ThenByDescending(a => a.AppliedOn)
.Take(5)
.ToListAsync();
var statusCounts = await _context.Applications
.Where(a => a.UserId == userId)
.GroupBy(a => a.Status)
.Select(group => new { group.Key, Count = group.Count() })
.ToListAsync();
var startOfCurrentMonth = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
var startDate = startOfCurrentMonth.AddMonths(-5);
var monthlyResults = await _context.Applications
.Where(a => a.UserId == userId && a.AppliedOn >= startDate)
.GroupBy(a => new { a.AppliedOn.Year, a.AppliedOn.Month })
.Select(group => new { group.Key.Year, group.Key.Month, Count = group.Count() })
.ToListAsync();
var germanCulture = CultureInfo.GetCultureInfo("de-DE");
var monthlyStatistics = new List<MonthlyApplicationStat>();
for (var offset = 0; offset < 6; offset++)
{
var currentMonth = startDate.AddMonths(offset);
var match = monthlyResults.FirstOrDefault(result =>
result.Year == currentMonth.Year && result.Month == currentMonth.Month);
var label = currentMonth.ToString("MMM yyyy", germanCulture);
monthlyStatistics.Add(new MonthlyApplicationStat(label, match?.Count ?? 0));
}
viewModel.IsAuthenticated = true;
viewModel.FullName = user?.FullName;
viewModel.RecentApplications = applications;
viewModel.TotalApplications = statusCounts.Sum(sc => sc.Count);
viewModel.AppliedCount = statusCounts.FirstOrDefault(sc => sc.Key == ApplicationStatus.Applied)?.Count ?? 0;
viewModel.InterviewCount = statusCounts.FirstOrDefault(sc => sc.Key == ApplicationStatus.Interview)?.Count ?? 0;
viewModel.OfferCount = statusCounts.FirstOrDefault(sc => sc.Key == ApplicationStatus.Offer)?.Count ?? 0;
viewModel.RejectedCount = statusCounts.FirstOrDefault(sc => sc.Key == ApplicationStatus.Rejected)?.Count ?? 0;
viewModel.MonthlyApplications = monthlyStatistics;
}
return View(viewModel);
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}