dev.tsunagite.score
Schema Diff
+11 -3
Compatibility Analysis
Backward Compatible
Backward compatible. 4 non-breaking changes.
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "dev.tsunagite.score:body.totalEarly" }
- AddedVertex AddedVertex { vertex_id: "dev.tsunagite.score:body.totalLate" }
- AddedEdge AddedEdge { src: "dev.tsunagite.score:body", tgt: "dev.tsunagite.score:body.totalEarly", kind: "prop", name: Some("totalEarly") }
- AddedEdge AddedEdge { src: "dev.tsunagite.score:body", tgt: "dev.tsunagite.score:body.totalLate", kind: "prop", name: Some("totalLate") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "dev.tsunagite.score:body.totalEarly" }AddedVertex { vertex_id: "dev.tsunagite.score:body.totalLate" }
Additional Notes
- Non-breaking: AddedEdge { src: "dev.tsunagite.score:body", tgt: "dev.tsunagite.score:body.totalEarly", kind: "prop", name: Some("totalEarly") }
- Non-breaking: AddedEdge { src: "dev.tsunagite.score:body", tgt: "dev.tsunagite.score:body.totalLate", kind: "prop", name: Some("totalLate") }
1
1
{
2
2
"id": "dev.tsunagite.score",
3
3
"defs": {
4
4
"enum": {
5
5
"type": "object",
6
6
"required": [
7
7
"value"
8
8
],
9
9
"properties": {
10
10
"value": {
11
11
"type": "string",
12
12
"format": "record-key",
13
13
"description": "The internal ID of the value, matching with an allowed enum value defined by the game record."
14
14
}
15
15
},
16
16
"description": "An indexable named score component."
17
17
},
18
18
"main": {
19
19
"key": "tid",
20
20
"type": "record",
21
21
"record": {
22
22
"type": "object",
23
23
"required": [
24
24
"game",
25
25
"song",
26
26
"chart",
27
27
"judgments",
28
28
"scoreComponents"
29
29
],
30
30
"properties": {
31
31
"game": {
32
32
"type": "string",
33
33
"format": "at-uri",
34
34
"description": "The game this score was earned in. URI must point to a record of type `dev.tsunagite.game`."
35
35
},
36
36
"mode": {
37
37
"type": "string",
38
38
"description": "The game mode this score was earned on. Must be a mode defined by the game record if present."
39
39
},
40
40
"song": {
41
41
"type": "string",
42
42
"format": "at-uri",
43
43
"description": "The song this score was earned on. URI must point to a record of type `dev.tsunagite.song`."
44
44
},
45
45
"chart": {
46
46
"type": "string",
47
47
"format": "at-uri",
48
48
"description": "The chart this score was earned on. URI must point to a record of type `dev.tsunagite.chart`."
49
49
},
50
50
"version": {
51
51
"type": "bytes",
52
52
"maxLength": 16,
53
53
"minLength": 16,
54
54
"description": "The md5 hash of the chart version this score was earned on. Optional if you will not perform leaderboard resets upon any chart changes."
55
55
},
56
56
"scoredAt": {
57
57
"type": "string",
58
58
"format": "datetime",
59
59
"description": "The time this score was originally earned."
60
60
},
61
61
"judgments": {
62
62
"type": "object",
63
63
"properties": {
64
64
"$keyFormat": {
65
65
"type": "string",
66
66
"format": "record-key",
67
67
"maxLength": 32,
68
68
"minLength": 1,
69
69
"description": "Must match a judgment defined by the game record."
70
70
},
71
71
"$valueType": {
72
72
"type": "object",
73
73
"required": [
74
74
"total"
75
75
],
76
76
"properties": {
77
77
"late": {
78
78
"type": "integer",
79
-
"description": "The number of total judgments of this type earned when hitting late."
79
+
"description": "The number of judgments of this type earned when hitting late."
80
80
},
81
81
"early": {
82
82
"type": "integer",
83
-
"description": "The number of total judgments of this type earned when hitting early."
83
+
"description": "The number of judgments of this type earned when hitting early."
84
84
},
85
85
"total": {
86
86
"type": "integer",
87
-
"description": "The number of total judgments of this type earned."
87
+
"description": "The total number of judgments of this type earned."
88
88
}
89
89
}
90
90
}
91
91
},
92
92
"description": "A map of judgment names to the integer judgment amounts earned during play."
93
93
},
94
+
"totalLate": {
95
+
"type": "integer",
96
+
"description": "The total number of judgments earned when hitting late."
97
+
},
98
+
"totalEarly": {
99
+
"type": "integer",
100
+
"description": "The total number of judgments earned when hitting early."
101
+
},
94
102
"inputMethod": {
95
103
"type": "string",
96
104
"description": "The input method this score was earned using. Must be an input method defined by the game record if present."
97
105
},
98
106
"scoreComponents": {
99
107
"type": "object",
100
108
"properties": {
101
109
"$keyFormat": {
102
110
"type": "string",
103
111
"format": "record-key",
104
112
"maxLength": 32,
105
113
"minLength": 1,
106
114
"description": "Must match an ID defined by the game record, as well as using the same type."
107
115
},
108
116
"$valueType": {
109
117
"refs": [
110
118
"#enum",
111
119
"#points",
112
120
"#percentage",
113
121
"#text"
114
122
],
115
123
"type": "union",
116
124
"description": "If you need a component type that doesn't exist yet, contact @lemmaeof.gay"
117
125
}
118
126
},
119
127
"description": "The components that make up this score, as defined by the game record."
120
128
}
121
129
}
122
130
},
123
131
"description": "A score in a game hosting leaderboards via Tsunagite."
124
132
},
125
133
"text": {
126
134
"type": "object",
127
135
"required": [
128
136
"id",
129
137
"value"
130
138
],
131
139
"properties": {
132
140
"id": {
133
141
"type": "string",
134
142
"format": "record-key",
135
143
"maxLength": 32,
136
144
"minLength": 1,
137
145
"description": "The internal ID of this component, matching with a text score defined by the game record."
138
146
},
139
147
"value": {
140
148
"type": "string",
141
149
"description": "The text value of this score."
142
150
}
143
151
},
144
152
"description": "A fallback score component."
145
153
},
146
154
"points": {
147
155
"type": "object",
148
156
"required": [
149
157
"value"
150
158
],
151
159
"properties": {
152
160
"value": {
153
161
"type": "integer",
154
162
"description": "The number of points earned, capped by the limit defined by the game record if present."
155
163
}
156
164
},
157
165
"description": "An integer point score component."
158
166
},
159
167
"percentage": {
160
168
"type": "object",
161
169
"required": [
162
170
"value"
163
171
],
164
172
"properties": {
165
173
"value": {
166
174
"type": "string",
167
175
"description": "The percentage score earned, capped and formatted by the limits defined by the game record. Stored as a decimal number without a percent sign."
168
176
}
169
177
},
170
178
"description": "A percentage score component."
171
179
}
172
180
},
173
181
"$type": "com.atproto.lexicon.schema",
174
182
"lexicon": 1,
175
183
"description": "Definitions related to scores in games hosting leaderboards via Tsunagite.",
176
184
"featureFlags": [
177
185
"dev.tsunagite.dictionaryObject"
178
186
]
179
187
}