117 lines
3.6 KiB
C#
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|