SUBD_SushiBar/SushiBar/SushiBarMongoDB/Implements/MenuStorage.cs

117 lines
3.6 KiB
C#

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<Menu>("Menus")
.DeleteMany(Builders<Menu>.Filter.Empty);
}
public MenuViewModel? GetElement(MenuSearchModel model)
{
if (!model.Id.HasValue)
{
return null;
}
using (var context = new SushiBarMongoDB())
{
var menus = context.GetCollection<Menu>("Menus");
var filterBuilder = Builders<Menu>.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<MenuViewModel> GetFilteredList(MenuSearchModel model)
{
if (string.IsNullOrEmpty(model.FoodName))
{
return new List<MenuViewModel>();
}
using var context = new SushiBarMongoDB();
var menus = context.GetCollection<Menu>("Menus");
var filterBuilder = Builders<Menu>.Filter;
var filter = filterBuilder
.Regex(x => x.FoodName, new BsonRegularExpression(model.FoodName));
return menus
.Find(filter)
.ToList()
.Select(x => x.GetViewModel)
.ToList();
}
public List<MenuViewModel> GetFullList()
{
using var context = new SushiBarMongoDB();
var menus = context.GetCollection<Menu>("Menus");
return menus.Find(Builders<Menu>.Filter.Empty)
.ToList()
.Select(x => x.GetViewModel)
.ToList();
}
public MenuViewModel? Insert(MenuBindingModel model)
{
using var context = new SushiBarMongoDB();
var menus = context.GetCollection<Menu>("Menus");
model.Id = (int)menus.CountDocuments(FilterDefinition<Menu>.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<Menu>("Menus");
var filter = Builders<Menu>.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<Menu>("Menus");
var filter = Builders<Menu>.Filter.Eq(x => x.Id, model.Id);
var menu = menus.FindOneAndDelete(filter);
return menu?.GetViewModel;
}
}
}