app.thedistance.activity
Schema Diff
+5 -0
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 2 non-breaking changes.
Breaking Changes (1)
- ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.sourceId", sort: "maxLength", value: "256" }
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "app.thedistance.activity:body.sourceId" }
- AddedEdge AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.sourceId", kind: "prop", name: Some("sourceId") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.thedistance.activity:body.sourceId" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "app.thedistance.activity:body.sourceId", sort: "maxLength", value: "256" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.thedistance.activity:body", tgt: "app.thedistance.activity:body.sourceId", kind: "prop", name: Some("sourceId") }
1
1
{
2
2
"id": "app.thedistance.activity",
3
3
"defs": {
4
4
"main": {
5
5
"key": "tid",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"sportType",
11
11
"startedAt",
12
12
"elapsedTime",
13
13
"movingTime",
14
14
"distance",
15
15
"createdAt"
16
16
],
17
17
"properties": {
18
18
"title": {
19
19
"type": "string",
20
20
"maxLength": 300,
21
21
"description": "User-provided name for the activity."
22
22
},
23
23
"device": {
24
24
"type": "string",
25
25
"maxLength": 300,
26
26
"description": "Name of the device that recorded the activity."
27
27
},
28
28
"images": {
29
29
"type": "array",
30
30
"items": {
31
31
"ref": "#image",
32
32
"type": "ref"
33
33
},
34
34
"maxLength": 8,
35
35
"description": "Photos from the activity."
36
36
},
37
37
"source": {
38
38
"type": "string",
39
39
"maxLength": 128,
40
40
"description": "Where the activity data was imported from.",
41
41
"knownValues": [
42
42
"garmin",
43
43
"strava",
44
44
"wahoo",
45
45
"manual",
46
46
"fit-file",
47
47
"gpx-file"
48
48
]
49
49
},
50
50
"avgPower": {
51
51
"type": "integer",
52
52
"minimum": 0,
53
53
"description": "Average power output in watts."
54
54
},
55
55
"avgSpeed": {
56
56
"type": "string",
57
57
"maxLength": 64,
58
58
"description": "Average speed in meters per second. String-encoded decimal number."
59
59
},
60
60
"calories": {
61
61
"type": "integer",
62
62
"minimum": 0,
63
63
"description": "Estimated calories burned."
64
64
},
65
65
"distance": {
66
66
"type": "string",
67
67
"maxLength": 64,
68
68
"description": "Total distance in meters. String-encoded decimal number, e.g. '51214.6'."
69
69
},
70
70
"maxPower": {
71
71
"type": "integer",
72
72
"minimum": 0,
73
73
"description": "Maximum power output in watts."
74
74
},
75
75
"maxSpeed": {
76
76
"type": "string",
77
77
"maxLength": 64,
78
78
"description": "Maximum speed in meters per second. String-encoded decimal number."
79
79
},
80
80
"polyline": {
81
81
"type": "string",
82
82
"maxLength": 20000,
83
83
"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."
84
84
},
85
+
"sourceId": {
86
+
"type": "string",
87
+
"maxLength": 256,
88
+
"description": "Identifier for this activity in the source system, e.g. a Strava activity ID."
89
+
},
85
90
"createdAt": {
86
91
"type": "string",
87
92
"format": "datetime",
88
93
"description": "Timestamp of when this record was created."
89
94
},
90
95
"sportType": {
91
96
"type": "string",
92
97
"maxLength": 128,
93
98
"description": "The type of activity.",
94
99
"knownValues": [
95
100
"ride"
96
101
]
97
102
},
98
103
"startedAt": {
99
104
"type": "string",
100
105
"format": "datetime",
101
106
"description": "When the activity started."
102
107
},
103
108
"avgCadence": {
104
109
"type": "integer",
105
110
"minimum": 0,
106
111
"description": "Average cadence in revolutions per minute."
107
112
},
108
113
"maxCadence": {
109
114
"type": "integer",
110
115
"minimum": 0,
111
116
"description": "Maximum cadence in revolutions per minute."
112
117
},
113
118
"movingTime": {
114
119
"type": "integer",
115
120
"minimum": 0,
116
121
"description": "Time spent in motion in seconds."
117
122
},
118
123
"description": {
119
124
"type": "string",
120
125
"maxLength": 3000,
121
126
"description": "User-provided description of the activity."
122
127
},
123
128
"elapsedTime": {
124
129
"type": "integer",
125
130
"minimum": 0,
126
131
"description": "Total elapsed time in seconds, including stopped time."
127
132
},
128
133
"avgHeartRate": {
129
134
"type": "integer",
130
135
"minimum": 0,
131
136
"description": "Average heart rate in beats per minute."
132
137
},
133
138
"maxHeartRate": {
134
139
"type": "integer",
135
140
"minimum": 0,
136
141
"description": "Maximum heart rate in beats per minute."
137
142
},
138
143
"elevationGain": {
139
144
"type": "string",
140
145
"maxLength": 64,
141
146
"description": "Total elevation gain in meters. String-encoded decimal number."
142
147
}
143
148
}
144
149
},
145
150
"description": "A recorded physical activity such as a bike ride."
146
151
},
147
152
"image": {
148
153
"type": "object",
149
154
"required": [
150
155
"image"
151
156
],
152
157
"properties": {
153
158
"alt": {
154
159
"type": "string",
155
160
"maxLength": 3000,
156
161
"description": "Alt text for the image."
157
162
},
158
163
"image": {
159
164
"type": "blob",
160
165
"accept": [
161
166
"image/jpeg",
162
167
"image/png",
163
168
"image/webp"
164
169
],
165
170
"maxSize": 10000000
166
171
},
167
172
"aspectRatio": {
168
173
"ref": "#aspectRatio",
169
174
"type": "ref"
170
175
}
171
176
}
172
177
},
173
178
"aspectRatio": {
174
179
"type": "object",
175
180
"required": [
176
181
"width",
177
182
"height"
178
183
],
179
184
"properties": {
180
185
"width": {
181
186
"type": "integer",
182
187
"minimum": 1
183
188
},
184
189
"height": {
185
190
"type": "integer",
186
191
"minimum": 1
187
192
}
188
193
},
189
194
"description": "Width and height of the image, used for layout before the image loads."
190
195
}
191
196
},
192
197
"$type": "com.atproto.lexicon.schema",
193
198
"lexicon": 1
194
199
}