space.dailygame.profile
Schema Diff
+58 -0
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 11 non-breaking changes.
Breaking Changes (1)
- ConstraintAdded ConstraintAdded { vertex_id: "space.dailygame.profile#badge.id", sort: "maxLength", value: "64" }
Non-Breaking Changes (11)
- AddedVertex AddedVertex { vertex_id: "space.dailygame.profile#badge" }
- AddedVertex AddedVertex { vertex_id: "space.dailygame.profile#badge.category" }
- AddedVertex AddedVertex { vertex_id: "space.dailygame.profile#badge.earnedAt" }
- AddedVertex AddedVertex { vertex_id: "space.dailygame.profile#badge.id" }
- AddedVertex AddedVertex { vertex_id: "space.dailygame.profile:body.badges" }
- AddedVertex AddedVertex { vertex_id: "space.dailygame.profile:body.badges:items" }
- AddedEdge AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.category", kind: "prop", name: Some("category") }
- AddedEdge AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.earnedAt", kind: "prop", name: Some("earnedAt") }
- AddedEdge AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.id", kind: "prop", name: Some("id") }
- AddedEdge AddedEdge { src: "space.dailygame.profile:body", tgt: "space.dailygame.profile:body.badges", kind: "prop", name: Some("badges") }
- AddedEdge AddedEdge { src: "space.dailygame.profile:body.badges", tgt: "space.dailygame.profile:body.badges:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "space.dailygame.profile#badge" }AddedVertex { vertex_id: "space.dailygame.profile#badge.category" }AddedVertex { vertex_id: "space.dailygame.profile#badge.earnedAt" }AddedVertex { vertex_id: "space.dailygame.profile#badge.id" }AddedVertex { vertex_id: "space.dailygame.profile:body.badges" }AddedVertex { vertex_id: "space.dailygame.profile:body.badges:items" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "space.dailygame.profile#badge.id", sort: "maxLength", value: "64" }
Additional Notes
- Non-breaking: AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.category", kind: "prop", name: Some("category") }
- Non-breaking: AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.earnedAt", kind: "prop", name: Some("earnedAt") }
- Non-breaking: AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.id", kind: "prop", name: Some("id") }
- Non-breaking: AddedEdge { src: "space.dailygame.profile:body", tgt: "space.dailygame.profile:body.badges", kind: "prop", name: Some("badges") }
- Non-breaking: AddedEdge { src: "space.dailygame.profile:body.badges", tgt: "space.dailygame.profile:body.badges:items", kind: "items", name: None }
1
1
{
2
2
"id": "space.dailygame.profile",
3
3
"defs": {
4
4
"main": {
5
5
"key": "literal:self",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"createdAt"
11
11
],
12
12
"properties": {
13
13
"games": {
14
14
"type": "array",
15
15
"items": {
16
16
"type": "string",
17
17
"maxLength": 64
18
18
},
19
19
"maxLength": 256,
20
20
"description": "Game ids from the app catalog that the user plays."
21
21
},
22
+
"badges": {
23
+
"type": "array",
24
+
"items": {
25
+
"ref": "#badge",
26
+
"type": "ref"
27
+
},
28
+
"maxLength": 256,
29
+
"description": "Badges the user has earned. Once earned, a badge stays earned."
30
+
},
22
31
"timezone": {
23
32
"type": "string",
24
33
"maxLength": 128,
25
34
"description": "IANA timezone name used to compute daily resets for this user."
26
35
},
27
36
"createdAt": {
28
37
"type": "string",
29
38
"format": "datetime",
30
39
"description": "When this profile record was first created."
31
40
},
32
41
"favorites": {
33
42
"type": "array",
34
43
"items": {
35
44
"type": "string",
36
45
"maxLength": 64
37
46
},
38
47
"maxLength": 256,
39
48
"description": "Game ids that the user has favorited. Shown in a dedicated group on the home page."
40
49
},
41
50
"displayName": {
42
51
"type": "string",
43
52
"maxLength": 640,
44
53
"description": "Optional override of the user's Bluesky display name for this app.",
45
54
"maxGraphemes": 64
46
55
},
47
56
"displayOrder": {
48
57
"type": "array",
49
58
"items": {
50
59
"type": "string",
51
60
"maxLength": 64
52
61
},
53
62
"maxLength": 256,
54
63
"description": "Optional user-preferred ordering of game ids."
55
64
}
56
65
}
57
66
},
58
67
"description": "A user's daily-games profile. Singleton per repo (rkey = 'self')."
68
+
},
69
+
"badge": {
70
+
"type": "object",
71
+
"required": [
72
+
"id",
73
+
"earnedAt"
74
+
],
75
+
"properties": {
76
+
"id": {
77
+
"type": "string",
78
+
"maxLength": 64,
79
+
"description": "Badge id. Known values cover the app's published badge catalog; unknown values are accepted for forward compatibility.",
80
+
"knownValues": [
81
+
"streak-10",
82
+
"streak-25",
83
+
"streak-50",
84
+
"streak-100",
85
+
"streak-250",
86
+
"streak-365",
87
+
"games-10",
88
+
"games-15",
89
+
"games-20",
90
+
"games-30",
91
+
"games-50",
92
+
"5x5",
93
+
"10x10",
94
+
"category-expert-word",
95
+
"category-expert-logic",
96
+
"category-expert-geography",
97
+
"category-expert-trivia"
98
+
]
99
+
},
100
+
"category": {
101
+
"type": "string",
102
+
"description": "Grouping used by the app UI.",
103
+
"knownValues": [
104
+
"streak",
105
+
"variety",
106
+
"breadth",
107
+
"category-expert"
108
+
]
109
+
},
110
+
"earnedAt": {
111
+
"type": "string",
112
+
"format": "datetime",
113
+
"description": "When the badge was first earned (date of earliest play that satisfied the criteria)."
114
+
}
115
+
},
116
+
"description": "A user accomplishment. `id` is a stable identifier from the app's badge catalog; `earnedAt` is the date the user first met the criteria."
59
117
}
60
118
},
61
119
"$type": "com.atproto.lexicon.schema",
62
120
"lexicon": 1
63
121
}