{"$type":"com.atproto.lexicon.schema","defs":{"blockedComment":{"description":"Comment is blocked due to viewer blocking author or moderation action","properties":{"blocked":{"const":true,"description":"Always true for blocked comments","type":"boolean"},"blockedBy":{"description":"What caused the block: viewer blocked author, or comment was removed by moderators","knownValues":["author","moderator"],"maxLength":64,"type":"string"},"uri":{"description":"AT-URI of the blocked comment","format":"at-uri","type":"string"}},"required":["uri","blocked"],"type":"object"},"commentRef":{"description":"Reference to a comment record","properties":{"cid":{"description":"CID of the comment record","format":"cid","type":"string"},"uri":{"description":"AT-URI of the comment","format":"at-uri","type":"string"}},"required":["uri","cid"],"type":"object"},"commentStats":{"description":"Statistics for a comment","properties":{"downvotes":{"description":"Number of downvotes","minimum":0,"type":"integer"},"replyCount":{"description":"Number of direct replies to this comment","minimum":0,"type":"integer"},"score":{"description":"Calculated score (upvotes - downvotes)","type":"integer"},"upvotes":{"description":"Number of upvotes","minimum":0,"type":"integer"}},"required":["upvotes","downvotes","score","replyCount"],"type":"object"},"commentView":{"description":"Base view for a single comment with voting, stats, and viewer state","properties":{"author":{"description":"Comment author information","ref":"social.coves.community.post.defs#authorView","type":"ref"},"cid":{"description":"CID of the comment record","format":"cid","type":"string"},"createdAt":{"description":"When the comment was created","format":"datetime","type":"string"},"embed":{"description":"Embedded content from the comment record (images or quoted post). The AppView transforms blob references into fetchable image URLs and enriches quoted posts with a resolved view, so a served embed carries a #view type.","refs":["social.coves.embed.images","social.coves.embed.images#view","social.coves.embed.post","social.coves.embed.post#view"],"type":"union"},"indexedAt":{"description":"When this comment was indexed by the AppView","format":"datetime","type":"string"},"parent":{"description":"Reference to parent comment if this is a nested reply","ref":"#commentRef","type":"ref"},"post":{"description":"Reference to the parent post","ref":"#postRef","type":"ref"},"record":{"description":"The actual comment record verbatim","type":"unknown"},"stats":{"description":"Comment statistics (votes, replies)","ref":"#commentStats","type":"ref"},"uri":{"description":"AT-URI of the comment record","format":"at-uri","type":"string"},"viewer":{"description":"Viewer-specific state (vote, saved, etc.)","ref":"#commentViewerState","type":"ref"}},"required":["uri","cid","author","record","post","createdAt","indexedAt","stats"],"type":"object"},"commentViewerState":{"description":"Viewer-specific state for a comment","properties":{"vote":{"description":"Viewer's vote on this comment","knownValues":["up","down"],"maxLength":64,"type":"string"},"voteUri":{"description":"AT-URI of the viewer's vote record","format":"at-uri","type":"string"}},"type":"object"},"notFoundComment":{"description":"Comment was not found (deleted, never indexed, or invalid URI)","properties":{"notFound":{"const":true,"description":"Always true for not found comments","type":"boolean"},"uri":{"description":"AT-URI of the missing comment","format":"at-uri","type":"string"}},"required":["uri","notFound"],"type":"object"},"postRef":{"description":"Reference to a post record","properties":{"cid":{"description":"CID of the post record","format":"cid","type":"string"},"uri":{"description":"AT-URI of the post","format":"at-uri","type":"string"}},"required":["uri","cid"],"type":"object"},"threadViewComment":{"description":"Wrapper for threaded comment structure, similar to Bluesky's threadViewPost pattern","properties":{"comment":{"description":"The comment itself","ref":"#commentView","type":"ref"},"hasMore":{"description":"True if more replies exist but are not included in this response","type":"boolean"},"replies":{"description":"Nested replies to this comment","items":{"refs":["#threadViewComment","#notFoundComment","#blockedComment"],"type":"union"},"type":"array"}},"required":["comment"],"type":"object"}},"id":"social.coves.community.comment.defs","lexicon":1}