space.dailygame.profile
Schema Diff
+67 -0
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 15 non-breaking changes.
Breaking Changes (2)
- ConstraintAdded ConstraintAdded { vertex_id: "space.dailygame.profile:body.favorites:items", sort: "maxLength", value: "64" }
- ConstraintAdded ConstraintAdded { vertex_id: "space.dailygame.profile#badge.id", sort: "maxLength", value: "64" }
Non-Breaking Changes (15)
- 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" }
- AddedVertex AddedVertex { vertex_id: "space.dailygame.profile:body.favorites" }
- AddedVertex AddedVertex { vertex_id: "space.dailygame.profile:body.favorites: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", tgt: "space.dailygame.profile:body.favorites", kind: "prop", name: Some("favorites") }
- AddedEdge AddedEdge { src: "space.dailygame.profile:body.badges", tgt: "space.dailygame.profile:body.badges:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "space.dailygame.profile:body.favorites", tgt: "space.dailygame.profile:body.favorites: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" }AddedVertex { vertex_id: "space.dailygame.profile:body.favorites" }AddedVertex { vertex_id: "space.dailygame.profile:body.favorites:items" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "space.dailygame.profile:body.favorites:items", sort: "maxLength", value: "64" }
- 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", tgt: "space.dailygame.profile:body.favorites", kind: "prop", name: Some("favorites") }
- Non-breaking: AddedEdge { src: "space.dailygame.profile:body.badges", tgt: "space.dailygame.profile:body.badges:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "space.dailygame.profile:body.favorites", tgt: "space.dailygame.profile:body.favorites: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
},
41
+
"favorites": {
42
+
"type": "array",
43
+
"items": {
44
+
"type": "string",
45
+
"maxLength": 64
46
+
},
47
+
"maxLength": 256,
48
+
"description": "Game ids that the user has favorited. Shown in a dedicated group on the home page."
49
+
},
32
50
"displayName": {
33
51
"type": "string",
34
52
"maxLength": 640,
35
53
"description": "Optional override of the user's Bluesky display name for this app.",
36
54
"maxGraphemes": 64
37
55
},
38
56
"displayOrder": {
39
57
"type": "array",
40
58
"items": {
41
59
"type": "string",
42
60
"maxLength": 64
43
61
},
44
62
"maxLength": 256,
45
63
"description": "Optional user-preferred ordering of game ids."
46
64
}
47
65
}
48
66
},
49
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."
50
117
}
51
118
},
52
119
"$type": "com.atproto.lexicon.schema",
53
120
"lexicon": 1
54
121
}