diff --git a/CocktailWeb/CocktailWeb.csproj b/CocktailWeb/CocktailWeb.csproj index 845412c..c7792ac 100644 --- a/CocktailWeb/CocktailWeb.csproj +++ b/CocktailWeb/CocktailWeb.csproj @@ -16,6 +16,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/CocktailWeb/Data/Cocktail.cs b/CocktailWeb/Data/Cocktail.cs index ee61bec..71012ff 100644 --- a/CocktailWeb/Data/Cocktail.cs +++ b/CocktailWeb/Data/Cocktail.cs @@ -5,6 +5,6 @@ public int Id { get; set; } public string Name { get; set; } = ""; public string? ImageURL { get; set; } - public List Cocktailflaschen { get; } = new(); + public List Cocktailflaschen { get; set; } = new(); } } diff --git a/CocktailWeb/Data/Flasche.cs b/CocktailWeb/Data/Flasche.cs index 3c20a21..512ca94 100644 --- a/CocktailWeb/Data/Flasche.cs +++ b/CocktailWeb/Data/Flasche.cs @@ -4,7 +4,6 @@ { public int Id { get; set; } public string Name { get; set; } = ""; - public int? Pos { get; set; } public Flasche() { diff --git a/CocktailWeb/Data/cocktails.db b/CocktailWeb/Data/cocktails.db index 9b39a6e..f393a70 100644 Binary files a/CocktailWeb/Data/cocktails.db and b/CocktailWeb/Data/cocktails.db differ diff --git a/CocktailWeb/GeneralSettings.cs b/CocktailWeb/GeneralSettings.cs new file mode 100644 index 0000000..90296d6 --- /dev/null +++ b/CocktailWeb/GeneralSettings.cs @@ -0,0 +1,13 @@ +namespace CocktailWeb +{ + public class GeneralSettings + { + + public int MaxAllowedUploadSizeInMB { get; set; } = 10; + public string ImageUploadDir { get; set; } = "images"; + + public string SerialPort { get; set; } = "COM5"; + + public int Baudrate { get; set; } = 115200; + } +} diff --git a/CocktailWeb/Pages/CocktailView.razor b/CocktailWeb/Pages/CocktailView.razor index 91b41ec..0c2799a 100644 --- a/CocktailWeb/Pages/CocktailView.razor +++ b/CocktailWeb/Pages/CocktailView.razor @@ -1,16 +1,46 @@ @page "/cocktails/{CocktailId}" @using CocktailWeb.Data +@using Microsoft.AspNetCore.Components.Sections @using Microsoft.EntityFrameworkCore @inject IDbContextFactory DataContextFactory; -@if(SelectedCocktail != null) -{ -

@SelectedCocktail.Name

-} else + + + + + + Zurück + + + +@if (SelectedCocktail == null) { -

Cocktail konnte nicht gefunden werden

- +

Cocktail konnte nicht gefunden werden

+} +else +{ +
+
+
+ ... +
+
+
+
@SelectedCocktail.Name
+

+

Zutaten:
+
    + @foreach (var Zutat in SelectedCocktail.Cocktailflaschen) + { +
  • @Zutat.Flasche?.Name (@Zutat.Menge ml)
  • + } +
+

+
+
+
+
} @@ -28,7 +58,7 @@ _DataContext ??= await DataContextFactory.CreateDbContextAsync(); if (_DataContext != null) { - SelectedCocktail = _DataContext.Cocktails.FirstOrDefault(c => c.Id == id); + SelectedCocktail = _DataContext.Cocktails.Include(c => c.Cocktailflaschen).ThenInclude(cf => cf.Flasche).Single(c => c.Id == id); } } } diff --git a/CocktailWeb/Pages/Cocktails.razor b/CocktailWeb/Pages/Cocktails.razor index 50792ad..e8ae78f 100644 --- a/CocktailWeb/Pages/Cocktails.razor +++ b/CocktailWeb/Pages/Cocktails.razor @@ -1,23 +1,14 @@ -@page "/cocktails" +@page "/" @using CocktailWeb.Data @using Microsoft.AspNetCore.Components.Sections @using Microsoft.EntityFrameworkCore @inject IDbContextFactory DataContextFactory; @inject IWebHostEnvironment env; - - +Cocktails - -
@foreach (Cocktail c in CocktailListe) @@ -25,14 +16,14 @@ + + diff --git a/CocktailWeb/Pages/Index.razor b/CocktailWeb/Pages/Index.razor index ec014de..c8cf10e 100644 --- a/CocktailWeb/Pages/Index.razor +++ b/CocktailWeb/Pages/Index.razor @@ -1,4 +1,4 @@ -@page "/" +@page "/index" Index @@ -6,6 +6,8 @@ Welcome to your new app. + + Cocktails @code { diff --git a/CocktailWeb/Pages/SerialTest.razor b/CocktailWeb/Pages/SerialTest.razor index cc1be44..816edd5 100644 --- a/CocktailWeb/Pages/SerialTest.razor +++ b/CocktailWeb/Pages/SerialTest.razor @@ -1,10 +1,10 @@ @page "/serialtest" @using System.IO.Ports +@using Microsoft.Extensions.Options +@inject IOptions Config; Serial Test - - @@ -16,7 +16,6 @@ @code { SerialPort? port; - string? portname = "COM5"; string? receivedText; string? inputdata ="LED"; @@ -24,15 +23,14 @@ bool Sending = false; bool Receiving = false; - public async Task SendData() { if (Sending) return; // nichts senden, wenn bereits am Senden Sending = true; - if (port == null && portname != null) + if (port == null && Config.Value.SerialPort != null) { - port = new SerialPort(portname); - port.BaudRate = 115200; //9600 + port = new SerialPort(Config.Value.SerialPort); + port.BaudRate = Config.Value.Baudrate; //9600 port.DataReceived += port_DataReceived; //port.DataBits = 8; //port.StopBits = StopBits.One; diff --git a/CocktailWeb/Pages/CocktailHinzufuegen.razor b/CocktailWeb/Pages/Settings/CocktailHinzufuegen.razor similarity index 91% rename from CocktailWeb/Pages/CocktailHinzufuegen.razor rename to CocktailWeb/Pages/Settings/CocktailHinzufuegen.razor index 9366181..c1cf835 100644 --- a/CocktailWeb/Pages/CocktailHinzufuegen.razor +++ b/CocktailWeb/Pages/Settings/CocktailHinzufuegen.razor @@ -1,10 +1,17 @@ -@using Microsoft.EntityFrameworkCore +@using Microsoft.AspNetCore.Components.Sections +@using Microsoft.EntityFrameworkCore @using CocktailWeb.Data -@page "/cocktails/add" +@using Microsoft.Extensions.Options +@page "/settings/cocktails/edit" +@page "/settings/cocktails/edit/{id}" @inject IDbContextFactory DataContextFactory; @inject NavigationManager nav; @inject IWebHostEnvironment env; -

Cocktail hinzufügen

+@inject IOptions Config; + + + +
@@ -69,7 +76,7 @@ - +
diff --git a/CocktailWeb/Pages/CocktailHinzufuegen.razor.cs b/CocktailWeb/Pages/Settings/CocktailHinzufuegen.razor.cs similarity index 73% rename from CocktailWeb/Pages/CocktailHinzufuegen.razor.cs rename to CocktailWeb/Pages/Settings/CocktailHinzufuegen.razor.cs index d93785c..5fb2a72 100644 --- a/CocktailWeb/Pages/CocktailHinzufuegen.razor.cs +++ b/CocktailWeb/Pages/Settings/CocktailHinzufuegen.razor.cs @@ -1,28 +1,40 @@ -using CocktailWeb; -using CocktailWeb.Data; +using CocktailWeb.Data; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Forms; using Microsoft.AspNetCore.Components.Web; using Microsoft.EntityFrameworkCore; -namespace CocktailWeb.Pages +namespace CocktailWeb.Pages.Settings { public partial class CocktailHinzufuegen { + [Parameter] + public string? id { get; set; } public List FlaschenListe { get; set; } = new(); - public Cocktail EditCocktail = new(); + public Cocktail? EditCocktail; private IBrowserFile? CocktaiLBildDatei; private DbDataContext? _DataContext; - private int MaxAllowedUploadSizeInMB = 10; - - private string ImageUploadDir = "cocktails"; - protected override async Task OnInitializedAsync() { + if (id != null) + { + _DataContext ??= await DataContextFactory.CreateDbContextAsync(); + if (_DataContext != null) + { + EditCocktail = _DataContext.Cocktails.Include(c => c.Cocktailflaschen).ThenInclude(cf => cf.Flasche).Single(c => c.Id == Convert.ToInt32(id)); + } + } + // Falls keine ID angegeben wurde oder der Cocktail in der Datenbank nicht gefunden wurde, gehen wir davon aus dass ein neuer Cocktail erstellt wird. + if (EditCocktail == null) + { + EditCocktail = new(); + } + await FillFlaschenListe(); + await InvokeAsync(StateHasChanged); } public async Task FillFlaschenListe() @@ -36,13 +48,13 @@ namespace CocktailWeb.Pages public void FlascheHinzufuegen(MouseEventArgs e, Flasche f) { - EditCocktail.Cocktailflaschen.Add(new CocktailFlasche() { Flasche = f, Reihenfolge = EditCocktail.Cocktailflaschen.Count + 1 }); + EditCocktail?.Cocktailflaschen.Add(new CocktailFlasche() { Flasche = f, Reihenfolge = EditCocktail.Cocktailflaschen.Count + 1 }); CocktailFlaschenSortieren(); } public void FlascheEntfernen(MouseEventArgs e, CocktailFlasche cf) { - EditCocktail.Cocktailflaschen.Remove(cf); + EditCocktail?.Cocktailflaschen.Remove(cf); CocktailFlaschenSortieren(); } @@ -85,12 +97,12 @@ namespace CocktailWeb.Pages try { // Bild hochladen - var relativeuploadpath = Path.Join(ImageUploadDir, $"{EditCocktail.Id}{Path.GetExtension(CocktaiLBildDatei.Name)}"); + var relativeuploadpath = Path.Join(Config.Value.ImageUploadDir, $"{EditCocktail.Id}{Path.GetExtension(CocktaiLBildDatei.Name)}"); var fullpath = Path.Join(env.WebRootPath, relativeuploadpath); string? folder = Path.GetDirectoryName(fullpath); if (folder != null && !Path.Exists(folder)) Directory.CreateDirectory(folder); - Stream stream = CocktaiLBildDatei.OpenReadStream(maxAllowedSize: MaxAllowedUploadSizeInMB * 1024 * 1024); + Stream stream = CocktaiLBildDatei.OpenReadStream(maxAllowedSize: Config.Value.MaxAllowedUploadSizeInMB * 1024 * 1024); FileStream fs = File.Create(fullpath); await stream.CopyToAsync(fs); stream.Close(); diff --git a/CocktailWeb/Pages/Settings/Cocktails.razor b/CocktailWeb/Pages/Settings/Cocktails.razor new file mode 100644 index 0000000..8db0142 --- /dev/null +++ b/CocktailWeb/Pages/Settings/Cocktails.razor @@ -0,0 +1,30 @@ +@page "/settings/cocktails" +@using CocktailWeb.Data +@using Microsoft.AspNetCore.Components.Sections +@using Microsoft.EntityFrameworkCore +@inject IDbContextFactory DataContextFactory; +@inject IWebHostEnvironment env; + + + + + + + +Cocktail hinzufügen + +
+ + + @foreach (Cocktail c in CocktailListe) + { + + + + + + } + +
@c.Name Bearbeiten
+ +
\ No newline at end of file diff --git a/CocktailWeb/Pages/Settings/Cocktails.razor.cs b/CocktailWeb/Pages/Settings/Cocktails.razor.cs new file mode 100644 index 0000000..205c270 --- /dev/null +++ b/CocktailWeb/Pages/Settings/Cocktails.razor.cs @@ -0,0 +1,30 @@ +using CocktailWeb; +using CocktailWeb.Data; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.EntityFrameworkCore; + +namespace CocktailWeb.Pages.Settings +{ + public partial class Cocktails + { + private DbDataContext? _DataContext; + + private List CocktailListe { get; set; } = new(); + + protected override async Task OnInitializedAsync() + { + await ShowCocktails(); + } + + private async Task ShowCocktails() + { + _DataContext ??= await DataContextFactory.CreateDbContextAsync(); + if (_DataContext != null) + { + CocktailListe = await _DataContext.Cocktails.OrderBy(f => f.Name).ToListAsync(); + } + } + } +} diff --git a/CocktailWeb/Pages/Flaschen.razor b/CocktailWeb/Pages/Settings/Flaschen.razor similarity index 79% rename from CocktailWeb/Pages/Flaschen.razor rename to CocktailWeb/Pages/Settings/Flaschen.razor index 8a8cda9..87be4e6 100644 --- a/CocktailWeb/Pages/Flaschen.razor +++ b/CocktailWeb/Pages/Settings/Flaschen.razor @@ -1,10 +1,16 @@ -@using Microsoft.EntityFrameworkCore +@using Microsoft.AspNetCore.Components.Sections +@using Microsoft.EntityFrameworkCore @using CocktailWeb.Data -@page "/flaschen" +@page "/settings/flaschen" @inject IDbContextFactory FlascheDataContextFactory; Flaschen + + + + + @if (CreateFormVisible && FlascheToCreate != null) {

Flasche hinzufügen

@@ -16,7 +22,7 @@
- +
} @@ -29,15 +35,13 @@ else
} - -

Flaschen

@if (FlaschenListe != null && FlaschenListe.Count > 0) {
- + @@ -48,20 +52,20 @@ else @if (EditFormVisible && FlascheToUpdate != null && FlascheToUpdate.Id == flasche.Id) { - + - + } else { - + + + + } } diff --git a/CocktailWeb/Pages/Flaschen.razor.cs b/CocktailWeb/Pages/Settings/Flaschen.razor.cs similarity index 98% rename from CocktailWeb/Pages/Flaschen.razor.cs rename to CocktailWeb/Pages/Settings/Flaschen.razor.cs index 19253f3..f1c8ca1 100644 --- a/CocktailWeb/Pages/Flaschen.razor.cs +++ b/CocktailWeb/Pages/Settings/Flaschen.razor.cs @@ -2,7 +2,7 @@ using Microsoft.EntityFrameworkCore; using CocktailWeb.Data; -namespace CocktailWeb.Pages +namespace CocktailWeb.Pages.Settings { public partial class Flaschen { diff --git a/CocktailWeb/Pages/Settings/Maschine.razor b/CocktailWeb/Pages/Settings/Maschine.razor new file mode 100644 index 0000000..91f9452 --- /dev/null +++ b/CocktailWeb/Pages/Settings/Maschine.razor @@ -0,0 +1,13 @@ +@page "/settings/maschine"; +@using Microsoft.EntityFrameworkCore +@using CocktailWeb.Data +@using Microsoft.AspNetCore.Components.Sections +@inject IDbContextFactory FlascheDataContextFactory; +Maschine + + + + + + + diff --git a/CocktailWeb/Pages/Settings/Maschine.razor.cs b/CocktailWeb/Pages/Settings/Maschine.razor.cs new file mode 100644 index 0000000..c365048 --- /dev/null +++ b/CocktailWeb/Pages/Settings/Maschine.razor.cs @@ -0,0 +1,6 @@ +namespace CocktailWeb.Pages.Settings +{ + partial class Maschine + { + } +} diff --git a/CocktailWeb/Program.cs b/CocktailWeb/Program.cs index 5d36a43..46a10ef 100644 --- a/CocktailWeb/Program.cs +++ b/CocktailWeb/Program.cs @@ -1,3 +1,4 @@ +using CocktailWeb; using CocktailWeb.Data; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; @@ -11,6 +12,7 @@ var connectionString = builder.Configuration.GetConnectionString("CocktailDB"); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddDbContextFactory(options => options.UseSqlite(connectionString)); +builder.Services.Configure(builder.Configuration.GetSection(nameof(GeneralSettings))); var app = builder.Build(); diff --git a/CocktailWeb/Shared/TopRow.razor b/CocktailWeb/Shared/TopRow.razor index 3e19ce8..86c9d06 100644 --- a/CocktailWeb/Shared/TopRow.razor +++ b/CocktailWeb/Shared/TopRow.razor @@ -2,9 +2,17 @@
-

- -

+
+ + + + + +

+ +

+
+ diff --git a/CocktailWeb/_Imports.razor b/CocktailWeb/_Imports.razor index ffb52e2..2beb8c5 100644 --- a/CocktailWeb/_Imports.razor +++ b/CocktailWeb/_Imports.razor @@ -8,3 +8,4 @@ @using Microsoft.JSInterop @using CocktailWeb @using CocktailWeb.Shared +@using CocktailWeb.Pages diff --git a/CocktailWeb/appsettings.json b/CocktailWeb/appsettings.json index c19ff7d..7c8f6b3 100644 --- a/CocktailWeb/appsettings.json +++ b/CocktailWeb/appsettings.json @@ -8,5 +8,11 @@ "ConnectionStrings": { "CocktailDB": "Data Source=Data\\cocktails.db" }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "GeneralSettings": { + "MaxAllowedUploadSizeInMB": 10, + "ImageUploadDir": "images", + "SerialPort": "COM5", + "Baudrate": 115200 + } }
ID Name Action
@FlascheToUpdate.Id
@flasche.Id @flasche.Name - - -