public async Task <bool> ExecuteAsync(Note note) { if (note == null) { throw new ArgumentNullException(nameof(note)); } _context.Notes.Add(note); var result = await _context.SaveChangesAsync(); if (result < 1) { throw new InvalidOperationException("Note was not saved successfully"); } return(result > 0); }
public async Task <bool> ExecuteAsync(Note note, IReadOnlyList <string> tags) { if (note == null) { throw new ArgumentNullException(nameof(note)); } var noteFromDb = await FindNoteAsync(note.Id); noteFromDb.Description = note.Description; noteFromDb.Title = note.Title; noteFromDb.ModifiedAt = DateTimeOffset.Now; using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { if (tags != null && tags.Any()) { // if (noteFromDb.NoteTags.Any()) // _context.NoteTags.RemoveRange(noteFromDb.NoteTags); noteFromDb.NoteTags = new List <NoteTag>(); var addTagsResult = await _addTagsCommand.ExecuteAsync(tags); foreach (var tag in addTagsResult) { noteFromDb.NoteTags.Add(new NoteTag { TagId = tag.Id }); } } var result = await _context.SaveChangesAsync(); if (result < 1) { throw new InvalidOperationException("Note update failed."); } transaction.Complete(); } return(true); }
public async Task <IReadOnlyList <Tag> > ExecuteAsync(IReadOnlyList <string> tags) { if (tags == null || !tags.Any() || !tags.All(tag => tag != null)) { var message = "Add tags failed. The specified collection of tags" + "may not be null, empty, or contain null tags"; throw new ArgumentException(message, nameof(tags)); } tags = tags.Select(t => t.Trim().ToLower()).ToList(); var duplicateTags = await _db .Tags .Where(tag => tags.Contains(tag.Value.ToLower())) .ToListAsync(); var duplicateTagValues = duplicateTags .Select(tag => tag.Value) .ToList(); var uniqueTags = tags .Where(tag => !duplicateTagValues.Contains(tag)) .Select(tag => new Tag { Value = tag }) .ToList(); if (uniqueTags.Any()) { _db.Tags.AddRange(uniqueTags); var result = await _db.SaveChangesAsync(); if (result < 1) { throw new InvalidOperationException("Invalid number of tags saved"); } } return(uniqueTags .Concat(duplicateTags) .ToList()); }
public async Task <bool> DeleteNotes(IReadOnlyList <long> noteIds) { if (noteIds == null || !noteIds.Any()) { throw new ArgumentNullException(nameof(noteIds)); } var notes = await _db.Notes .Where(n => noteIds.Contains(n.Id)) .ToListAsync(); if (notes == null || !notes.Any()) { throw new InvalidOperationException( "Invalid list of note ids specified"); } _db.Notes.RemoveRange(notes); var result = await _db.SaveChangesAsync(); return(result > 0); }