@@ -241,6 +241,50 @@ func GetAlbumBySlug(slug string) (models.BandcampAlbumData, error) {
241241 return album , nil
242242}
243243
244+ func GetAlbumByID (id string ) (models.BandcampAlbumData , error ) {
245+ db , err := sql .Open ("sqlite" , dbPath )
246+ if err != nil {
247+ return models.BandcampAlbumData {}, fmt .Errorf ("error opening database: %w" , err )
248+ }
249+ defer db .Close ()
250+
251+ var album models.BandcampAlbumData
252+ var ampwallURL , metalArchivesURL sql.NullString
253+
254+ err = db .QueryRow (`
255+ SELECT id, slug, artist_name, album_name, image_url, image_data,
256+ album_color_average, bandcamp_url, ampwall_url, metal_archives_url,
257+ total_length, formatted_length, date_added
258+ FROM albums WHERE id = ?` , id ).Scan (
259+ & album .ID ,
260+ & album .Slug ,
261+ & album .ArtistName ,
262+ & album .AlbumName ,
263+ & album .ImageUrl ,
264+ & album .ImageData ,
265+ & album .AlbumColorAverage ,
266+ & album .BandcampUrl ,
267+ & ampwallURL ,
268+ & metalArchivesURL ,
269+ & album .TotalLength ,
270+ & album .FormattedLength ,
271+ & album .DateAdded )
272+ if err != nil {
273+ return models.BandcampAlbumData {}, fmt .Errorf ("error fetching album: %w" , err )
274+ }
275+
276+ album .AmpwallUrl = ampwallURL .String
277+ album .MetalArchivesURL = metalArchivesURL .String
278+ album .ImageDataBase64 = base64 .StdEncoding .EncodeToString (album .ImageData )
279+
280+ if err := fetchTracks (db , & album ); err != nil {
281+ return models.BandcampAlbumData {}, fmt .Errorf ("error fetching tracks: %w" , err )
282+ }
283+
284+ calculateAlbumMetrics (& album )
285+ return album , nil
286+ }
287+
244288func AlbumUrlExists (url string ) (bool , error ) {
245289 db , err := sql .Open ("sqlite" , dbPath )
246290 if err != nil {
@@ -306,7 +350,7 @@ func FetchAlbumNamesOnly() ([]models.BandcampAlbumData, error) {
306350 }
307351 defer db .Close ()
308352
309- query := `SELECT artist_name, album_name FROM albums ORDER BY date_added DESC`
353+ query := `SELECT id, artist_name, album_name FROM albums ORDER BY date_added DESC`
310354 rows , err := db .Query (query )
311355 if err != nil {
312356 return nil , fmt .Errorf ("error querying albums: %w" , err )
@@ -316,7 +360,7 @@ func FetchAlbumNamesOnly() ([]models.BandcampAlbumData, error) {
316360 var albums []models.BandcampAlbumData
317361 for rows .Next () {
318362 var album models.BandcampAlbumData
319- if err := rows .Scan (& album .ArtistName , & album .AlbumName ); err != nil {
363+ if err := rows .Scan (& album .ID , & album . ArtistName , & album .AlbumName ); err != nil {
320364 return nil , fmt .Errorf ("error scanning album row: %w" , err )
321365 }
322366 albums = append (albums , album )
0 commit comments