org.passingreads.book.registration
Schema Diff
+22 -16
Compatibility Analysis
Breaking Changes Detected
7 breaking changes, 17 non-breaking changes.
Breaking Changes (7)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.signatures", kind: "prop", name: Some("signatures") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookPub", kind: "prop", name: Some("bookPub") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.did", kind: "prop", name: Some("did") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookSig", kind: "prop", name: Some("bookSig") }
- 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" }
Non-Breaking Changes (17)
- AddedVertex AddedVertex { vertex_id: "community.lexicon.location.hthree#main" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#osmLocation" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.kept" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.location" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.location:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.location:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures:items" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.signature.book#main" }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.kept", kind: "prop", name: Some("kept") }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.location", kind: "prop", name: Some("location") }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.location", tgt: "org.passingreads.book.registration:body.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.location", tgt: "org.passingreads.book.registration:body.location:variant1", kind: "variant", name: Some("org.passingreads.book.event#osmLocation") }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.signatures", tgt: "org.passingreads.book.registration:body.signatures:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.signatures:items", tgt: "org.passingreads.signature.book#main", kind: "ref", 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: "community.lexicon.location.hthree#main" }AddedVertex { vertex_id: "org.passingreads.book.event#osmLocation" }AddedVertex { vertex_id: "org.passingreads.book.registration:body.kept" }AddedVertex { vertex_id: "org.passingreads.book.registration:body.location" }AddedVertex { vertex_id: "org.passingreads.book.registration:body.location:variant0" }AddedVertex { vertex_id: "org.passingreads.book.registration:body.location:variant1" }AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures" }AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures:items" }AddedVertex { vertex_id: "org.passingreads.signature.book#main" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.signatures", kind: "prop", name: Some("signatures") }
- Breaking: RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookPub", kind: "prop", name: Some("bookPub") }
- Breaking: RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.did", kind: "prop", name: Some("did") }
- Breaking: RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookSig", kind: "prop", name: Some("bookSig") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.kept", kind: "prop", name: Some("kept") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.location", kind: "prop", name: Some("location") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.location", tgt: "org.passingreads.book.registration:body.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.location", tgt: "org.passingreads.book.registration:body.location:variant1", kind: "variant", name: Some("org.passingreads.book.event#osmLocation") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.signatures", tgt: "org.passingreads.book.registration:body.signatures:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.signatures:items", tgt: "org.passingreads.signature.book#main", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "A book that has been registered on PassingReads",
6
6
"key": "any",
7
7
"record": {
8
8
"properties": {
9
9
"aspectRatio": {
10
10
"description": "Aspect ratio of the cover image",
11
11
"ref": "org.passingreads.defs#aspectRatio",
12
12
"type": "ref"
13
13
},
14
14
"authors": {
15
15
"description": "Authors of this book, in order of credit. An empty array implies a book of anonymous or unknown authorship.",
16
16
"items": {
17
17
"maxLength": 512,
18
18
"minLength": 1,
19
19
"type": "string"
20
20
},
21
21
"type": "array"
22
22
},
23
23
"bookId": {
24
24
"description": "The book's ID (as defined on its QR Code)",
25
25
"type": "string"
26
26
},
27
-
"bookPub": {
28
-
"description": "The MultiFormat public key of the book.",
29
-
"type": "bytes"
30
-
},
31
-
"bookSig": {
32
-
"description": "The MultiFormat signature of this record, without this attribute, as created by the private key associated with the book.",
33
-
"type": "bytes"
34
-
},
35
27
"cover": {
36
28
"accept": [
37
29
"image/png",
38
30
"image/jpeg"
39
31
],
40
32
"description": "Cover image of the book",
41
33
"maxSize": 1000000,
42
34
"type": "blob"
43
35
},
44
-
"did": {
45
-
"description": "The DID of the person who registered the book. Included here, so it's verifiable with the bookSig.",
46
-
"format": "did",
47
-
"type": "string"
36
+
"kept": {
37
+
"description": "Whether the registrant is keeping the book. Absent means true, so records written before this field existed still read as kept. When false the book starts its journey at `location` rather than in the registrant's library.",
38
+
"type": "boolean"
39
+
},
40
+
"location": {
41
+
"description": "Where the book is at the moment it is registered.",
42
+
"refs": [
43
+
"community.lexicon.location.hthree#main",
44
+
"org.passingreads.book.event#osmLocation"
45
+
],
46
+
"type": "union"
48
47
},
49
48
"occurredAt": {
50
49
"format": "datetime",
51
50
"type": "string"
52
51
},
53
52
"publicationId": {
54
53
"description": "The book's Open Library Edition ID",
55
54
"type": "string"
56
55
},
56
+
"signatures": {
57
+
"description": "Inline attestations binding this record to the book's keypair.",
58
+
"items": {
59
+
"ref": "org.passingreads.signature.book#main",
60
+
"type": "ref"
61
+
},
62
+
"minLength": 1,
63
+
"type": "array"
64
+
},
57
65
"title": {
58
66
"description": "The title of the book",
59
67
"maxLength": 512,
60
68
"minLength": 1,
61
69
"type": "string"
62
70
}
63
71
},
64
72
"required": [
65
-
"did",
66
73
"bookId",
67
74
"title",
68
75
"authors",
69
76
"publicationId",
70
-
"occurredAt",
71
-
"bookPub",
72
-
"bookSig"
77
+
"signatures",
78
+
"occurredAt"
73
79
],
74
80
"type": "object"
75
81
},
76
82
"type": "record"
77
83
}
78
84
},
79
85
"id": "org.passingreads.book.registration",
80
86
"lexicon": 1
81
87
}