using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; using ProRestaurant.Classes; using ProRestaurant.DBContexts; using ProRestaurant.Models.Restaurants; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; namespace ProRestaurant.Repository.Restaurants { public class MenuItemRepository : IMenuItemRepository { private readonly DBContext dBContext; public MenuItemRepository(DBContext db) { dBContext = db; } public MenuItem GetMenuItem(int Id) { var item = dBContext.MenuItems.Where(m => m.Id == Id).FirstOrDefault(); if (item == null) { item = new MenuItem(); } else { if (item.CategoryId > 0) item.Category = dBContext.MenuCategories.Where(c => c.Id == item.CategoryId).Select(c => c.Description).FirstOrDefault(); if (!string.IsNullOrEmpty(item.Image)) { if (!item.Image.Contains("data:image")) item.Image = ImageFormatter.ImageToBase64(item.Image); } item.Options = dBContext.MenuOptions.Where(o => o.MenuItemId == item.Id).ToList(); } return item; } public IEnumerable GetMenuItems(Func where) { var items = dBContext.MenuItems.Where(where).ToList(); foreach (var item in items) { if (item.CategoryId > 0) item.Category = dBContext.MenuCategories.Where(c => c.Id == item.CategoryId).Select(c => c.Description).FirstOrDefault(); if (!string.IsNullOrEmpty(item.Image)) { if (!item.Image.Contains("data:image")) item.Image = ImageFormatter.ImageToBase64(item.Image); } } return items; } public void Insert(MenuItem Item) { Item.Image = SaveImage(Item); dBContext.Add(Item); Save(); } public void Remove(MenuItem Item) { dBContext.MenuItems.Remove(Item); Save(); } public void Save() { dBContext.SaveChanges(); } public void Update(MenuItem Item) { Item.Image = SaveImage(Item); dBContext.Entry(Item).State = EntityState.Modified; Save(); } private string SaveImage(MenuItem Item) { string image = Item.Image; if (!string.IsNullOrEmpty(Item.Image)) { bool saveFile = false; var loc = dBContext.Locations.FirstOrDefault()?.ImageStore; if (!string.IsNullOrEmpty(loc)) { var rest = dBContext.Restaurants.Where(r => r.Id == Item.RestaurantId).FirstOrDefault(); var folderName = rest.Name + "-" + rest.Suburb; saveFile = true; loc += string.Format("{0}", folderName); if (!Directory.Exists(loc)) { Directory.CreateDirectory(loc); } if (saveFile) { string path = ImageFormatter.Base64ToImage(Item.Image, loc, Item.Name.Trim()); image = path; } } } return image; } } }