Отображение содержимого главы и разделов книги в хранилище с высокой степенью нормализации

Я хочу представить книги, в которых есть главы и разделы, а также содержание каждой книги, главы и раздела.

Это моя схема:

type BookId = string
type ChapterId = string
type SectionId = string
type ContentId = string


export type SourceId =
| ChapterId
| SectionId
| BookId


type Book = {
  id: BookId,
  name: string,
}

type Chapter = {
  id: ChapterId,
  bookId: BookId,
  name: string
}
type Section = {
  id: SectionId,
  chapterId: ChapterId,
  name: string
}

type Content = {
  id: ContentId,
  sourceId: SourceId,
  name: string,
  content: string
}

Вот как я запрашиваю все книги, главы и разделы:

 list() {
    return this.bookRepo.all().then(books =>
      Promise.all(books.map(book =>
        Promise.all([
          this.bookRepo.contents(book.id),
          this.bookRepo.chapters(book.id)
        ]).then(([contents, chapters]) =>
          Promise.all(chapters.map(chapter =>
            Promise.all([
              this.bookRepo.contents(chapter.id),
              this.bookRepo.sections(chapter.id)
            ]).then(([contents, sections]) =>
              Promise.all(sections.map(section =>
                this.bookRepo.contents(section.id).then(contents => [
                  section, contents
                ])))
                .then(sections => [chapter, contents, sections]))))
            .then(chapters => [book, contents, chapters])))));
  }

На данный момент я просто визуализирую как json, но код запроса трудно поддерживать.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *