88 lines
3.1 KiB
C#
Raw Normal View History

2023-05-06 16:30:44 +04:00
using Amazon.Auth.AccessControlPolicy;
using BeautySaloonContracts.BindingModels;
using BeautySaloonContracts.SearchModels;
using BeautySaloonContracts.StoragesContracts;
using BeautySaloonContracts.ViewModels;
using MongoDB.Bson;
using MongoDB.Driver;
namespace BeautySaloonNoSQLDatabaseImplement.Implements
{
public class ServiceStorage : IServiceStorage
{
private readonly NewdbContext _source;
public ServiceStorage()
{
_source = NewdbContext.GetInstance();
}
public ServiceViewModel? Delete(ServiceBindingModel model)
{
var element = _source.Services
.FindOneAndDelete(new BsonDocument("id", model.Id));
if (element != null)
return element.GetViewModel;
return null;
}
public ServiceViewModel? GetElement(ServiceSearchModel model)
{
if (model.Id.HasValue)
return _source.Services
.Find(new BsonDocument("id", model.Id)).FirstOrDefault()?.GetViewModel;
if (!string.IsNullOrEmpty(model.Name))
return _source.Services
.Find(new BsonDocument("name", model.Name)).FirstOrDefault()?.GetViewModel;
return null;
}
public List<ServiceViewModel> GetFilteredList(ServiceSearchModel model)
{
if (string.IsNullOrEmpty(model.Name))
{
return new();
}
var filter = Builders<Service>.Filter.Regex("name", new BsonRegularExpression(model.Name));
return _source.Services.Find(filter).ToList().Select(x => x.GetViewModel).ToList();
}
public List<ServiceViewModel> GetFullList()
{
var filterDefinition = Builders<Service>.Filter.Empty;
return _source.Services.Find(filterDefinition).ToList().Select(x => x.GetViewModel).ToList();
}
public ServiceViewModel? Insert(ServiceBindingModel model)
{
model.Id = _source.Services.AsQueryable()
.Count() > 0 ? _source.Services.AsQueryable().Max(x => x.Id) + 1 : 1;
var newElement = Service.Create(model);
if (newElement == null)
{
return null;
}
_source.Services.InsertOne(newElement);
return newElement.GetViewModel;
}
public List<ReportViewModel> ReadMostPopular()
{
/*var filterDefinition = Builders<Order>.Filter.Empty;
_source.Orders.Find(filterDefinition).ToList().Select(x => x.ServiceOrders)
*/
return new();
}
public ServiceViewModel? Update(ServiceBindingModel model)
{
var element = _source.Services.Find(new BsonDocument("id", model.Id)).FirstOrDefault();
if (element == null)
{
return null;
}
element.Update(model);
_source.Services.FindOneAndReplace(new BsonDocument("id", model.Id), element);
return element.GetViewModel;
}
}
}