org.passingreads.book.registration
Schema Diff
+11 -17
Compatibility Analysis
Breaking Changes Detected
6 breaking changes, 4 non-breaking changes.
Breaking Changes (6)
- RemovedVertex RemovedVertex { vertex_id: "org.passingreads.book.registration:body.bookPub" }
- RemovedVertex RemovedVertex { vertex_id: "org.passingreads.book.registration:body.bookSig" }
- RemovedVertex RemovedVertex { vertex_id: "org.passingreads.book.registration:body.did" }
- RemovedEdge RemovedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookPub", kind: "prop", name: Some("bookPub") }
- RemovedEdge RemovedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookSig", kind: "prop", name: Some("bookSig") }
- RemovedEdge RemovedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.did", kind: "prop", name: Some("did") }
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures:items" }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.signatures", kind: "prop", name: Some("signatures") }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.signatures", tgt: "org.passingreads.book.registration:body.signatures:items", kind: "items", name: None }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "org.passingreads.book.registration:body.bookPub" }RemovedVertex { vertex_id: "org.passingreads.book.registration:body.bookSig" }RemovedVertex { vertex_id: "org.passingreads.book.registration:body.did" }
Added Elements
AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures" }AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures:items" }
Additional Notes
- Breaking: RemovedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookPub", kind: "prop", name: Some("bookPub") }
- Breaking: RemovedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookSig", kind: "prop", name: Some("bookSig") }
- Breaking: RemovedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.did", kind: "prop", name: Some("did") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.signatures", kind: "prop", name: Some("signatures") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.signatures", tgt: "org.passingreads.book.registration:body.signatures:items", kind: "items", name: None }
1
1
{
2
2
"id": "org.passingreads.book.registration",
3
3
"defs": {
4
4
"main": {
5
5
"key": "any",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
-
"did",
11
10
"bookId",
12
11
"title",
13
12
"authors",
14
13
"publicationId",
15
-
"occurredAt",
16
-
"bookPub",
17
-
"bookSig"
14
+
"signatures",
15
+
"occurredAt"
18
16
],
19
17
"properties": {
20
-
"did": {
21
-
"type": "string",
22
-
"format": "did",
23
-
"description": "The DID of the person who registered the book. Included here, so it's verifiable with the bookSig."
24
-
},
25
18
"cover": {
26
19
"type": "blob",
27
20
"accept": [
28
21
"image/png",
29
22
"image/jpeg"
30
23
],
31
24
"maxSize": 1000000,
32
25
"description": "Cover image of the book"
33
26
},
34
27
"title": {
35
28
"type": "string",
36
29
"maxLength": 512,
37
30
"minLength": 1,
38
31
"description": "The title of the book"
39
32
},
40
33
"bookId": {
41
34
"type": "string",
42
35
"description": "The book's ID (as defined on its QR Code)"
43
36
},
44
37
"authors": {
45
38
"type": "array",
46
39
"items": {
47
40
"type": "string",
48
41
"maxLength": 512,
49
42
"minLength": 1
50
43
},
51
44
"description": "Authors of this book, in order of credit. An empty array implies a book of anonymous or unknown authorship."
52
45
},
53
-
"bookPub": {
54
-
"type": "bytes",
55
-
"description": "The MultiFormat public key of the book."
56
-
},
57
-
"bookSig": {
58
-
"type": "bytes",
59
-
"description": "The MultiFormat signature of this record, without this attribute, as created by the private key associated with the book."
60
-
},
61
46
"occurredAt": {
62
47
"type": "string",
63
48
"format": "datetime"
64
49
},
50
+
"signatures": {
51
+
"type": "array",
52
+
"items": {
53
+
"ref": "org.passingreads.signature.book#main",
54
+
"type": "ref"
55
+
},
56
+
"minLength": 1,
57
+
"description": "Inline attestations binding this record to the book's keypair."
58
+
},
65
59
"aspectRatio": {
66
60
"ref": "org.passingreads.defs#aspectRatio",
67
61
"type": "ref",
68
62
"description": "Aspect ratio of the cover image"
69
63
},
70
64
"publicationId": {
71
65
"type": "string",
72
66
"description": "The book's Open Library Edition ID"
73
67
}
74
68
}
75
69
},
76
70
"description": "A book that has been registered on PassingReads"
77
71
}
78
72
},
79
73
"$type": "com.atproto.lexicon.schema",
80
74
"lexicon": 1
81
75
}