Skip to content

Commit f0e75e0

Browse files
committed
Fix UPC/ISRC for Discogs
1 parent 33395a8 commit f0e75e0

4 files changed

Lines changed: 68 additions & 16 deletions

File tree

MiniMediaMetadataAPI.Application/Models/Database/Discogs/DiscogsRelease.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ public class DiscogsRelease
1414
public int TrackCount { get; set; }
1515

1616
public List<DiscogsReleaseArtist> Artists { get; set; } = new List<DiscogsReleaseArtist>();
17+
public List<DiscogsReleaseIdentifier> Identifiers { get; set; } = new List<DiscogsReleaseIdentifier>();
1718
}

MiniMediaMetadataAPI.Application/Repositories/DiscogsRepository.cs

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,19 @@ FROM discogs_artist da
8080
album.masterid,
8181
track.TrackCount,
8282
dra.*,
83-
regexp_replace(da.name, ' \([0-9]*\)$', '' ) AS Name
83+
regexp_replace(da.name, ' \([0-9]*\)$', '' ) AS Name,
84+
dri.Releaseid,
85+
dri.Description,
86+
dri.Type,
87+
dri.Value
8488
FROM discogs_release album
8589
join discogs_release_artist dra on dra.releaseid = album.releaseid and dra.artistid = @artistId
8690
join discogs_artist da on da.artistid = dra.artistid
8791
join lateral (
8892
select count(track.releaseid) as TrackCount
8993
from discogs_release_track track
9094
where track.releaseid = album.releaseid) track on 1=1
95+
left join discogs_release_identifier dri on dri.releaseid = album.releaseid
9196
where
9297
lower(album.title) % lower(@albumName)";
9398

@@ -99,16 +104,20 @@ from discogs_release_track track
99104
try
100105
{
101106
results = await conn
102-
.QueryAsync<DiscogsRelease, DiscogsReleaseArtist, DiscogsRelease>(query,
103-
(album, artist) =>
107+
.QueryAsync<DiscogsRelease, DiscogsReleaseArtist, DiscogsReleaseIdentifier, DiscogsRelease>(query,
108+
(album, artist, identifier) =>
104109
{
105110
if (artist != null)
106111
{
107112
album.Artists.Add(artist);
108113
}
114+
if (identifier != null)
115+
{
116+
album.Identifiers.Add(identifier);
117+
}
109118
return album;
110119
},
111-
splitOn: "releaseid,releaseid",
120+
splitOn: "releaseid,releaseid,releaseid",
112121
param: new
113122
{
114123
albumName,
@@ -137,6 +146,9 @@ from discogs_release_track track
137146
.DistinctBy(image => image.ArtistId)
138147
.ToList();
139148

149+
album.Identifiers = group
150+
.SelectMany(album => album.Identifiers)
151+
.ToList();
140152
return album;
141153
})
142154
.ToList();
@@ -158,29 +170,38 @@ from discogs_release_track track
158170
album.masterid,
159171
track.TrackCount,
160172
dra.*,
161-
regexp_replace(da.name, ' \([0-9]*\)$', '' ) AS Name
173+
regexp_replace(da.name, ' \([0-9]*\)$', '' ) AS Name,
174+
dri.Releaseid,
175+
dri.Description,
176+
dri.Type,
177+
dri.Value
162178
FROM discogs_release album
163179
join discogs_release_artist dra on dra.releaseid = album.releaseid
164180
join discogs_artist da on da.artistid = dra.artistid
165181
join lateral (
166182
select count(track.releaseid) as TrackCount
167183
from discogs_release_track track
168184
where track.releaseid = album.releaseid) track on 1=1
185+
left join discogs_release_identifier dri on dri.releaseid = album.releaseid
169186
where album.releaseid = @albumId";
170187

171188
await using var conn = new NpgsqlConnection(_databaseConfiguration.ConnectionString);
172189

173190
var results = await conn
174-
.QueryAsync<DiscogsRelease, DiscogsReleaseArtist, DiscogsRelease>(query,
175-
(album, artist) =>
191+
.QueryAsync<DiscogsRelease, DiscogsReleaseArtist, DiscogsReleaseIdentifier, DiscogsRelease>(query,
192+
(album, artist, identifier) =>
176193
{
177194
if (artist != null)
178195
{
179196
album.Artists.Add(artist);
180197
}
198+
if (identifier != null)
199+
{
200+
album.Identifiers.Add(identifier);
201+
}
181202
return album;
182203
},
183-
splitOn: "releaseid,releaseid",
204+
splitOn: "releaseid,releaseid,releaseid",
184205
param: new
185206
{
186207
albumId
@@ -194,7 +215,11 @@ from discogs_release_track track
194215

195216
album.Artists = group
196217
.SelectMany(album => album.Artists)
197-
.DistinctBy(image => image.ArtistId)
218+
.DistinctBy(artist => artist.ArtistId)
219+
.ToList();
220+
221+
album.Identifiers = group
222+
.SelectMany(album => album.Identifiers)
198223
.ToList();
199224

200225
return album;
@@ -221,7 +246,11 @@ from discogs_release_track track
221246
album.masterid,
222247
track.TrackCount,
223248
dra.*,
224-
regexp_replace(da.name, ' \([0-9]*\)$', '' ) as Name
249+
regexp_replace(da.name, ' \([0-9]*\)$', '' ) as Name,
250+
dri.Releaseid,
251+
dri.Description,
252+
dri.Type,
253+
dri.Value
225254
FROM discogs_release_track dt
226255
join discogs_release album on album.ReleaseId = dt.ReleaseId
227256
join lateral (
@@ -231,6 +260,7 @@ from discogs_release_track track
231260
join discogs_release_artist release_dra on release_dra.ReleaseId = album.ReleaseId and release_dra.artistid = @artistId
232261
join discogs_release_artist dra on dra.ReleaseId = album.ReleaseId
233262
join discogs_artist da on da.artistid = dra.artistid
263+
left join discogs_release_identifier dri on dri.releaseid = album.releaseid
234264
where lower(dt.Title) % lower(@trackName)";
235265

236266
await using var conn = new NpgsqlConnection(_databaseConfiguration.ConnectionString);
@@ -244,18 +274,23 @@ from discogs_release_track track
244274
.QueryAsync<DiscogsReleaseTrack,
245275
DiscogsRelease,
246276
DiscogsReleaseArtist,
277+
DiscogsReleaseIdentifier,
247278
DiscogsReleaseTrack>(query,
248-
(track, release, releaseArtist) =>
279+
(track, release, releaseArtist, identifier) =>
249280
{
250281
track.Release = release;
251282

252283
if (releaseArtist != null)
253284
{
254285
track.Release.Artists.Add(releaseArtist);
255286
}
287+
if (identifier != null)
288+
{
289+
track.Release.Identifiers.Add(identifier);
290+
}
256291
return track;
257292
},
258-
splitOn: "ReleaseId, ReleaseId",
293+
splitOn: "ReleaseId, ReleaseId, ReleaseId",
259294
param: new
260295
{
261296
trackName,
@@ -289,6 +324,10 @@ from discogs_release_track track
289324
.DistinctBy(artist => artist.ArtistId)
290325
.ToList();
291326

327+
track.Release.Identifiers = group
328+
.SelectMany(album => album.Release.Identifiers)
329+
.ToList();
330+
292331
return track;
293332
})
294333
.ToList();

MiniMediaMetadataAPI.Application/Services/SearchAlbumService.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,10 @@ public async Task<SearchAlbumResponse> SearchAlbum(
144144
Name = album.Title,
145145
Popularity = 0,
146146
Url = $"https://www.discogs.com/release/{album.ReleaseId}",
147-
UPC = string.Empty,
147+
UPC = album.Identifiers
148+
.OrderByDescending(id => id.Description)
149+
.FirstOrDefault(id =>
150+
string.Equals(id.Type, "Barcode"))?.Value,
148151
Copyright = string.Empty,
149152
Label = string.Empty,
150153
ReleaseDate = album.Released,
@@ -296,7 +299,10 @@ public async Task<SearchAlbumResponse> SearchAlbum(
296299
Name = discogsAlbum.Title,
297300
Popularity = 0,
298301
Url = $"https://www.discogs.com/release/{discogsAlbum.ReleaseId}",
299-
UPC = string.Empty,
302+
UPC = discogsAlbum.Identifiers
303+
.OrderByDescending(id => id.Description)
304+
.FirstOrDefault(id =>
305+
string.Equals(id.Type, "Barcode"))?.Value,
300306
Copyright = string.Empty,
301307
Label = string.Empty,
302308
ReleaseDate = discogsAlbum.Released,

MiniMediaMetadataAPI.Application/Services/SearchTrackService.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,10 @@ public async Task<SearchTrackResponse> SearchTrack(
222222
DiscNumber = track.Position.Contains("-") ? (int.TryParse(track.Position.Split('-')[0], out int disc) ? disc : 1) : 1,
223223
TrackNumber = track.Position.Contains("-") ? (int.TryParse(track.Position.Split('-')[1], out int trackNumber) ? trackNumber.ToString() : track.Position) : track.Position,
224224
Label = string.Empty,
225-
ISRC = string.Empty,
225+
ISRC = track.Release.Identifiers
226+
.Where(id => string.Equals(id.Type, "ISRC"))
227+
.FirstOrDefault(id => string.Equals(id.Description, $"Track {track.Position}") ||
228+
string.Equals(id.Description, $"{track.Position}"))?.Value,
226229
Album = new SearchTrackAlbumEntity
227230
{
228231
Id = track.Release.ReleaseId.ToString(),
@@ -234,7 +237,10 @@ public async Task<SearchTrackResponse> SearchTrack(
234237
Url = $"https://www.discogs.com/release/{track.Release.ReleaseId}",
235238
Label = string.Empty,
236239
Popularity = 0,
237-
UPC = string.Empty,
240+
UPC = track.Release.Identifiers
241+
.OrderByDescending(id => id.Description)
242+
.FirstOrDefault(id =>
243+
string.Equals(id.Type, "Barcode"))?.Value,
238244
ProviderType = ProviderType.Discogs
239245
},
240246
Artists = track.Release.Artists?.Select(artist => new SearchTrackArtistEntity

0 commit comments

Comments
 (0)