public async Task <DbBook> CreateAsync(BookBase book, BookContentBase content, int pages) { var client = Services.GetService <IElasticClient>(); var entry = client.Entry(new DbBook { Contents = new[] { new DbBookContent { PageCount = pages }.ApplyBase(content, Services) } }.ApplyBase(book, Services)); return(await entry.CreateAsync()); }
public async Task <ActionResult <BookContent> > UpdateContentAsync(string id, string contentId, BookContentBase model, [FromQuery] string reason = null) { var result = await _books.UpdateContentAsync(id, contentId, model, new SnapshotArgs { Committer = User, Event = SnapshotEvent.AfterModification, Reason = reason, Source = SnapshotSource.User }); if (!result.TryPickT0(out var value, out _)) { return(ResultUtilities.NotFound(id, contentId)); } var(_, content) = value; return(content.Convert(_services)); }
public async Task <OneOf <(DbBook, DbBookContent), NotFound> > CreateContentAsync(string id, BookContentBase content, int pages) { var client = Services.GetService <IElasticClient>(); var cont = new DbBookContent { Id = Snowflake.New, PageCount = pages }.ApplyBase(content, Services); var entry = await client.GetEntryAsync <DbBook>(id); do { if (entry.Value == null) { return(new NotFound()); } entry.Value.Contents = entry.Value.Contents.Append(cont).ToArray(); }while (!await entry.TryUpdateAsync()); return(entry.Value, cont); }
public async Task <ActionResult <BookContent> > UpdateContentAsync(string id, string contentId, BookContentBase model) { using (await _locker.EnterAsync(id)) { var book = await _books.GetAsync(id); if (book == null) { return(ResultUtilities.NotFound <Book>(id)); } var content = book.Contents.FirstOrDefault(c => c.Id == contentId); if (content == null) { return(ResultUtilities.NotFound <BookContent>(id, contentId)); } _mapper.Map(model, content); await _books.UpdateAsync(book); await _snapshots.ModifiedAsync(book); return(content); } }
public Nested(BookContentBase content) { Content = content; }
public DummyAdaptor(BookBase book, BookContentBase content) { Book = book; Contents = new[] { new Nested(content) }; }