buzz.bookhive.book
Schema Diff
+14 -2
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 8 non-breaking changes.
Breaking Changes (1)
- ConstraintTightened ConstraintTightened { vertex_id: "buzz.bookhive.book:body.status", sort: "knownValues", old_value: "[\"buzz.bookhive.defs#finished\",\"buzz.bookhive.defs#reading\",\"buzz.bookhive.defs#wantToRead\",\"buzz.bookhive.defs#abandoned\",\"buzz.bookhive.defs#owned\"]", new_value: "[\"buzz.bookhive.defs#finished\",\"buzz.bookhive.defs#reading\",\"buzz.bookhive.defs#wantToRead\",\"buzz.bookhive.defs#abandoned\"]" }
Non-Breaking Changes (8)
- AddedVertex AddedVertex { vertex_id: "buzz.bookhive.book:body.hiveBookUri" }
- AddedVertex AddedVertex { vertex_id: "buzz.bookhive.book:body.identifiers" }
- AddedVertex AddedVertex { vertex_id: "buzz.bookhive.book:body.owned" }
- AddedVertex AddedVertex { vertex_id: "buzz.bookhive.defs#bookIdentifiers" }
- AddedEdge AddedEdge { src: "buzz.bookhive.book:body", tgt: "buzz.bookhive.book:body.hiveBookUri", kind: "prop", name: Some("hiveBookUri") }
- AddedEdge AddedEdge { src: "buzz.bookhive.book:body", tgt: "buzz.bookhive.book:body.identifiers", kind: "prop", name: Some("identifiers") }
- AddedEdge AddedEdge { src: "buzz.bookhive.book:body", tgt: "buzz.bookhive.book:body.owned", kind: "prop", name: Some("owned") }
- AddedEdge AddedEdge { src: "buzz.bookhive.book:body.identifiers", tgt: "buzz.bookhive.defs#bookIdentifiers", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "buzz.bookhive.book:body.hiveBookUri" }AddedVertex { vertex_id: "buzz.bookhive.book:body.identifiers" }AddedVertex { vertex_id: "buzz.bookhive.book:body.owned" }AddedVertex { vertex_id: "buzz.bookhive.defs#bookIdentifiers" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "buzz.bookhive.book:body.status", sort: "knownValues", old_value: "[\"buzz.bookhive.defs#finished\",\"buzz.bookhive.defs#reading\",\"buzz.bookhive.defs#wantToRead\",\"buzz.bookhive.defs#abandoned\",\"buzz.bookhive.defs#owned\"]", new_value: "[\"buzz.bookhive.defs#finished\",\"buzz.bookhive.defs#reading\",\"buzz.bookhive.defs#wantToRead\",\"buzz.bookhive.defs#abandoned\"]" }
Additional Notes
- Non-breaking: AddedEdge { src: "buzz.bookhive.book:body", tgt: "buzz.bookhive.book:body.hiveBookUri", kind: "prop", name: Some("hiveBookUri") }
- Non-breaking: AddedEdge { src: "buzz.bookhive.book:body", tgt: "buzz.bookhive.book:body.identifiers", kind: "prop", name: Some("identifiers") }
- Non-breaking: AddedEdge { src: "buzz.bookhive.book:body", tgt: "buzz.bookhive.book:body.owned", kind: "prop", name: Some("owned") }
- Non-breaking: AddedEdge { src: "buzz.bookhive.book:body.identifiers", tgt: "buzz.bookhive.defs#bookIdentifiers", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "A book in the user's library",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"authors": {
10
10
"description": "The authors of the book (tab separated)",
11
11
"maxLength": 2048,
12
12
"minLength": 1,
13
13
"type": "string"
14
14
},
15
15
"bookProgress": {
16
16
"description": "Progress tracking details for the book",
17
17
"ref": "buzz.bookhive.defs#bookProgress",
18
18
"type": "ref"
19
19
},
20
20
"cover": {
21
21
"accept": [
22
22
"image/png",
23
23
"image/jpeg"
24
24
],
25
25
"description": "Cover image of the book",
26
26
"maxSize": 1000000,
27
27
"type": "blob"
28
28
},
29
29
"createdAt": {
30
30
"format": "datetime",
31
31
"type": "string"
32
32
},
33
33
"finishedAt": {
34
34
"description": "The date the user finished reading the book",
35
35
"format": "datetime",
36
36
"type": "string"
37
37
},
38
+
"hiveBookUri": {
39
+
"description": "AT-URI of the canonical catalogBook record in @bookhive.buzz",
40
+
"type": "string"
41
+
},
38
42
"hiveId": {
39
43
"description": "The book's hive id, used to correlate user's books with the hive",
40
44
"type": "string"
41
45
},
46
+
"identifiers": {
47
+
"description": "External identifiers for the book",
48
+
"ref": "buzz.bookhive.defs#bookIdentifiers",
49
+
"type": "ref"
50
+
},
51
+
"owned": {
52
+
"description": "Whether the user owns this book",
53
+
"type": "boolean"
54
+
},
42
55
"review": {
43
56
"description": "The book's review",
44
57
"maxGraphemes": 15000,
45
58
"type": "string"
46
59
},
47
60
"stars": {
48
61
"description": "Number of stars given to the book (1-10) which will be mapped to 1-5 stars",
49
62
"maximum": 10,
50
63
"minimum": 1,
51
64
"type": "integer"
52
65
},
53
66
"startedAt": {
54
67
"description": "The date the user started reading the book",
55
68
"format": "datetime",
56
69
"type": "string"
57
70
},
58
71
"status": {
59
72
"knownValues": [
60
73
"buzz.bookhive.defs#finished",
61
74
"buzz.bookhive.defs#reading",
62
75
"buzz.bookhive.defs#wantToRead",
63
-
"buzz.bookhive.defs#abandoned",
64
-
"buzz.bookhive.defs#owned"
76
+
"buzz.bookhive.defs#abandoned"
65
77
],
66
78
"type": "string"
67
79
},
68
80
"title": {
69
81
"description": "The title of the book",
70
82
"maxLength": 512,
71
83
"minLength": 1,
72
84
"type": "string"
73
85
}
74
86
},
75
87
"required": [
76
88
"title",
77
89
"authors",
78
90
"hiveId",
79
91
"createdAt"
80
92
],
81
93
"type": "object"
82
94
},
83
95
"type": "record"
84
96
}
85
97
},
86
98
"id": "buzz.bookhive.book",
87
99
"lexicon": 1
88
100
}