io.kich.recipe.defs
Schema Diff
+5 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 2 non-breaking changes.
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.createdAt" }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.createdAt", kind: "prop", name: Some("createdAt") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.createdAt" }
Additional Notes
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.createdAt", kind: "prop", name: Some("createdAt") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"collectionRef": {
5
5
"description": "A collection this recipe belongs to, by id and display name.",
6
6
"properties": {
7
7
"id": {
8
8
"type": "string"
9
9
},
10
10
"name": {
11
11
"type": "string"
12
12
}
13
13
},
14
14
"required": [
15
15
"id",
16
16
"name"
17
17
],
18
18
"type": "object"
19
19
},
20
20
"main": {
21
21
"description": "Shared definitions for recipe-related lexicons",
22
22
"properties": {},
23
23
"type": "object"
24
24
},
25
25
"recipeView": {
26
26
"description": "A recipe as a list reader sees it: enough to choose one, not enough to cook it. Ingredients and instructions are deliberately absent — a caller that wants to cook follows `url`.",
27
27
"properties": {
28
28
"collections": {
29
29
"items": {
30
30
"ref": "#collectionRef",
31
31
"type": "ref"
32
32
},
33
33
"type": "array"
34
34
},
35
35
"completenessPercent": {
36
36
"description": "How much of this recipe the pantry already covers, 0–100. A whole number rather than the stored 0–1 fraction, because lexicons have no float type and no reader needs the precision.",
37
37
"maximum": 100,
38
38
"minimum": 0,
39
39
"type": "integer"
40
40
},
41
41
"cookTimeMinutes": {
42
42
"minimum": 0,
43
43
"type": "integer"
44
44
},
45
+
"createdAt": {
46
+
"description": "When the recipe was saved to this kitchen. Distinct from `updatedAt`, which moves every time somebody edits it — a reader sorting a cookbook by what is new wants the first, not the second.",
47
+
"format": "datetime",
48
+
"type": "string"
49
+
},
45
50
"description": {
46
51
"type": "string"
47
52
},
48
53
"id": {
49
54
"description": "Stable identifier for this recipe",
50
55
"type": "string"
51
56
},
52
57
"imageUrl": {
53
58
"description": "An absolute URL to a photograph, already resolved — whether the recipe is private (object storage) or published (a PDS blob on a CDN). Absent when the recipe has no image.",
54
59
"format": "uri",
55
60
"type": "string"
56
61
},
57
62
"missingCount": {
58
63
"description": "How many ingredients are not in the house. 0 means everything is in.",
59
64
"minimum": 0,
60
65
"type": "integer"
61
66
},
62
67
"name": {
63
68
"type": "string"
64
69
},
65
70
"prepTimeMinutes": {
66
71
"minimum": 0,
67
72
"type": "integer"
68
73
},
69
74
"servings": {
70
75
"description": "How many the recipe makes. A number; halves are real, so not an integer.",
71
76
"type": "unknown"
72
77
},
73
78
"tags": {
74
79
"items": {
75
80
"ref": "#tagRef",
76
81
"type": "ref"
77
82
},
78
83
"type": "array"
79
84
},
80
85
"updatedAt": {
81
86
"format": "datetime",
82
87
"type": "string"
83
88
},
84
89
"url": {
85
90
"description": "Where to open this recipe in kich",
86
91
"format": "uri",
87
92
"type": "string"
88
93
}
89
94
},
90
95
"required": [
91
96
"id",
92
97
"name",
93
98
"servings",
94
99
"completenessPercent",
95
100
"url"
96
101
],
97
102
"type": "object"
98
103
},
99
104
"tagRef": {
100
105
"description": "A tag, by id and display name.",
101
106
"properties": {
102
107
"id": {
103
108
"type": "string"
104
109
},
105
110
"name": {
106
111
"type": "string"
107
112
}
108
113
},
109
114
"required": [
110
115
"id",
111
116
"name"
112
117
],
113
118
"type": "object"
114
119
}
115
120
},
116
121
"description": "Shared definitions for the recipe namespace.",
117
122
"id": "io.kich.recipe.defs",
118
123
"lexicon": 1
119
124
}