app.rocksky.song.defs
Schema Diff
+83 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 39 non-breaking changes.
Non-Breaking Changes (39)
- AddedVertex AddedVertex { vertex_id: "app.rocksky.artist.defs#artistViewBasic" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.avatar" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.handle" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.timestamp" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.avatar" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.did" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.displayName" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.handle" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.id" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.scrobbleUri" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.timestamp" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewBasic.isrc" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewBasic.mbid" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.artists" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.artists:items" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.firstScrobble" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.isrc" }
- AddedVertex AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.mbid" }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.avatar", kind: "prop", name: Some("avatar") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.handle", kind: "prop", name: Some("handle") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.timestamp", kind: "prop", name: Some("timestamp") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.avatar", kind: "prop", name: Some("avatar") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.did", kind: "prop", name: Some("did") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.displayName", kind: "prop", name: Some("displayName") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.handle", kind: "prop", name: Some("handle") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.id", kind: "prop", name: Some("id") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.scrobbleUri", kind: "prop", name: Some("scrobbleUri") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.timestamp", kind: "prop", name: Some("timestamp") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewBasic", tgt: "app.rocksky.song.defs#songViewBasic.isrc", kind: "prop", name: Some("isrc") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewBasic", tgt: "app.rocksky.song.defs#songViewBasic.mbid", kind: "prop", name: Some("mbid") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.artists", kind: "prop", name: Some("artists") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.firstScrobble", kind: "prop", name: Some("firstScrobble") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.isrc", kind: "prop", name: Some("isrc") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.mbid", kind: "prop", name: Some("mbid") }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.artists", tgt: "app.rocksky.song.defs#songViewDetailed.artists:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.artists:items", tgt: "app.rocksky.artist.defs#artistViewBasic", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.firstScrobble", tgt: "app.rocksky.song.defs#firstScrobbleView", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.rocksky.artist.defs#artistViewBasic" }AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView" }AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.avatar" }AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.handle" }AddedVertex { vertex_id: "app.rocksky.song.defs#firstScrobbleView.timestamp" }AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView" }AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.avatar" }AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.did" }AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.displayName" }AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.handle" }AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.id" }AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.scrobbleUri" }AddedVertex { vertex_id: "app.rocksky.song.defs#recentListenerView.timestamp" }AddedVertex { vertex_id: "app.rocksky.song.defs#songViewBasic.isrc" }AddedVertex { vertex_id: "app.rocksky.song.defs#songViewBasic.mbid" }AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.artists" }AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.artists:items" }AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.firstScrobble" }AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.isrc" }AddedVertex { vertex_id: "app.rocksky.song.defs#songViewDetailed.mbid" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.avatar", kind: "prop", name: Some("avatar") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.handle", kind: "prop", name: Some("handle") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#firstScrobbleView", tgt: "app.rocksky.song.defs#firstScrobbleView.timestamp", kind: "prop", name: Some("timestamp") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.avatar", kind: "prop", name: Some("avatar") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.did", kind: "prop", name: Some("did") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.displayName", kind: "prop", name: Some("displayName") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.handle", kind: "prop", name: Some("handle") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.id", kind: "prop", name: Some("id") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.scrobbleUri", kind: "prop", name: Some("scrobbleUri") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#recentListenerView", tgt: "app.rocksky.song.defs#recentListenerView.timestamp", kind: "prop", name: Some("timestamp") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewBasic", tgt: "app.rocksky.song.defs#songViewBasic.isrc", kind: "prop", name: Some("isrc") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewBasic", tgt: "app.rocksky.song.defs#songViewBasic.mbid", kind: "prop", name: Some("mbid") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.artists", kind: "prop", name: Some("artists") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.firstScrobble", kind: "prop", name: Some("firstScrobble") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.isrc", kind: "prop", name: Some("isrc") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed", tgt: "app.rocksky.song.defs#songViewDetailed.mbid", kind: "prop", name: Some("mbid") }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.artists", tgt: "app.rocksky.song.defs#songViewDetailed.artists:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.artists:items", tgt: "app.rocksky.artist.defs#artistViewBasic", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.rocksky.song.defs#songViewDetailed.firstScrobble", tgt: "app.rocksky.song.defs#firstScrobbleView", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"firstScrobbleView": {
5
+
"properties": {
6
+
"avatar": {
7
+
"description": "The avatar URL of the user who first scrobbled this song.",
8
+
"format": "uri",
9
+
"type": "string"
10
+
},
11
+
"handle": {
12
+
"description": "The handle of the user who first scrobbled this song.",
13
+
"type": "string"
14
+
},
15
+
"timestamp": {
16
+
"description": "The timestamp of the first scrobble.",
17
+
"format": "datetime",
18
+
"type": "string"
19
+
}
20
+
},
21
+
"type": "object"
22
+
},
23
+
"recentListenerView": {
24
+
"properties": {
25
+
"avatar": {
26
+
"description": "The URL of the listener's avatar image.",
27
+
"format": "uri",
28
+
"type": "string"
29
+
},
30
+
"did": {
31
+
"description": "The DID of the listener.",
32
+
"type": "string"
33
+
},
34
+
"displayName": {
35
+
"description": "The display name of the listener.",
36
+
"type": "string"
37
+
},
38
+
"handle": {
39
+
"description": "The handle of the listener.",
40
+
"type": "string"
41
+
},
42
+
"id": {
43
+
"description": "The unique identifier of the listener.",
44
+
"type": "string"
45
+
},
46
+
"scrobbleUri": {
47
+
"description": "The URI of the listener's most recent scrobble of this song.",
48
+
"format": "at-uri",
49
+
"type": "string"
50
+
},
51
+
"timestamp": {
52
+
"description": "The timestamp of the listener's most recent scrobble of this song.",
53
+
"format": "datetime",
54
+
"type": "string"
55
+
}
56
+
},
57
+
"type": "object"
58
+
},
4
59
"songViewBasic": {
5
60
"properties": {
6
61
"album": {
7
62
"description": "The album of the song.",
8
63
"type": "string"
9
64
},
10
65
"albumArt": {
11
66
"description": "The URL of the album art image.",
12
67
"format": "uri",
13
68
"type": "string"
14
69
},
15
70
"albumArtist": {
16
71
"description": "The artist of the album the song belongs to.",
17
72
"type": "string"
18
73
},
19
74
"albumUri": {
20
75
"description": "The URI of the album the song belongs to.",
21
76
"format": "at-uri",
22
77
"type": "string"
23
78
},
24
79
"artist": {
25
80
"description": "The artist of the song.",
26
81
"type": "string"
27
82
},
28
83
"artistUri": {
29
84
"description": "The URI of the artist of the song.",
30
85
"format": "at-uri",
31
86
"type": "string"
32
87
},
33
88
"createdAt": {
34
89
"description": "The timestamp when the song was created.",
35
90
"format": "datetime",
36
91
"type": "string"
37
92
},
38
93
"discNumber": {
39
94
"description": "The disc number of the song in the album.",
40
95
"type": "integer"
41
96
},
42
97
"duration": {
43
98
"description": "The duration of the song in milliseconds.",
44
99
"type": "integer"
45
100
},
46
101
"id": {
47
102
"description": "The unique identifier of the song.",
48
103
"type": "string"
49
104
},
105
+
"isrc": {
106
+
"description": "The International Standard Recording Code (ISRC) of the song.",
107
+
"type": "string"
108
+
},
109
+
"mbid": {
110
+
"description": "The MusicBrainz ID of the song.",
111
+
"type": "string"
112
+
},
50
113
"playCount": {
51
114
"description": "The number of times the song has been played.",
52
115
"minimum": 0,
53
116
"type": "integer"
54
117
},
55
118
"sha256": {
56
119
"description": "The SHA256 hash of the song.",
57
120
"type": "string"
58
121
},
59
122
"tags": {
60
123
"items": {
61
124
"type": "string"
62
125
},
63
126
"type": "array"
64
127
},
65
128
"title": {
66
129
"description": "The title of the song.",
67
130
"type": "string"
68
131
},
69
132
"trackNumber": {
70
133
"description": "The track number of the song in the album.",
71
134
"type": "integer"
72
135
},
73
136
"uniqueListeners": {
74
137
"description": "The number of unique listeners who have played the song.",
75
138
"minimum": 0,
76
139
"type": "integer"
77
140
},
78
141
"uri": {
79
142
"description": "The URI of the song.",
80
143
"format": "at-uri",
81
144
"type": "string"
82
145
}
83
146
},
84
147
"type": "object"
85
148
},
86
149
"songViewDetailed": {
87
150
"properties": {
88
151
"album": {
89
152
"description": "The album of the song.",
90
153
"type": "string"
91
154
},
92
155
"albumArt": {
93
156
"description": "The URL of the album art image.",
94
157
"format": "uri",
95
158
"type": "string"
96
159
},
97
160
"albumArtist": {
98
161
"description": "The artist of the album the song belongs to.",
99
162
"type": "string"
100
163
},
101
164
"albumUri": {
102
165
"description": "The URI of the album the song belongs to.",
103
166
"format": "at-uri",
104
167
"type": "string"
105
168
},
106
169
"artist": {
107
170
"description": "The artist of the song.",
108
171
"type": "string"
109
172
},
110
173
"artistUri": {
111
174
"description": "The URI of the artist of the song.",
112
175
"format": "at-uri",
113
176
"type": "string"
114
177
},
178
+
"artists": {
179
+
"items": {
180
+
"ref": "app.rocksky.artist.defs#artistViewBasic",
181
+
"type": "ref"
182
+
},
183
+
"type": "array"
184
+
},
115
185
"createdAt": {
116
186
"description": "The timestamp when the song was created.",
117
187
"format": "datetime",
118
188
"type": "string"
119
189
},
120
190
"discNumber": {
121
191
"description": "The disc number of the song in the album.",
122
192
"type": "integer"
123
193
},
124
194
"duration": {
125
195
"description": "The duration of the song in milliseconds.",
126
196
"type": "integer"
127
197
},
198
+
"firstScrobble": {
199
+
"description": "The first scrobble of this song on Rocksky.",
200
+
"ref": "app.rocksky.song.defs#firstScrobbleView",
201
+
"type": "ref"
202
+
},
128
203
"id": {
129
204
"description": "The unique identifier of the song.",
130
205
"type": "string"
131
206
},
207
+
"isrc": {
208
+
"description": "The International Standard Recording Code (ISRC) of the song.",
209
+
"type": "string"
210
+
},
211
+
"mbid": {
212
+
"description": "The MusicBrainz ID of the song.",
213
+
"type": "string"
214
+
},
132
215
"playCount": {
133
216
"description": "The number of times the song has been played.",
134
217
"minimum": 0,
135
218
"type": "integer"
136
219
},
137
220
"sha256": {
138
221
"description": "The SHA256 hash of the song.",
139
222
"type": "string"
140
223
},
141
224
"tags": {
142
225
"items": {
143
226
"type": "string"
144
227
},
145
228
"type": "array"
146
229
},
147
230
"title": {
148
231
"description": "The title of the song.",
149
232
"type": "string"
150
233
},
151
234
"trackNumber": {
152
235
"description": "The track number of the song in the album.",
153
236
"type": "integer"
154
237
},
155
238
"uniqueListeners": {
156
239
"description": "The number of unique listeners who have played the song.",
157
240
"minimum": 0,
158
241
"type": "integer"
159
242
},
160
243
"uri": {
161
244
"description": "The URI of the song.",
162
245
"format": "at-uri",
163
246
"type": "string"
164
247
}
165
248
},
166
249
"type": "object"
167
250
}
168
251
},
169
252
"id": "app.rocksky.song.defs",
170
253
"lexicon": 1
171
254
}