@model Frontend.Models.RewardsViewModel
@{
ViewData["Title"] = "My Rewards";
var hasAccount = Model.Account != null;
var redemptionById = Model.RedemptionsHistory
.Where(r => !string.IsNullOrWhiteSpace(r.Id))
.GroupBy(r => r.Id)
.ToDictionary(g => g.Key, g => g.First());
string PrettyEvent(string? eventKey, double points)
{
var key = (eventKey ?? string.Empty).Trim().ToUpperInvariant();
return key switch
{
"RETURN" or "BOOK_RETURN" or "BORROW_RETURN" => "RETURN",
"SIGNUP" or "REGISTER" => "SIGNUP",
"SUBSCRIBE" or "SUBSCRIPTION" or "MEMBERSHIP" => "SUBSCRIBE",
"REDEEM" or "REDEMPTION" or "CLAIM_REWARD" => "REDEEM",
_ => points < 0 ? "SPENT" : (string.IsNullOrEmpty(key) ? "EARNED" : key)
};
}
}
@if (!Model.Rewards.Any())
{
No active rewards available. Check back soon!
}
else
{
@foreach (var reward in Model.Rewards)
{
var canAfford = hasAccount && Model.Account!.CurrentBalance >= reward.PointCost;
@reward.PointCost.ToString("N0")
pts required
@reward.Name
@reward.Description
@reward.StockQuantity in stock
@if (canAfford)
{
}
else
{
Need more pts
}
@if (reward.StockQuantity < 10)
{
Limited
}
}
}
How to earn more points?
Borrow books, subscribe, and return on time to earn points!
Browse Books โ
@if (!Model.PendingRedemptions.Any())
{
No pending redemptions โ you're all clear!
}
else
{
@foreach (var r in Model.PendingRedemptions)
{
@r.RewardName
Claimed @r.RedeemedAt.ToString("MMM dd, yyyy") ยท @r.PointCost.ToString("N0") pts
Awaiting Fulfillment
}
}
@if (!Model.PointsHistory.Any())
{
No points history yet. Start borrowing books to earn points!
}
else
{
| Date |
Type |
Details |
Spent on |
Points |
@foreach (var h in Model.PointsHistory.OrderByDescending(x => x.CreatedAt))
{
var isPos = h.PointDelta >= 0;
var label = PrettyEvent(h.EventKey, h.PointDelta);
string? spentOn = null;
if (!isPos && !string.IsNullOrWhiteSpace(h.RewardName))
{
spentOn = h.RewardName;
}
else if (!isPos && !string.IsNullOrWhiteSpace(h.ReferenceId) && redemptionById.TryGetValue(h.ReferenceId, out var redemption))
{
spentOn = redemption.RewardName;
}
| @h.CreatedAt.ToString("MMM dd, yyyy") |
@label
|
@h.Description |
@if (!string.IsNullOrWhiteSpace(spentOn))
{
@spentOn
}
else
{
โ
}
|
@(isPos ? "+" : "")@h.PointDelta.ToString("N0")
|
}
}
@section Scripts {
}