From 9ffaf908f3337a6b7f82afa2051d33e91547e1f7 Mon Sep 17 00:00:00 2001 From: "t.ruspekhofer" Date: Sat, 26 Feb 2022 20:23:28 +0100 Subject: [PATCH] added BuildOverview and BuildEdit --- Lieb/Data/GuildWars2BuildService.cs | 69 +++++++++++++ Lieb/Pages/GuildWars2/BuildEdit.razor | 114 ++++++++++++++++++++++ Lieb/Pages/GuildWars2/BuildOverview.razor | 40 ++++++++ Lieb/Program.cs | 7 +- Lieb/Shared/NavMenu.razor | 4 +- 5 files changed, 226 insertions(+), 8 deletions(-) create mode 100644 Lieb/Data/GuildWars2BuildService.cs create mode 100644 Lieb/Pages/GuildWars2/BuildEdit.razor create mode 100644 Lieb/Pages/GuildWars2/BuildOverview.razor diff --git a/Lieb/Data/GuildWars2BuildService.cs b/Lieb/Data/GuildWars2BuildService.cs new file mode 100644 index 0000000..9b8ce2d --- /dev/null +++ b/Lieb/Data/GuildWars2BuildService.cs @@ -0,0 +1,69 @@ +using Lieb.Models.GuildWars2; +using Microsoft.EntityFrameworkCore; + +namespace Lieb.Data +{ + public class GuildWars2BuildService + { + private readonly IDbContextFactory _contextFactory; + + public GuildWars2BuildService(IDbContextFactory contextFactory) + { + _contextFactory = contextFactory; + } + + public async Task AddOrEditBuild(GuildWars2Build build) + { + if (build != null) + { + using var context = _contextFactory.CreateDbContext(); + if (build.GuildWars2BuildId == 0) + { + context.GuildWars2Builds.Add(build); + await context.SaveChangesAsync(); + } + else + { + GuildWars2Build? buildToChange = await context.GuildWars2Builds + .FirstOrDefaultAsync(r => r.GuildWars2BuildId == build.GuildWars2BuildId); + + if (buildToChange != null) + { + buildToChange.BuildName = build.BuildName; + buildToChange.Might = build.Might; + buildToChange.Quickness = build.Quickness; + buildToChange.Alacrity = build.Alacrity; + buildToChange.Heal = build.Heal; + buildToChange.Class = build.Class; + buildToChange.EliteSpecialization = build.EliteSpecialization; + + await context.SaveChangesAsync(); + } + } + } + } + + public async Task DeleteBuild(int buildId) + { + using var context = _contextFactory.CreateDbContext(); + GuildWars2Build? build = await context.GuildWars2Builds.FirstOrDefaultAsync(b => b.GuildWars2BuildId == buildId); + if (build != null) + { + context.GuildWars2Builds.Remove(build); + await context.SaveChangesAsync(); + } + } + + public List GetBuilds() + { + using var context = _contextFactory.CreateDbContext(); + return context.GuildWars2Builds.ToList(); + } + + public GuildWars2Build GetBuild(int buildId) + { + using var context = _contextFactory.CreateDbContext(); + return context.GuildWars2Builds.FirstOrDefault(b => b.GuildWars2BuildId == buildId); + } + } +} diff --git a/Lieb/Pages/GuildWars2/BuildEdit.razor b/Lieb/Pages/GuildWars2/BuildEdit.razor new file mode 100644 index 0000000..a15a0ae --- /dev/null +++ b/Lieb/Pages/GuildWars2/BuildEdit.razor @@ -0,0 +1,114 @@ +@page "/buildedit" +@page "/buildedit/{buildId}" +@using Lieb.Data +@using Lieb.Models.GuildWars2 +@using System.ComponentModel.DataAnnotations +@inject GuildWars2BuildService GuildWars2BuildService +@inject NavigationManager NavigationManager +@inject IJSRuntime JsRuntime + + +

BuildEdit

+ + + + + + +

+ +

+ +

+ +

+

+ +

+

+ +

+

+ +

+ +

+ +

+

+ +

+ + +
+
+ +
+ + +@code { + + [Parameter] + public string buildId { get; set; } + + public GuildWars2Build _build; + + protected override async Task OnInitializedAsync() + { + if(!string.IsNullOrEmpty(buildId) && int.TryParse(buildId, out int parsedId)) + { + _build = GuildWars2BuildService.GetBuild(parsedId); + } + else + { + _build = new GuildWars2Build(); + } + } + + async Task DeleteBuildClicked() + { + bool confirmed = await JsRuntime.InvokeAsync("confirm", "Are you sure?"); + if (confirmed) + { + await GuildWars2BuildService.DeleteBuild(_build.GuildWars2BuildId); + NavigationManager.NavigateTo("buildoverview"); + } + } + + private async Task HandleValidSubmit() + { + await GuildWars2BuildService.AddOrEditBuild(_build); + NavigationManager.NavigateTo("buildoverview"); + } +} diff --git a/Lieb/Pages/GuildWars2/BuildOverview.razor b/Lieb/Pages/GuildWars2/BuildOverview.razor new file mode 100644 index 0000000..e491a78 --- /dev/null +++ b/Lieb/Pages/GuildWars2/BuildOverview.razor @@ -0,0 +1,40 @@ +@page "/buildoverview" +@using Lieb.Data +@using Lieb.Models.GuildWars2 +@inject GuildWars2BuildService GuildWars2BuildService + + +

BuildOverview

+ + + + + + @foreach (var build in _builds) { + + } + + + @foreach (var build in _builds) { +
@build.BuildName
+ } +
+
+ + +@code +{ + private List _builds; + + protected override async Task OnInitializedAsync() + { + _builds = GuildWars2BuildService.GetBuilds(); + } +} diff --git a/Lieb/Program.cs b/Lieb/Program.cs index a9e6e94..cba458b 100644 --- a/Lieb/Program.cs +++ b/Lieb/Program.cs @@ -23,14 +23,9 @@ builder.Services.AddServerSideBlazor(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); - - -//builder.Services.AddTransient(); -//builder.Services.AddTransient(); -//builder.Services.AddTransient(); - builder.Services.AddAuthentication(opt => { opt.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; diff --git a/Lieb/Shared/NavMenu.razor b/Lieb/Shared/NavMenu.razor index 29c0add..7937a6c 100644 --- a/Lieb/Shared/NavMenu.razor +++ b/Lieb/Shared/NavMenu.razor @@ -20,8 +20,8 @@