using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using MongoDB.Driver; using Retroactiune.Models; using Retroactiune.Settings; namespace Retroactiune.Services { /// /// Service that simplifies access to the database for managing FeedbackReceiver items. /// /// public class FeedbackReceiverService : IFeedbackReceiverService { private readonly IMongoCollection _collection; public FeedbackReceiverService(IMongoClient client, IMongoDbSettings settings) { var database = client.GetDatabase(settings.DatabaseName); _collection = database.GetCollection(settings.FeedbackReceiverCollectionName); } public async Task CreateManyAsync(IEnumerable items) { if (items == null) { throw new ArgumentNullException(nameof(items)); } var feedbackReceivers = items as FeedbackReceiver[] ?? items.ToArray(); if (!feedbackReceivers.Any()) { throw new GenericServiceException("items must contain at least one element"); } try { await _collection.InsertManyAsync(feedbackReceivers); } catch (Exception e) { throw new GenericServiceException($"Operation failed: {e.Message} {e.StackTrace}"); } } public async Task DeleteOneAsync(string guid) { try { var filter = new FilterDefinitionBuilder(); await _collection.DeleteOneAsync(filter.Eq(i => i.Id, guid)); } catch (Exception e) { throw new GenericServiceException($"Operation failed: {e.Message} {e.StackTrace}"); } } public async Task> FindAsync(IEnumerable guids) { try { var filter = new FilterDefinitionBuilder(); var cursor = await _collection.FindAsync(filter.In(i => i.Id, guids)); return cursor.ToList(); } catch (Exception e) { throw new GenericServiceException($"Operation failed: {e.Message} {e.StackTrace}"); } } } }