Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

馃悰 Admin | Prize draw fix #942

Merged
merged 6 commits into from
Jun 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 54 additions & 22 deletions src/AdminUI/Pages/PrizeDraw.razor
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

@inject IAchievementService achievementService
@inject IPrizeDrawService prizeDrawService
@inject IRewardService rewardService
@inject IRewardAdminService rewardAdminService
@inject ISnackbar SnackBar

Expand All @@ -30,7 +31,7 @@ else
Variant="Variant.Filled"
Label="Required Achievement"
AnchorOrigin="Origin.BottomCenter"
SearchFuncWithCancel="@SearchAchivements"
SearchFuncWithCancel="@SearchAchievements"
ShowProgressIndicator="true"
ToStringFunc="@GetAchievementName"
/>
Expand Down Expand Up @@ -127,21 +128,35 @@ else
</MudGrid>
}

// TODO: Re-enable when this functionality has been completed
@* @if (_prizeWinner != null && !_isDrawingPrize) *@
@* { *@
@* <MudGrid Spacing="2" Justify="Justify.Center"> *@
@* <MudItem> *@
@* <MudButton *@
@* OnClick="@(async e => await ClaimPrizeForWinner(_prizeWinner))" *@
@* Variant="Variant.Filled" *@
@* StartIcon="@MudBlazor.Icons.Material.Filled.Celebration" *@
@* Color="Color.Info"> *@
@* Claim Prize *@
@* </MudButton> *@
@* </MudItem> *@
@* </MudGrid> *@
@* } *@
@if (_prizeWinner != null && !_isDrawingPrize)
{
<MudGrid Spacing="2" Justify="Justify.Center">
<MudItem>
<MudAutocomplete
T="RewardDto"
@bind-Value="@_selectedReward"
Variant="Variant.Filled"
Label="Reward"
AnchorOrigin="Origin.BottomCenter"
SearchFuncWithCancel="@SearchRewards"
ShowProgressIndicator="true"
ToStringFunc="@GetRewardName"
/>
</MudItem>
</MudGrid>
<MudGrid Spacing="2" Justify="Justify.Center">
<MudItem>
<MudButton
OnClick="@(async e => await ClaimPrizeForWinner(_prizeWinner))"
Disabled="@(_selectedReward == null)"
Variant="Variant.Filled"
StartIcon="@MudBlazor.Icons.Material.Filled.Celebration"
Color="Color.Info">
Claim Prize
</MudButton>
</MudItem>
</MudGrid>
}

@if (_players is {Count: > 0 } && !_isDrawingPrize)
{
Expand Down Expand Up @@ -174,7 +189,7 @@ else
private IEnumerable<RewardDto>? _rewards = Enumerable.Empty<RewardDto>();
private List<AchievementDto>? _achievements = new();
AchievementDto? _selectedAchievement;
string? _selectedRewardCode;
RewardDto? _selectedReward;
private LeaderboardFilter _filter = LeaderboardFilter.Today;
private int _top;
private bool _filterStaff = true;
Expand All @@ -185,12 +200,21 @@ else
await base.OnInitializedAsync();
}

private async Task<IEnumerable<AchievementDto>> SearchAchivements(string value, CancellationToken cancellationToken)
private async Task<IEnumerable<AchievementDto>> SearchAchievements(string value, CancellationToken cancellationToken)
{
var achievements = await achievementService.SearchAchievements(value, cancellationToken);

return achievements.Achievements;
}

private async Task<IEnumerable<RewardDto>> SearchRewards(string value, CancellationToken cancellationToken)
{
var rewards = await rewardService.SearchRewards(value, cancellationToken);

// Only show hidden 1-point rewards that were designed for prize draws
// TODO: improve the handling of assigning and filtering prize draw items
return rewards.Rewards.Where(r => r.Cost == 1);
}

private async Task LoadEligiblePlayers()
{
Expand Down Expand Up @@ -240,16 +264,20 @@ else
private void Reset()
{
_prizeWinner = null;
_selectedRewardCode = null;
_selectedReward = null;
}

private async Task ClaimPrizeForWinner(EligibleUserDto winner)
{
var result = await rewardAdminService.ClaimForUser(_selectedRewardCode, winner.UserId ?? 0, false, CancellationToken.None);

var result = await rewardAdminService.ClaimForUser(_selectedReward?.Code, winner.UserId ?? 0, false, CancellationToken.None);
if (result.status == RewardStatus.Claimed)
{
SnackBar.Add($"Reward claimed", Severity.Success);
SnackBar.Add($"{_selectedReward.Name} successfully claimed for {_prizeWinner.Name}!", Severity.Success, options =>
{
options.VisibleStateDuration = 10000;
});
_selectedReward = null;
}
else
{
Expand All @@ -262,4 +290,8 @@ else
return achievement?.Name ?? string.Empty;
}

private string GetRewardName(RewardDto? reward)
{
return reward?.Name ?? string.Empty;
}
}
1 change: 1 addition & 0 deletions src/Common/DTOs/Rewards/RewardDto.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ public class RewardDto
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Code { get; set; }
public int Cost { get; set; }
public string? ImageUri { get; set; }
public string? CarouselImageUri { get; set; }
Expand Down
2 changes: 1 addition & 1 deletion src/WebAPI/WebAPI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Azure.Identity" Version="1.11.0" />
<PackageReference Include="Azure.Identity" Version="1.11.3" />
<PackageReference Include="FluentValidation.AspNetCore" Version="11.3.0" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.22.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="8.0.1" />
Expand Down
Loading