app.thedistance.activity
Schema Diff
+116 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 46 non-breaking changes.
Non-Breaking Changes (46)
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.apparentTemperature" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.avgTemperature" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.cloudCover" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.condition" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.dewpoint" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.humidity" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.maxTemperature" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationIntensity" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationProbability" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationType" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.pressure" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.temperature" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.uvIndex" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.visibility" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.windBearing" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.windGust" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity#weather.windSpeed" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.elevationLoss" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.perceivedExertion" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.totalWork" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.weather" }
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.weightedAvgPower" }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.apparentTemperature", kind: "prop", name: Some("apparentTemperature") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.avgTemperature", kind: "prop", name: Some("avgTemperature") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.cloudCover", kind: "prop", name: Some("cloudCover") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.condition", kind: "prop", name: Some("condition") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.dewpoint", kind: "prop", name: Some("dewpoint") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.humidity", kind: "prop", name: Some("humidity") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.maxTemperature", kind: "prop", name: Some("maxTemperature") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationIntensity", kind: "prop", name: Some("precipitationIntensity") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationProbability", kind: "prop", name: Some("precipitationProbability") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationType", kind: "prop", name: Some("precipitationType") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.pressure", kind: "prop", name: Some("pressure") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.temperature", kind: "prop", name: Some("temperature") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.uvIndex", kind: "prop", name: Some("uvIndex") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.visibility", kind: "prop", name: Some("visibility") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windBearing", kind: "prop", name: Some("windBearing") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windGust", kind: "prop", name: Some("windGust") }
- AddedEdge AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windSpeed", kind: "prop", name: Some("windSpeed") }
- AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.elevationLoss", kind: "prop", name: Some("elevationLoss") }
- AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.perceivedExertion", kind: "prop", name: Some("perceivedExertion") }
- AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.totalWork", kind: "prop", name: Some("totalWork") }
- AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.weather", kind: "prop", name: Some("weather") }
- AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.weightedAvgPower", kind: "prop", name: Some("weightedAvgPower") }
- AddedEdge AddedEdge { src: "app.thedistance.activity:body.weather", tgt: "app.thedistance.activity#weather", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.thedistance.activity#weather" }AddedVertex { vertex_id: "app.thedistance.activity#weather.apparentTemperature" }AddedVertex { vertex_id: "app.thedistance.activity#weather.avgTemperature" }AddedVertex { vertex_id: "app.thedistance.activity#weather.cloudCover" }AddedVertex { vertex_id: "app.thedistance.activity#weather.condition" }AddedVertex { vertex_id: "app.thedistance.activity#weather.dewpoint" }AddedVertex { vertex_id: "app.thedistance.activity#weather.humidity" }AddedVertex { vertex_id: "app.thedistance.activity#weather.maxTemperature" }AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationIntensity" }AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationProbability" }AddedVertex { vertex_id: "app.thedistance.activity#weather.precipitationType" }AddedVertex { vertex_id: "app.thedistance.activity#weather.pressure" }AddedVertex { vertex_id: "app.thedistance.activity#weather.temperature" }AddedVertex { vertex_id: "app.thedistance.activity#weather.uvIndex" }AddedVertex { vertex_id: "app.thedistance.activity#weather.visibility" }AddedVertex { vertex_id: "app.thedistance.activity#weather.windBearing" }AddedVertex { vertex_id: "app.thedistance.activity#weather.windGust" }AddedVertex { vertex_id: "app.thedistance.activity#weather.windSpeed" }AddedVertex { vertex_id: "app.thedistance.activity:body.elevationLoss" }AddedVertex { vertex_id: "app.thedistance.activity:body.perceivedExertion" }AddedVertex { vertex_id: "app.thedistance.activity:body.totalWork" }AddedVertex { vertex_id: "app.thedistance.activity:body.weather" }AddedVertex { vertex_id: "app.thedistance.activity:body.weightedAvgPower" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.apparentTemperature", kind: "prop", name: Some("apparentTemperature") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.avgTemperature", kind: "prop", name: Some("avgTemperature") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.cloudCover", kind: "prop", name: Some("cloudCover") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.condition", kind: "prop", name: Some("condition") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.dewpoint", kind: "prop", name: Some("dewpoint") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.humidity", kind: "prop", name: Some("humidity") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.maxTemperature", kind: "prop", name: Some("maxTemperature") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationIntensity", kind: "prop", name: Some("precipitationIntensity") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationProbability", kind: "prop", name: Some("precipitationProbability") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.precipitationType", kind: "prop", name: Some("precipitationType") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.pressure", kind: "prop", name: Some("pressure") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.temperature", kind: "prop", name: Some("temperature") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.uvIndex", kind: "prop", name: Some("uvIndex") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.visibility", kind: "prop", name: Some("visibility") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windBearing", kind: "prop", name: Some("windBearing") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windGust", kind: "prop", name: Some("windGust") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity#weather", tgt: "app.thedistance.activity#weather.windSpeed", kind: "prop", name: Some("windSpeed") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.elevationLoss", kind: "prop", name: Some("elevationLoss") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.perceivedExertion", kind: "prop", name: Some("perceivedExertion") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.totalWork", kind: "prop", name: Some("totalWork") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.weather", kind: "prop", name: Some("weather") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.weightedAvgPower", kind: "prop", name: Some("weightedAvgPower") }
- Non-breaking: AddedEdge { src: "app.thedistance.activity:body.weather", tgt: "app.thedistance.activity#weather", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"aspectRatio": {
5
5
"description": "Width and height of the image, used for layout before the image loads.",
6
6
"properties": {
7
7
"height": {
8
8
"minimum": 1,
9
9
"type": "integer"
10
10
},
11
11
"width": {
12
12
"minimum": 1,
13
13
"type": "integer"
14
14
}
15
15
},
16
16
"required": [
17
17
"width",
18
18
"height"
19
19
],
20
20
"type": "object"
21
21
},
22
22
"image": {
23
23
"properties": {
24
24
"alt": {
25
25
"description": "Alt text for the image.",
26
26
"maxLength": 3000,
27
27
"type": "string"
28
28
},
29
29
"aspectRatio": {
30
30
"ref": "#aspectRatio",
31
31
"type": "ref"
32
32
},
33
33
"image": {
34
34
"accept": [
35
35
"image/jpeg",
36
36
"image/png",
37
37
"image/webp"
38
38
],
39
39
"maxSize": 10000000,
40
40
"type": "blob"
41
41
}
42
42
},
43
43
"required": [
44
44
"image"
45
45
],
46
46
"type": "object"
47
47
},
48
48
"main": {
49
49
"description": "A recorded physical activity such as a bike ride.",
50
50
"key": "tid",
51
51
"record": {
52
52
"properties": {
53
53
"avgCadence": {
54
54
"description": "Average cadence in revolutions per minute.",
55
55
"minimum": 0,
56
56
"type": "integer"
57
57
},
58
58
"avgHeartRate": {
59
59
"description": "Average heart rate in beats per minute.",
60
60
"minimum": 0,
61
61
"type": "integer"
62
62
},
63
63
"avgPower": {
64
64
"description": "Average power output in watts.",
65
65
"minimum": 0,
66
66
"type": "integer"
67
67
},
68
68
"avgSpeed": {
69
69
"description": "Average speed in meters per second. String-encoded decimal number.",
70
70
"maxLength": 64,
71
71
"type": "string"
72
72
},
73
73
"calories": {
74
74
"description": "Estimated calories burned.",
75
75
"minimum": 0,
76
76
"type": "integer"
77
77
},
78
78
"createdAt": {
79
79
"description": "Timestamp of when this record was created.",
80
80
"format": "datetime",
81
81
"type": "string"
82
82
},
83
83
"description": {
84
84
"description": "User-provided description of the activity.",
85
85
"maxLength": 3000,
86
86
"type": "string"
87
87
},
88
88
"device": {
89
89
"description": "Name of the device that recorded the activity.",
90
90
"maxLength": 300,
91
91
"type": "string"
92
92
},
93
93
"distance": {
94
94
"description": "Total distance in meters. String-encoded decimal number, e.g. '51214.6'.",
95
95
"maxLength": 64,
96
96
"type": "string"
97
97
},
98
98
"elapsedTime": {
99
99
"description": "Total elapsed time in seconds, including stopped time.",
100
100
"minimum": 0,
101
101
"type": "integer"
102
102
},
103
103
"elevationGain": {
104
104
"description": "Total elevation gain in meters. String-encoded decimal number.",
105
105
"maxLength": 64,
106
106
"type": "string"
107
107
},
108
+
"elevationLoss": {
109
+
"description": "Total elevation loss in meters. String-encoded decimal number.",
110
+
"maxLength": 64,
111
+
"type": "string"
112
+
},
108
113
"images": {
109
114
"description": "Photos from the activity.",
110
115
"items": {
111
116
"ref": "#image",
112
117
"type": "ref"
113
118
},
114
119
"maxLength": 8,
115
120
"type": "array"
116
121
},
117
122
"maxCadence": {
118
123
"description": "Maximum cadence in revolutions per minute.",
119
124
"minimum": 0,
120
125
"type": "integer"
121
126
},
122
127
"maxHeartRate": {
123
128
"description": "Maximum heart rate in beats per minute.",
124
129
"minimum": 0,
125
130
"type": "integer"
126
131
},
127
132
"maxPower": {
128
133
"description": "Maximum power output in watts.",
129
134
"minimum": 0,
130
135
"type": "integer"
131
136
},
132
137
"maxSpeed": {
133
138
"description": "Maximum speed in meters per second. String-encoded decimal number.",
134
139
"maxLength": 64,
135
140
"type": "string"
136
141
},
137
142
"movingTime": {
138
143
"description": "Time spent in motion in seconds.",
139
144
"minimum": 0,
140
145
"type": "integer"
141
146
},
147
+
"perceivedExertion": {
148
+
"description": "Rate of perceived exertion (RPE), typically 1-10.",
149
+
"minimum": 0,
150
+
"type": "integer"
151
+
},
142
152
"polyline": {
143
153
"description": "Encoded polyline string representing a simplified, privacy-trimmed route for map display. Uses Google's encoded polyline algorithm format. Ingestion services should simplify polylines to fit within the 20,000 byte limit. This limit may be revisited if it proves insufficient.",
144
154
"maxLength": 20000,
145
155
"type": "string"
146
156
},
147
157
"source": {
148
158
"description": "Where the activity data was imported from.",
149
159
"knownValues": [
150
160
"garmin",
151
161
"strava",
152
162
"wahoo",
153
163
"manual",
154
164
"fit-file",
155
165
"gpx-file"
156
166
],
157
167
"maxLength": 128,
158
168
"type": "string"
159
169
},
160
170
"sourceId": {
161
171
"description": "Identifier for this activity in the source system, e.g. a Strava activity ID.",
162
172
"maxLength": 256,
163
173
"type": "string"
164
174
},
165
175
"sportType": {
166
176
"description": "The type of activity.",
167
177
"knownValues": [
168
178
"ride"
169
179
],
170
180
"maxLength": 128,
171
181
"type": "string"
172
182
},
173
183
"startedAt": {
174
184
"description": "When the activity started.",
175
185
"format": "datetime",
176
186
"type": "string"
177
187
},
178
188
"title": {
179
189
"description": "User-provided name for the activity.",
180
190
"maxLength": 300,
181
191
"type": "string"
192
+
},
193
+
"totalWork": {
194
+
"description": "Total mechanical work in kilojoules.",
195
+
"minimum": 0,
196
+
"type": "integer"
197
+
},
198
+
"weather": {
199
+
"description": "Weather conditions during the activity.",
200
+
"ref": "#weather",
201
+
"type": "ref"
202
+
},
203
+
"weightedAvgPower": {
204
+
"description": "Normalized/weighted average power in watts.",
205
+
"minimum": 0,
206
+
"type": "integer"
182
207
}
183
208
},
184
209
"required": [
185
210
"sportType",
186
211
"startedAt",
187
212
"elapsedTime",
188
213
"movingTime",
189
214
"distance",
190
215
"createdAt"
191
216
],
192
217
"type": "object"
193
218
},
194
219
"type": "record"
220
+
},
221
+
"weather": {
222
+
"description": "Weather conditions observed during the activity.",
223
+
"properties": {
224
+
"apparentTemperature": {
225
+
"description": "Feels-like temperature in degrees Celsius. String-encoded decimal.",
226
+
"maxLength": 64,
227
+
"type": "string"
228
+
},
229
+
"avgTemperature": {
230
+
"description": "Average device-measured temperature in degrees Celsius. String-encoded decimal.",
231
+
"maxLength": 64,
232
+
"type": "string"
233
+
},
234
+
"cloudCover": {
235
+
"description": "Cloud cover as a percentage. String-encoded decimal.",
236
+
"maxLength": 64,
237
+
"type": "string"
238
+
},
239
+
"condition": {
240
+
"description": "General weather condition, e.g. 'Clear', 'Cloudy', 'Rain'.",
241
+
"maxLength": 128,
242
+
"type": "string"
243
+
},
244
+
"dewpoint": {
245
+
"description": "Dewpoint in degrees Celsius. String-encoded decimal.",
246
+
"maxLength": 64,
247
+
"type": "string"
248
+
},
249
+
"humidity": {
250
+
"description": "Relative humidity as a percentage. String-encoded decimal.",
251
+
"maxLength": 64,
252
+
"type": "string"
253
+
},
254
+
"maxTemperature": {
255
+
"description": "Maximum device-measured temperature in degrees Celsius. String-encoded decimal.",
256
+
"maxLength": 64,
257
+
"type": "string"
258
+
},
259
+
"precipitationIntensity": {
260
+
"description": "Precipitation intensity in mm/hr. String-encoded decimal.",
261
+
"maxLength": 64,
262
+
"type": "string"
263
+
},
264
+
"precipitationProbability": {
265
+
"description": "Precipitation probability as a percentage. String-encoded decimal.",
266
+
"maxLength": 64,
267
+
"type": "string"
268
+
},
269
+
"precipitationType": {
270
+
"description": "Type of precipitation, e.g. 'rain', 'snow', 'sleet'.",
271
+
"maxLength": 64,
272
+
"type": "string"
273
+
},
274
+
"pressure": {
275
+
"description": "Atmospheric pressure in hPa/mbar. String-encoded decimal.",
276
+
"maxLength": 64,
277
+
"type": "string"
278
+
},
279
+
"temperature": {
280
+
"description": "Air temperature in degrees Celsius. String-encoded decimal.",
281
+
"maxLength": 64,
282
+
"type": "string"
283
+
},
284
+
"uvIndex": {
285
+
"description": "UV index. String-encoded decimal.",
286
+
"maxLength": 64,
287
+
"type": "string"
288
+
},
289
+
"visibility": {
290
+
"description": "Visibility distance in kilometers. String-encoded decimal.",
291
+
"maxLength": 64,
292
+
"type": "string"
293
+
},
294
+
"windBearing": {
295
+
"description": "Wind direction in degrees (0-360). String-encoded decimal.",
296
+
"maxLength": 64,
297
+
"type": "string"
298
+
},
299
+
"windGust": {
300
+
"description": "Wind gust speed in meters per second. String-encoded decimal.",
301
+
"maxLength": 64,
302
+
"type": "string"
303
+
},
304
+
"windSpeed": {
305
+
"description": "Wind speed in meters per second. String-encoded decimal.",
306
+
"maxLength": 64,
307
+
"type": "string"
308
+
}
309
+
},
310
+
"type": "object"
195
311
}
196
312
},
197
313
"id": "app.thedistance.activity",
198
314
"lexicon": 1
199
315
}