at.mapped.post
Schema Diff
+5 -18
Compatibility Analysis
Breaking Changes Detected
8 breaking changes, 2 non-breaking changes.
Breaking Changes (8)
- RemovedVertex RemovedVertex { vertex_id: "at.mapped.post:body.stats" }
- RemovedVertex RemovedVertex { vertex_id: "at.mapped.post:body.stats.distance" }
- RemovedVertex RemovedVertex { vertex_id: "at.mapped.post:body.stats.duration" }
- RemovedVertex RemovedVertex { vertex_id: "at.mapped.post:body.stats.elevation" }
- RemovedEdge RemovedEdge { src: "at.mapped.post:body", tgt: "at.mapped.post:body.stats", kind: "prop", name: Some("stats") }
- RemovedEdge RemovedEdge { src: "at.mapped.post:body.stats", tgt: "at.mapped.post:body.stats.distance", kind: "prop", name: Some("distance") }
- RemovedEdge RemovedEdge { src: "at.mapped.post:body.stats", tgt: "at.mapped.post:body.stats.duration", kind: "prop", name: Some("duration") }
- RemovedEdge RemovedEdge { src: "at.mapped.post:body.stats", tgt: "at.mapped.post:body.stats.elevation", kind: "prop", name: Some("elevation") }
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "at.mapped.post:body.basePost" }
- AddedEdge AddedEdge { src: "at.mapped.post:body", tgt: "at.mapped.post:body.basePost", kind: "prop", name: Some("basePost") }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "at.mapped.post:body.stats" }RemovedVertex { vertex_id: "at.mapped.post:body.stats.distance" }RemovedVertex { vertex_id: "at.mapped.post:body.stats.duration" }RemovedVertex { vertex_id: "at.mapped.post:body.stats.elevation" }
Added Elements
AddedVertex { vertex_id: "at.mapped.post:body.basePost" }
Additional Notes
- Breaking: RemovedEdge { src: "at.mapped.post:body", tgt: "at.mapped.post:body.stats", kind: "prop", name: Some("stats") }
- Breaking: RemovedEdge { src: "at.mapped.post:body.stats", tgt: "at.mapped.post:body.stats.distance", kind: "prop", name: Some("distance") }
- Breaking: RemovedEdge { src: "at.mapped.post:body.stats", tgt: "at.mapped.post:body.stats.duration", kind: "prop", name: Some("duration") }
- Breaking: RemovedEdge { src: "at.mapped.post:body.stats", tgt: "at.mapped.post:body.stats.elevation", kind: "prop", name: Some("elevation") }
- Non-breaking: AddedEdge { src: "at.mapped.post:body", tgt: "at.mapped.post:body.basePost", kind: "prop", name: Some("basePost") }
1
1
{
2
2
"id": "at.mapped.post",
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
"timestamp"
11
11
],
12
12
"properties": {
13
13
"text": {
14
14
"type": "string",
15
15
"maxLength": 500,
16
16
"description": "Caption or description text for the post"
17
17
},
18
-
"stats": {
19
-
"type": "object",
20
-
"properties": {
21
-
"distance": {
22
-
"type": "integer",
23
-
"description": "Distance covered in meters"
24
-
},
25
-
"duration": {
26
-
"type": "integer",
27
-
"description": "Duration of the activity in seconds"
28
-
},
29
-
"elevation": {
30
-
"type": "integer",
31
-
"description": "Elevation gain in meters"
32
-
}
33
-
},
34
-
"description": "Activity statistics (distance, duration, elevation). Only relevant for activity posts"
35
-
},
36
18
"title": {
37
19
"type": "string",
38
20
"maxLength": 100,
39
21
"description": "Optional title for the post (especially useful for travel posts)"
40
22
},
41
23
"trail": {
42
24
"ref": "com.atproto.repo.strongRef",
43
25
"type": "ref",
44
26
"description": "Reference to a trail record with route geometry"
45
27
},
28
+
"basePost": {
29
+
"ref": "com.atproto.repo.strongRef",
30
+
"type": "ref",
31
+
"description": "Reference to another post that this post is based on (e.g. a travel post based on an activity post)"
32
+
},
46
33
"location": {
47
34
"ref": "com.atproto.repo.strongRef",
48
35
"type": "ref",
49
36
"description": "Reference to a location record"
50
37
},
51
38
"timestamp": {
52
39
"type": "string",
53
40
"format": "datetime",
54
41
"description": "When the post was created"
55
42
},
56
43
"activityType": {
57
44
"ref": "com.atproto.repo.strongRef",
58
45
"type": "ref",
59
46
"description": "Reference to an activityType record. If present, this is an activity post; if absent, it's a travel post"
60
47
}
61
48
}
62
49
},
63
50
"description": "A post representing either an activity or a travel experience"
64
51
}
65
52
},
66
53
"$type": "com.atproto.lexicon.schema",
67
54
"lexicon": 1
68
55
}