using MongoDB.Bson; using MongoDB.Driver; using SportCompetitionsContracts.BindingModels; using SportCompetitionsContracts.SearchModels; using SportCompetitionsContracts.StoragesContracts; using SportCompetitionsContracts.ViewModels; using SportCompetitionsMongo.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SportCompetitionsMongo.Implements { public class CompetitionStorage : ICompetitionStorage { public void ClearEntity() { using var context = new SportCompetitionsMongoDB(); context.GetCollection("Competitions") .DeleteMany(Builders.Filter.Empty); } public List GetFullList() { using var context = new SportCompetitionsMongoDB(); var competitions = context.GetCollection("Competitions"); return competitions.Find(Builders.Filter.Empty) .ToList() .Select(x => x.GetViewModel) .ToList(); } public List GetFilteredList(CompetitionSearchModel model) { if (string.IsNullOrEmpty(model.CompetitionName)) return new List(); using var context = new SportCompetitionsMongoDB(); var competitions = context.GetCollection("Competitions"); var filterBuilder = Builders.Filter; var filter = filterBuilder.Regex(x => x.CompetitionName, new BsonRegularExpression(model.CompetitionName)); return competitions .Find(filter) .ToList() .Select(x => x.GetViewModel) .ToList(); } public CompetitionViewModel? GetElement(CompetitionSearchModel model) { if (!model.Id.HasValue) { return null; } using (var context = new SportCompetitionsMongoDB()) { var competitions = context.GetCollection("Competitions"); var filterBuilder = Builders.Filter; var filter = filterBuilder.Empty; if (!model.Id.HasValue) { filter &= filterBuilder.Eq(x => x.Id, model.Id); } return competitions.Find(filter) .FirstOrDefault() ?.GetViewModel; } } public CompetitionViewModel? Insert(CompetitionBindingModel model) { using var context = new SportCompetitionsMongoDB(); var competitions = context.GetCollection("Competitions"); model.Id = (int)competitions.CountDocuments(FilterDefinition.Empty); var competition = Competition.Create(model); competitions.InsertOne(competition); return competition.GetViewModel; } public CompetitionViewModel? Update(CompetitionBindingModel model) { using var context = new SportCompetitionsMongoDB(); var competitions = context.GetCollection("Competitions"); var filter = Builders.Filter.Eq(x => x.Id, model.Id); var competition = competitions.Find(filter).FirstOrDefault(); if (competition == null) { return null; } competition.Update(model); competitions.ReplaceOne(filter, competition); return competition.GetViewModel; } public CompetitionViewModel? Delete(CompetitionBindingModel model) { using var context = new SportCompetitionsMongoDB(); var categories = context.GetCollection("Competitions"); var filter = Builders.Filter.Eq(x => x.Id, model.Id); var category = categories.FindOneAndDelete(filter); return category?.GetViewModel; } } }