pet.trezy.getPets
Schema Diff
+78 -8
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 23 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "pet.trezy.getPets#hydratedPet", src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.uri", kind: "prop", name: Some("uri") }
- ConstraintTightened ConstraintTightened { vertex_id: "pet.trezy.getPets:output.error", sort: "knownValues", old_value: "[\"bad-did\",\"unknown-state\",\"bad-cursor\",\"unavailable\"]", new_value: "[\"bad-did\",\"unknown-state\",\"unknown-sort\",\"unknown-direction\",\"bad-cursor\",\"unavailable\"]" }
Non-Breaking Changes (23)
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.active" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.createdAt" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.name" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.price" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.retired" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.species" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.tier" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.totalInteractions" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.uri" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets:output.records" }
- AddedVertex AddedVertex { vertex_id: "pet.trezy.getPets:output.records:items" }
- AddedEdge AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.active", kind: "prop", name: Some("active") }
- AddedEdge AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.createdAt", kind: "prop", name: Some("createdAt") }
- AddedEdge AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.name", kind: "prop", name: Some("name") }
- AddedEdge AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.price", kind: "prop", name: Some("price") }
- AddedEdge AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.retired", kind: "prop", name: Some("retired") }
- AddedEdge AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.species", kind: "prop", name: Some("species") }
- AddedEdge AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.tier", kind: "prop", name: Some("tier") }
- AddedEdge AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.totalInteractions", kind: "prop", name: Some("totalInteractions") }
- AddedEdge AddedEdge { src: "pet.trezy.getPets:output", tgt: "pet.trezy.getPets:output.records", kind: "prop", name: Some("records") }
- AddedEdge AddedEdge { src: "pet.trezy.getPets:output.records", tgt: "pet.trezy.getPets:output.records:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "pet.trezy.getPets:output.records:items", tgt: "pet.trezy.getPets#hydratedPet", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet" }AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.active" }AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.createdAt" }AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.name" }AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.price" }AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.retired" }AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.species" }AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.tier" }AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.totalInteractions" }AddedVertex { vertex_id: "pet.trezy.getPets#hydratedPet.uri" }AddedVertex { vertex_id: "pet.trezy.getPets:output.records" }AddedVertex { vertex_id: "pet.trezy.getPets:output.records:items" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "pet.trezy.getPets:output.error", sort: "knownValues", old_value: "[\"bad-did\",\"unknown-state\",\"bad-cursor\",\"unavailable\"]", new_value: "[\"bad-did\",\"unknown-state\",\"unknown-sort\",\"unknown-direction\",\"bad-cursor\",\"unavailable\"]" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "pet.trezy.getPets#hydratedPet", src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.uri", kind: "prop", name: Some("uri") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.active", kind: "prop", name: Some("active") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.createdAt", kind: "prop", name: Some("createdAt") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.name", kind: "prop", name: Some("name") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.price", kind: "prop", name: Some("price") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.retired", kind: "prop", name: Some("retired") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.species", kind: "prop", name: Some("species") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.tier", kind: "prop", name: Some("tier") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets#hydratedPet", tgt: "pet.trezy.getPets#hydratedPet.totalInteractions", kind: "prop", name: Some("totalInteractions") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets:output", tgt: "pet.trezy.getPets:output.records", kind: "prop", name: Some("records") }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets:output.records", tgt: "pet.trezy.getPets:output.records:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "pet.trezy.getPets:output.records:items", tgt: "pet.trezy.getPets#hydratedPet", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"hydratedPet": {
5
+
"properties": {
6
+
"active": {
7
+
"type": "boolean"
8
+
},
9
+
"createdAt": {
10
+
"format": "datetime",
11
+
"type": "string"
12
+
},
13
+
"name": {
14
+
"type": "string"
15
+
},
16
+
"price": {
17
+
"type": "integer"
18
+
},
19
+
"retired": {
20
+
"type": "boolean"
21
+
},
22
+
"species": {
23
+
"type": "string"
24
+
},
25
+
"tier": {
26
+
"type": "string"
27
+
},
28
+
"totalInteractions": {
29
+
"type": "integer"
30
+
},
31
+
"uri": {
32
+
"format": "at-uri",
33
+
"type": "string"
34
+
}
35
+
},
36
+
"required": [
37
+
"uri"
38
+
],
39
+
"type": "object"
40
+
},
4
41
"main": {
5
-
"description": "The at-uris of a player's pets, newest first, optionally filtered by state. Returns IDENTIFIERS ONLY — hydrate each one with pet.trezy.getPet?aturi=. Splitting it that way keeps the list cheap for a player who has collected a great many pets, where sending every record would be most of the payload and almost none of it drawn. The stage needs at most activePetCap of them, so it pays one list call and a handful of hydrations.",
42
+
"description": "The at-uris of a player's pets, newest first, optionally filtered by state. Returns IDs only by default.",
6
43
"output": {
7
44
"encoding": "application/json",
8
45
"schema": {
9
46
"properties": {
10
47
"cursor": {
11
-
"description": "Present only when another page may exist. ABSENT MEANS THE END, so a client that keeps scrolling until the cursor is gone terminates; a client that stops when `pets` is empty also terminates, one call later.",
48
+
"description": "Absent if there are no more results.",
12
49
"type": "string"
13
50
},
14
51
"error": {
15
-
"description": "Present instead of the list. A stable machine code. `unavailable` means the ledger could not be READ — which is emphatically not the same as owning no pets, and must never be rendered as an empty collection. Returning [] there would tell a player their pets are gone.",
52
+
"description": "The type of error encountered.",
16
53
"knownValues": [
17
54
"bad-did",
18
55
"unknown-state",
56
+
"unknown-sort",
57
+
"unknown-direction",
19
58
"bad-cursor",
20
59
"unavailable"
21
60
],
22
61
"type": "string"
23
62
},
24
63
"message": {
25
64
"type": "string"
26
65
},
27
66
"pets": {
28
-
"description": "At-uris, newest first. Ordered by createdAt then uri so the order is total — two pets bought in the same instant would otherwise be free to swap places between pages, which is how a keyset cursor loses or repeats a row.",
67
+
"description": "Sorted list of pet AT URIs.",
29
68
"items": {
30
69
"format": "at-uri",
31
70
"type": "string"
32
71
},
33
72
"type": "array"
73
+
},
74
+
"records": {
75
+
"description": "Pet records (only present if `hydrate` is true).",
76
+
"items": {
77
+
"ref": "#hydratedPet",
78
+
"type": "ref"
79
+
},
80
+
"type": "array"
34
81
}
35
82
},
36
83
"required": [],
37
84
"type": "object"
38
85
}
39
86
},
40
87
"parameters": {
41
88
"properties": {
42
89
"cursor": {
43
-
"description": "From a previous response. Keyset, not an offset: it names the last row seen, so a pet bought mid-scroll cannot shift the page under the reader or make one disappear.",
44
90
"type": "string"
45
91
},
46
92
"did": {
47
-
"description": "Whose pets. Public, like getPet and getStats — a player's collection is visible on their profile page.",
93
+
"description": "Ther owner for whom to retrieve pets.",
48
94
"format": "did",
49
95
"type": "string"
50
96
},
97
+
"direction": {
98
+
"default": "desc",
99
+
"description": "Whether to sort ascending or descending.",
100
+
"knownValues": [
101
+
"asc",
102
+
"desc"
103
+
],
104
+
"type": "string"
105
+
},
106
+
"hydrate": {
107
+
"default": false,
108
+
"description": "Whether to return the pet's full record.",
109
+
"type": "boolean"
110
+
},
51
111
"limit": {
52
112
"default": 50,
53
-
"description": "How many at-uris to return.",
54
113
"maximum": 100,
55
114
"minimum": 1,
56
115
"type": "integer"
57
116
},
117
+
"sort": {
118
+
"default": "age",
119
+
"knownValues": [
120
+
"rarity",
121
+
"name",
122
+
"price",
123
+
"age",
124
+
"attention"
125
+
],
126
+
"type": "string"
127
+
},
58
128
"state": {
59
-
"description": "Which states to include. Omitted means all three. Repeat the parameter to combine them: ?state=inactive&state=retired. The three are mutually exclusive — retiring forces a pet inactive, so `retired` and `inactive` never both describe one pet.",
129
+
"description": "Filter on state.",
60
130
"items": {
61
131
"knownValues": [
62
132
"active",
63
133
"inactive",
64
134
"retired"
65
135
],
66
136
"type": "string"
67
137
},
68
138
"type": "array"
69
139
}
70
140
},
71
141
"required": [
72
142
"did"
73
143
],
74
144
"type": "params"
75
145
},
76
146
"type": "query"
77
147
}
78
148
},
79
149
"id": "pet.trezy.getPets",
80
150
"lexicon": 1
81
151
}