132 lines
4.8 KiB
C#
132 lines
4.8 KiB
C#
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 CocktailHinzufuegen
|
|
{
|
|
[Parameter]
|
|
public string? id { get; set; }
|
|
public List<Flasche> FlaschenListe { get; set; } = new();
|
|
|
|
public Cocktail? EditCocktail;
|
|
|
|
private IBrowserFile? CocktaiLBildDatei;
|
|
private DbDataContext? _DataContext;
|
|
|
|
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()
|
|
{
|
|
_DataContext ??= await DataContextFactory.CreateDbContextAsync();
|
|
if (_DataContext != null)
|
|
{
|
|
FlaschenListe = await _DataContext.Flaschen.OrderBy(f => f.Name).ToListAsync();
|
|
}
|
|
}
|
|
|
|
public void FlascheHinzufuegen(MouseEventArgs e, Flasche f)
|
|
{
|
|
EditCocktail?.Cocktailflaschen.Add(new CocktailFlasche() { Flasche = f, Reihenfolge = EditCocktail.Cocktailflaschen.Count + 1 });
|
|
CocktailFlaschenSortieren();
|
|
}
|
|
|
|
public void FlascheEntfernen(MouseEventArgs e, CocktailFlasche cf)
|
|
{
|
|
EditCocktail?.Cocktailflaschen.Remove(cf);
|
|
CocktailFlaschenSortieren();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Geht die Liste durch und setzt die Reihenfolge neu
|
|
/// </summary>
|
|
void CocktailFlaschenSortieren()
|
|
{
|
|
// Reihenfolge neu sortieren, damit keine Lücken entstehen
|
|
int i = 1;
|
|
foreach (var c in EditCocktail.Cocktailflaschen.OrderBy(cf => cf.Reihenfolge))
|
|
{
|
|
c.Reihenfolge = i;
|
|
i++;
|
|
}
|
|
}
|
|
|
|
public void FlascheReihenfolge(MouseEventArgs e, CocktailFlasche cf, int Richtung)
|
|
{
|
|
cf.Reihenfolge += Richtung;
|
|
CocktailFlaschenSortieren();
|
|
}
|
|
|
|
public void Bild_OnChange(InputFileChangeEventArgs e)
|
|
{
|
|
CocktaiLBildDatei = e.GetMultipleFiles().FirstOrDefault();
|
|
//this.StateHasChanged(); War in nem Stackexchange.. Nötig?
|
|
}
|
|
private async Task OnSubmit(EventArgs e)
|
|
{
|
|
_DataContext ??= await DataContextFactory.CreateDbContextAsync();
|
|
|
|
if (EditCocktail != null && _DataContext != null)
|
|
{
|
|
if (id != null)
|
|
{
|
|
_DataContext.Cocktails.Update(EditCocktail);
|
|
}
|
|
else
|
|
{
|
|
_DataContext.Cocktails.Add(EditCocktail);
|
|
}
|
|
await _DataContext.SaveChangesAsync();
|
|
|
|
if (CocktaiLBildDatei != null)
|
|
{
|
|
try
|
|
{
|
|
// Bild hochladen
|
|
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: Config.Value.MaxAllowedUploadSizeInMB * 1024 * 1024);
|
|
FileStream fs = File.Create(fullpath);
|
|
await stream.CopyToAsync(fs);
|
|
stream.Close();
|
|
fs.Close();
|
|
EditCocktail.ImageURL = relativeuploadpath;
|
|
// URL hinterlegen und wieder speichern
|
|
_DataContext.Cocktails.Update(EditCocktail);
|
|
await _DataContext.SaveChangesAsync();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error uploading image: {ex.Message}");
|
|
}
|
|
}
|
|
}
|
|
nav.NavigateTo("/cocktails");
|
|
}
|
|
}
|
|
}
|