app.didpic.notification.defs
Schema Diff
+19 -2
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 6 non-breaking changes.
Breaking Changes (1)
- ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.notification.defs#notificationView.count", sort: "minimum", value: "1" }
Non-Breaking Changes (6)
- AddedVertex AddedVertex { vertex_id: "app.didpic.notification.defs#notificationView.comment" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.notification.defs#notificationView.count" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.notification.defs#notificationView.post" }
- AddedEdge AddedEdge { src: "app.didpic.notification.defs#notificationView", tgt: "app.didpic.notification.defs#notificationView.comment", kind: "prop", name: Some("comment") }
- AddedEdge AddedEdge { src: "app.didpic.notification.defs#notificationView", tgt: "app.didpic.notification.defs#notificationView.count", kind: "prop", name: Some("count") }
- AddedEdge AddedEdge { src: "app.didpic.notification.defs#notificationView", tgt: "app.didpic.notification.defs#notificationView.post", kind: "prop", name: Some("post") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.didpic.notification.defs#notificationView.comment" }AddedVertex { vertex_id: "app.didpic.notification.defs#notificationView.count" }AddedVertex { vertex_id: "app.didpic.notification.defs#notificationView.post" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.notification.defs#notificationView.count", sort: "minimum", value: "1" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.didpic.notification.defs#notificationView", tgt: "app.didpic.notification.defs#notificationView.comment", kind: "prop", name: Some("comment") }
- Non-breaking: AddedEdge { src: "app.didpic.notification.defs#notificationView", tgt: "app.didpic.notification.defs#notificationView.count", kind: "prop", name: Some("count") }
- Non-breaking: AddedEdge { src: "app.didpic.notification.defs#notificationView", tgt: "app.didpic.notification.defs#notificationView.post", kind: "prop", name: Some("post") }
1
1
{
2
2
"id": "app.didpic.notification.defs",
3
3
"defs": {
4
4
"notificationView": {
5
5
"type": "object",
6
6
"required": [
7
7
"id",
8
8
"reason",
9
9
"author",
10
10
"recordUri",
11
11
"recordCid",
12
+
"count",
12
13
"isRead",
13
14
"createdAt",
14
15
"indexedAt"
15
16
],
16
17
"properties": {
17
18
"id": {
18
19
"type": "string",
19
20
"description": "Server-issued opaque identifier for this notification within the recipient's stream."
20
21
},
22
+
"post": {
23
+
"ref": "app.didpic.feed.defs#postView",
24
+
"type": "ref",
25
+
"description": "Server-hydrated thread-root post for any reason involving a post (like / comment / reply). Lets clients render a thumbnail preview inline without an extra fetch."
26
+
},
27
+
"count": {
28
+
"type": "integer",
29
+
"minimum": 1,
30
+
"description": "Number of underlying records collapsed into this notification. Always 1 for comment / reply / follow; for like notifications it counts repeat likes on the same subject (a viral post that gets many likes produces a single row with count incrementing)."
31
+
},
21
32
"author": {
22
33
"ref": "app.didpic.actor.defs#profileBasic",
23
-
"type": "ref"
34
+
"type": "ref",
35
+
"description": "Most recent actor responsible for this notification. For collapsed likes this is the latest liker; the UI typically reads 'author and (count - 1) others ...'."
24
36
},
25
37
"isRead": {
26
38
"type": "boolean",
27
39
"description": "True if this notification's indexedAt is at or before the viewer's stored seenAt boundary."
28
40
},
29
41
"reason": {
30
42
"type": "string",
31
43
"knownValues": [
32
44
"like",
33
45
"comment",
34
46
"reply",
35
47
"follow"
36
48
]
37
49
},
50
+
"comment": {
51
+
"ref": "app.didpic.feed.defs#commentView",
52
+
"type": "ref",
53
+
"description": "Server-hydrated comment for cases where the subject is a comment: reply (the parent comment) and like (when the like targets a comment rather than a post). Lets clients render the snippet text inline."
54
+
},
38
55
"postUri": {
39
56
"type": "string",
40
57
"format": "at-uri",
41
58
"description": "Denormalised thread-root post URI for all post-context reasons (like / comment / reply). Lets clients route directly to the post view without a lookup. Absent for follow notifications."
42
59
},
43
60
"createdAt": {
44
61
"type": "string",
45
62
"format": "datetime"
46
63
},
47
64
"indexedAt": {
48
65
"type": "string",
49
66
"format": "datetime"
50
67
},
51
68
"recordCid": {
52
69
"type": "string",
53
70
"format": "cid"
54
71
},
55
72
"recordUri": {
56
73
"type": "string",
57
74
"format": "at-uri",
58
-
"description": "URI of the underlying interaction record (like, comment, or follow)."
75
+
"description": "URI of the most recent underlying interaction record. For collapsed likes earlier likes are not enumerated."
59
76
},
60
77
"subjectCid": {
61
78
"type": "string",
62
79
"format": "cid"
63
80
},
64
81
"subjectUri": {
65
82
"type": "string",
66
83
"format": "at-uri",
67
84
"description": "URI of the thing the interaction targeted: post for top-level comments and post-likes, comment for comment-likes and replies. Absent for follow notifications."
68
85
}
69
86
}
70
87
}
71
88
},
72
89
"$type": "com.atproto.lexicon.schema",
73
90
"lexicon": 1
74
91
}