{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "bookView": {
      "description": "Appview projection of one book on the shelf: the join of a site.standard.publication record, its page.cavu.book extension, and index-time enrichment (chapter count read from the TOC document, aggregate rating from BookHive). Only renderable books are indexed — a publication with no book object, an empty spine, or content in an unrecognized format never appears as a view.",
      "properties": {
        "authors": {
          "description": "Names of contributors credited as authors (or with no stated role), in record order. Empty for books published without contributor credits.",
          "items": {
            "maxGraphemes": 100,
            "maxLength": 1000,
            "type": "string"
          },
          "maxLength": 100,
          "type": "array"
        },
        "chapterCount": {
          "description": "Entries in the book's table of contents, or the linear spine length when the TOC block carries no entries.",
          "minimum": 0,
          "type": "integer"
        },
        "completionStatus": {
          "description": "Whether the book is still being serialized, per page.cavu.book.",
          "knownValues": [
            "ongoing",
            "completed",
            "hiatus"
          ],
          "type": "string"
        },
        "cover": {
          "description": "Fully-qualified URL of the book cover, sized for detail views. Points at the appview's CDN or image proxy; absent when the book has no cover blob.",
          "format": "uri",
          "type": "string"
        },
        "coverAlt": {
          "description": "Alt text describing the cover image, for accessibility.",
          "maxGraphemes": 1000,
          "maxLength": 5000,
          "type": "string"
        },
        "indexedAt": {
          "description": "When the appview's index last saw this publication change.",
          "format": "datetime",
          "type": "string"
        },
        "rating": {
          "description": "Aggregate rating in thousandths of a star (0–5000), from BookHive's public aggregate for the correlated hive id. Absent when the book has no author to correlate or the hive doesn't know it.",
          "maximum": 5000,
          "minimum": 0,
          "type": "integer"
        },
        "ratingsCount": {
          "description": "How many BookHive reviews the rating aggregates.",
          "minimum": 0,
          "type": "integer"
        },
        "thumb": {
          "description": "Fully-qualified URL of a small cover rendition, sized for shelf grids.",
          "format": "uri",
          "type": "string"
        },
        "title": {
          "description": "The publication's name, per site.standard.publication.",
          "maxGraphemes": 500,
          "maxLength": 5000,
          "type": "string"
        },
        "uri": {
          "description": "AT-URI of the site.standard.publication record this view projects.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "title",
        "authors",
        "indexedAt"
      ],
      "type": "object"
    }
  },
  "id": "page.cavu.defs",
  "lexicon": 1
}
