private async Task CheckListNames(SocialMediaListsDetails currentDetails, SocialMediaListsDetails updatedDetails)
        {
            var tasks = new List <Task>();

            foreach (var updatedListDetails in updatedDetails.Lists)
            {
                var listDetails = currentDetails.Lists.Find(l => l.Id == updatedListDetails.Id);

                // If it doesn't exist in old details, create new list doc
                if (listDetails == null)
                {
                    var newList = _mapper.Map <SocialList>(updatedListDetails);
                    newList.MediaPosts = new List <MediaPost>();
                    tasks.Add(_repo.CreateAsync(newList));
                }
                else if (listDetails.Name != updatedListDetails.Name)
                {
                    // Update list doc with name change
                    var list = _repo.Get(listDetails.Id);
                    list.Name = updatedListDetails.Name;
                    tasks.Add(_repo.UpdateAsync(list.Id, list));
                }
            }

            await Task.WhenAll(tasks);
        }
        private async Task DeleteRemovedLists(SocialMediaListsDetails currentDetails, SocialMediaListsDetails updatedDetails)
        {
            var tasks = new List <Task>();

            foreach (var currentListDetails in currentDetails.Lists)
            {
                var listDetails = updatedDetails.Lists.Find(l => l.Id == currentListDetails.Id);

                // If list has been removed, remove the list doc
                if (listDetails == null)
                {
                    tasks.Add(_repo.DeleteAsync(currentListDetails.Id));
                }
            }

            await Task.WhenAll(tasks);
        }
        private async Task CreateRecentlyAdded(SocialMediaListsDetails details)
        {
            var now  = DateTime.UtcNow;
            var name = "Recently Added";

            details.Lists.Add(new SocialListBase
            {
                Id      = RecentlyAddedId,
                Created = now,
                Name    = name
            });

            var updateListsDetailsTask = _repo.UpdateListsDetailsAsync(details.Id, details);
            var createListTask         = _repo.CreateAsync(new SocialList
            {
                Id         = RecentlyAddedId,
                Created    = now,
                Name       = name,
                MediaPosts = new List <MediaPost>()
            });

            await Task.WhenAll(updateListsDetailsTask, createListTask);
        }
        public SocialMediaListsDetailsVM GetListsDetails()
        {
            var details = _repo.GetListsDetails();

            if (details == null)
            {
                details = new SocialMediaListsDetails
                {
                    Id      = ObjectId.GenerateNewId().ToString(),
                    Created = DateTime.UtcNow,
                    Lists   = new List <SocialListBase>()
                }
            }
            ;

            if (details.Lists.Count < 1)
            {
                CreateRecentlyAdded(details).Wait();
            }

            var detailsVM = _mapper.Map <SocialMediaListsDetailsVM>(details);

            return(detailsVM);
        }
 public async Task UpdateListsDetailsAsync(string id, SocialMediaListsDetails listDetails) =>
 await _listsDetailsCollection.ReplaceOneAsync(doc => doc.Id == id, listDetails, new UpdateOptions { IsUpsert = true });
 public async Task CreateListsDetailsAsync(SocialMediaListsDetails doc) =>
 await _listsDetailsCollection.InsertOneAsync(doc);