From dd79b0e33313c0ef7ebfeb0e792f9f806719ec6d Mon Sep 17 00:00:00 2001
From: "t.ruspekhofer"
Date: Sun, 13 Mar 2022 14:57:48 +0100
Subject: [PATCH] Added RaidTemplate sites
---
Lieb/Data/RaidTemplateService.cs | 66 ++++-
Lieb/Data/TimerService.cs | 2 +-
Lieb/Pages/Raids/RaidEdit.razor | 31 +++
Lieb/Pages/Raids/RaidTemplateDetails.razor | 78 ++++++
.../Pages/Raids/RaidTemplateDetails.razor.css | 32 +++
Lieb/Pages/Raids/RaidTemplateEdit.razor | 254 ++++++++++++++++++
Lieb/Pages/Raids/RaidTemplateOverview.razor | 38 +++
7 files changed, 499 insertions(+), 2 deletions(-)
create mode 100644 Lieb/Pages/Raids/RaidTemplateDetails.razor
create mode 100644 Lieb/Pages/Raids/RaidTemplateDetails.razor.css
create mode 100644 Lieb/Pages/Raids/RaidTemplateEdit.razor
create mode 100644 Lieb/Pages/Raids/RaidTemplateOverview.razor
diff --git a/Lieb/Data/RaidTemplateService.cs b/Lieb/Data/RaidTemplateService.cs
index b140c93..dec7523 100644
--- a/Lieb/Data/RaidTemplateService.cs
+++ b/Lieb/Data/RaidTemplateService.cs
@@ -22,7 +22,71 @@ namespace Lieb.Data
.ToList();
}
- public async Task CreateNewRaid(int raidTempalteId)
+ public RaidTemplate GetTemplate(int raidTemplateId)
+ {
+ using var context = _contextFactory.CreateDbContext();
+ return context.RaidTemplates
+ .Include(r => r.Roles)
+ .Include(r => r.Reminders)
+ .FirstOrDefault(t => t.RaidTemplateId == raidTemplateId);
+ }
+
+ public async Task AddOrEditTemplate(RaidTemplate template)
+ {
+ if (template != null)
+ {
+ using var context = _contextFactory.CreateDbContext();
+ if (template.RaidTemplateId == 0)
+ {
+ context.RaidTemplates.Add(template);
+ await context.SaveChangesAsync();
+ }
+ else
+ {
+ RaidTemplate raidToChange = await context.RaidTemplates
+ .Include(r => r.Roles)
+ .Include(r => r.Reminders)
+ .FirstOrDefaultAsync(r => r.RaidTemplateId == template.RaidTemplateId);
+ raidToChange.Title = template.Title;
+ raidToChange.Description = template.Description;
+ raidToChange.Organizer = template.Organizer;
+ raidToChange.Guild = template.Guild;
+ raidToChange.VoiceChat = template.VoiceChat;
+ raidToChange.RaidType = template.RaidType;
+ raidToChange.RequiredRole = template.RequiredRole;
+ raidToChange.DiscordChannelId = template.DiscordChannelId;
+ raidToChange.DiscordGuildId = template.DiscordGuildId;
+ raidToChange.StartTime = template.StartTime;
+ raidToChange.EndTime = template.EndTime;
+ raidToChange.FreeForAllTime = template.FreeForAllTime;
+ raidToChange.TimeZone = template.TimeZone;
+ raidToChange.Frequency = template.Frequency;
+ raidToChange.CreateDaysBefore = template.CreateDaysBefore;
+
+ context.PlannedRaidRoles.RemoveRange(raidToChange.Roles);
+ context.RaidReminders.RemoveRange(raidToChange.Reminders);
+ raidToChange.Roles.Clear();
+ raidToChange.Reminders.Clear();
+ raidToChange.Roles = template.Roles;
+ raidToChange.Reminders = template.Reminders;
+
+ await context.SaveChangesAsync();
+ }
+ }
+ }
+
+ public async Task DeleteTemplate(int raidTemplateId)
+ {
+ using var context = _contextFactory.CreateDbContext();
+ RaidTemplate template = GetTemplate(raidTemplateId);
+ context.PlannedRaidRoles.RemoveRange(template.Roles);
+ context.RaidReminders.RemoveRange(template.Reminders);
+ await context.SaveChangesAsync();
+ context.RaidTemplates.Remove(template);
+ await context.SaveChangesAsync();
+ }
+
+ public async Task CreateRaidFromTemplate(int raidTempalteId)
{
using var context = _contextFactory.CreateDbContext();
RaidTemplate? template = await context.RaidTemplates
diff --git a/Lieb/Data/TimerService.cs b/Lieb/Data/TimerService.cs
index 77d8eba..7010701 100644
--- a/Lieb/Data/TimerService.cs
+++ b/Lieb/Data/TimerService.cs
@@ -34,7 +34,7 @@ namespace Lieb.Data
DateTime UTCStartTime = TimeZoneInfo.ConvertTimeToUtc(template.StartTime, timeZone);
if(UTCStartTime.AddDays(-template.CreateDaysBefore).AddHours(1) < DateTime.UtcNow)
{
- raidTemplateService.CreateNewRaid(template.RaidTemplateId).Wait();
+ raidTemplateService.CreateRaidFromTemplate(template.RaidTemplateId).Wait();
}
}
diff --git a/Lieb/Pages/Raids/RaidEdit.razor b/Lieb/Pages/Raids/RaidEdit.razor
index 1ee6eef..2bdc9ca 100644
--- a/Lieb/Pages/Raids/RaidEdit.razor
+++ b/Lieb/Pages/Raids/RaidEdit.razor
@@ -1,9 +1,11 @@
@page "/raidedit"
@page "/raidedit/{raidId}"
@using Lieb.Data
+@using Lieb.Models
@using Lieb.Models.GuildWars2.Raid
@using System.ComponentModel.DataAnnotations
@inject RaidService RaidService
+@inject UserService UserService
@inject TimeZoneService TimeZoneService
@inject NavigationManager NavigationManager
@inject IJSRuntime JsRuntime
@@ -60,6 +62,34 @@
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+
+ @_errorMessage
+
+
+
+
+
+
+
+@code {
+
+ [Parameter]
+ public string raidId { get; set; }
+
+ public RaidTemplate _template;
+
+ private string _errorMessage = string.Empty;
+
+ private DateTimeOffset _raidDate = DateTime.Now.Date;
+ private DateTimeOffset _startTime;
+ private DateTimeOffset _endTime;
+ private DateTimeOffset _freeForAllDate = DateTime.Now.Date;
+ private DateTimeOffset _freeForAllTime;
+ private string _userTimeZone = string.Empty;
+
+
+
+ protected override async Task OnInitializedAsync()
+ {
+ if(!string.IsNullOrEmpty(raidId) && int.TryParse(raidId, out int parsedId))
+ {
+ _template = RaidTemplateService.GetTemplate(parsedId);
+ _startTime = _template.StartTime;
+ _endTime = _template.EndTime;
+ _raidDate = _startTime.Date;
+ _freeForAllTime = _template.FreeForAllTime;
+ _freeForAllDate = _freeForAllTime.Date;
+ }
+ else
+ {
+ _template = new RaidTemplate();
+ }
+ _userTimeZone = await TimeZoneService.GetUserTimeZone();
+ }
+
+ async Task AddRoleClicked()
+ {
+ _template.Roles.Add(new PlannedRaidRole());
+ }
+
+
+ async Task DeleteRoleClicked(PlannedRaidRole role)
+ {
+ _template.Roles.Remove(role);
+ }
+
+ async Task DeleteRaidClicked()
+ {
+ bool confirmed = await JsRuntime.InvokeAsync("confirm", "Are you sure you want to delete the raid?");
+ if (confirmed)
+ {
+ await RaidTemplateService.DeleteTemplate(_template.RaidTemplateId);
+ NavigationManager.NavigateTo("raidoverview");
+ }
+ }
+
+ private async Task HandleValidSubmit()
+ {
+ if(_template.RaidType != RaidType.Planned)
+ {
+ _template.Roles.Clear();
+ _template.Roles.Add(new PlannedRaidRole()
+ {
+ Spots = 10,
+ Name = "Random",
+ Description = _template.RaidType.ToString()
+ });
+ }
+
+ if(_template.Roles.Count == 0)
+ {
+ _errorMessage = "Roles are needed for a raid.";
+ return;
+ }
+
+ _template.TimeZone = await TimeZoneService.GetUserTimeZone();
+
+ _template.StartTime =_raidDate.Date + _startTime.TimeOfDay;
+ if(_startTime.TimeOfDay > _endTime.TimeOfDay)
+ {
+ _template.EndTime = _raidDate.Date + _endTime.TimeOfDay;
+ }
+ else
+ {
+ _template.EndTime = _raidDate.Date.AddDays(1) + _endTime.TimeOfDay;
+ }
+ _template.FreeForAllTime = _freeForAllDate.Date + _freeForAllTime.TimeOfDay;
+
+ await RaidTemplateService.AddOrEditTemplate(_template);
+ NavigationManager.NavigateTo("raidoverview");
+ }
+}
\ No newline at end of file
diff --git a/Lieb/Pages/Raids/RaidTemplateOverview.razor b/Lieb/Pages/Raids/RaidTemplateOverview.razor
new file mode 100644
index 0000000..d8795d6
--- /dev/null
+++ b/Lieb/Pages/Raids/RaidTemplateOverview.razor
@@ -0,0 +1,38 @@
+@page "/raidtemplateoverview"
+@using Lieb.Data
+@using System.Security.Claims
+@using Lieb.Models
+@using Lieb.Models.GuildWars2.Raid
+@inject RaidService RaidService
+@inject UserService UserService
+@inject AuthenticationStateProvider AuthenticationStateProvider
+
+
+RaidTemplateOverview
+
+
+
+
+
+ Add Raid
+
+
+
+
+@foreach (var raid in _raids.OrderBy(r => r.StartTimeUTC))
+{
+
+
+}
+
+
+
+@code
+{
+ private List _raids;
+
+ protected override async Task OnInitializedAsync()
+ {
+ _raids = RaidService.GetRaids();
+ }
+}