コード例 #1
0
        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);
        }
コード例 #2
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);
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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);
        }