using MongoDB.Bson; using MongoDB.Driver; using SushiBarContracts.BindingModels; using SushiBarContracts.SearchModels; using SushiBarContracts.StoragesContracts; using SushiBarContracts.ViewModels; using SushiBarMongoDB.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SushiBarMongoDB.Implements { public class MenuStorage : IMenuStorage { public void ClearEntity() { using var context = new SushiBarMongoDB(); context.GetCollection("Menus") .DeleteMany(Builders.Filter.Empty); } public MenuViewModel? GetElement(MenuSearchModel model) { if (!model.Id.HasValue) { return null; } using (var context = new SushiBarMongoDB()) { var menus = context.GetCollection("Menus"); var filterBuilder = Builders.Filter; var filter = filterBuilder.Empty; if (!model.Id.HasValue) { filter &= filterBuilder.Eq(x => x.Id, model.Id); } return menus.Find(filter) .FirstOrDefault() ?.GetViewModel; } } public List GetFilteredList(MenuSearchModel model) { if (string.IsNullOrEmpty(model.FoodName)) { return new List(); } using var context = new SushiBarMongoDB(); var menus = context.GetCollection("Menus"); var filterBuilder = Builders.Filter; var filter = filterBuilder .Regex(x => x.FoodName, new BsonRegularExpression(model.FoodName)); return menus .Find(filter) .ToList() .Select(x => x.GetViewModel) .ToList(); } public List GetFullList() { using var context = new SushiBarMongoDB(); var menus = context.GetCollection("Menus"); return menus.Find(Builders.Filter.Empty) .ToList() .Select(x => x.GetViewModel) .ToList(); } public MenuViewModel? Insert(MenuBindingModel model) { using var context = new SushiBarMongoDB(); var menus = context.GetCollection("Menus"); model.Id = (int)menus.CountDocuments(FilterDefinition.Empty); var menu = Menu.Create(model); menus.InsertOne(menu); return menu.GetViewModel; } public MenuViewModel? Update(MenuBindingModel model) { using var context = new SushiBarMongoDB(); var menus = context.GetCollection("Menus"); var filter = Builders.Filter.Eq(x => x.Id, model.Id); var menu = menus.Find(filter).FirstOrDefault(); if (menu == null) { return null; } menu.Update(model); menus.ReplaceOne(filter, menu); return menu.GetViewModel; } public MenuViewModel? Delete(MenuBindingModel model) { using var context = new SushiBarMongoDB(); var menus = context.GetCollection("Menus"); var filter = Builders.Filter.Eq(x => x.Id, model.Id); var menu = menus.FindOneAndDelete(filter); return menu?.GetViewModel; } } }