Spaces:
Sleeping
Sleeping
File size: 2,392 Bytes
7fe61c9 6f32ae8 7fe61c9 b8cc5e6 7fe61c9 25f925e 7fe61c9 b8cc5e6 7fe61c9 b8cc5e6 7fe61c9 25f925e 7fe61c9 25f925e 7fe61c9 6f32ae8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | using Microsoft.AspNetCore.Mvc;
using Frontend.Services;
using LibraryManagement.Shared.Models;
using Frontend.Models;
using Microsoft.AspNetCore.Authorization;
using System.Threading.Tasks;
using System.Linq;
using System.Collections.Generic;
namespace Frontend.Controllers
{
[Authorize(Roles = "Member")]
public class MembershipController : Controller
{
private readonly LibraryApiClient _apiClient;
public MembershipController(LibraryApiClient apiClient)
{
_apiClient = apiClient;
}
public async Task<IActionResult> Index()
{
var allSubscriptions = await _apiClient.GetMyAllSubscriptionsAsync();
var memberships = await _apiClient.GetMembershipsAsync();
var loyaltyAccount = await _apiClient.GetMyLoyaltyAccountAsync();
var activeRewards = await _apiClient.GetActiveRewardsAsync();
var now = DateTime.UtcNow;
// The currently active subscription is the one whose time range includes now
var currentSubscription = allSubscriptions
.Where(s => s.StartDate <= now && s.ExpiryDate > now)
.OrderByDescending(s => s.StartDate)
.FirstOrDefault();
// Queued = subscriptions that haven't started yet (StartDate in the future)
var queuedMemberships = allSubscriptions
.Where(s => s.StartDate > now)
.OrderBy(s => s.StartDate)
.ToList();
var viewModel = new MembershipViewModel
{
CurrentSubscription = currentSubscription,
AvailableMemberships = memberships.ToList(),
QueuedMemberships = queuedMemberships,
LoyaltyAccount = loyaltyAccount,
RewardPointCosts = activeRewards.ToDictionary(r => r.Id, r => r.PointCost)
};
return View(viewModel);
}
[HttpPost]
public async Task<IActionResult> Redeem(string rewardId)
{
var (success, message) = await _apiClient.ClaimRewardAsync(rewardId, "Redeemed via Library Membership Page");
if (success)
{
return Json(new { success = true, message });
}
return Json(new { success = false, message });
}
}
}
|