mirror of https://github.com/gabehf/Koito.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.7 KiB
60 lines
1.7 KiB
package psql
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/gabehf/koito/internal/db"
|
|
"github.com/gabehf/koito/internal/models"
|
|
"github.com/gabehf/koito/internal/repository"
|
|
)
|
|
|
|
func (d *Psql) GetExportPage(ctx context.Context, opts db.GetExportPageOpts) ([]*db.ExportItem, error) {
|
|
rows, err := d.q.GetListensExportPage(ctx, repository.GetListensExportPageParams{
|
|
UserID: opts.UserID,
|
|
TrackID: opts.TrackID,
|
|
Limit: opts.Limit,
|
|
ListenedAt: opts.ListenedAt,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("GetExportPage: %w", err)
|
|
}
|
|
ret := make([]*db.ExportItem, len(rows))
|
|
for i, row := range rows {
|
|
|
|
var trackAliases []models.Alias
|
|
err = json.Unmarshal(row.TrackAliases, &trackAliases)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("GetExportPage: json.Unmarshal trackAliases: %w", err)
|
|
}
|
|
var albumAliases []models.Alias
|
|
err = json.Unmarshal(row.ReleaseAliases, &albumAliases)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("GetExportPage: json.Unmarshal albumAliases: %w", err)
|
|
}
|
|
var artists []models.ArtistWithFullAliases
|
|
err = json.Unmarshal(row.Artists, &artists)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("GetExportPage: json.Unmarshal artists: %w", err)
|
|
}
|
|
|
|
ret[i] = &db.ExportItem{
|
|
TrackID: row.TrackID,
|
|
ListenedAt: row.ListenedAt,
|
|
UserID: row.UserID,
|
|
Client: row.Client,
|
|
TrackMbid: row.TrackMbid,
|
|
TrackDuration: row.TrackDuration,
|
|
TrackAliases: trackAliases,
|
|
ReleaseID: row.ReleaseID,
|
|
ReleaseMbid: row.ReleaseMbid,
|
|
ReleaseImageSource: row.ReleaseImageSource.String,
|
|
VariousArtists: row.VariousArtists,
|
|
ReleaseAliases: albumAliases,
|
|
Artists: artists,
|
|
}
|
|
}
|
|
return ret, nil
|
|
}
|