Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
 public Nested(BookContentBase content)
 {
     Content = content;
 }
Esempio n. 6
0
 public DummyAdaptor(BookBase book, BookContentBase content)
 {
     Book     = book;
     Contents = new[] { new Nested(content) };
 }