mirror of
https://github.com/gabehf/Koito.git
synced 2026-03-07 21:48:18 -08:00
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package psql
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/gabehf/koito/internal/db"
|
|
"github.com/gabehf/koito/internal/repository"
|
|
)
|
|
|
|
func (d *Psql) GetInterest(ctx context.Context, opts db.GetInterestOpts) ([]db.InterestBucket, error) {
|
|
if opts.Buckets == 0 {
|
|
return nil, errors.New("GetInterest: bucket count must be provided")
|
|
}
|
|
|
|
ret := make([]db.InterestBucket, opts.Buckets)
|
|
|
|
if opts.ArtistID != 0 {
|
|
resp, err := d.q.GetGroupedListensFromArtist(ctx, repository.GetGroupedListensFromArtistParams{
|
|
ArtistID: opts.ArtistID,
|
|
BucketCount: opts.Buckets,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("GetInterest: GetGroupedListensFromArtist: %w", err)
|
|
}
|
|
for i, v := range resp {
|
|
ret[i] = db.InterestBucket{
|
|
BucketStart: v.BucketStart,
|
|
BucketEnd: v.BucketEnd,
|
|
ListenCount: v.ListenCount,
|
|
}
|
|
}
|
|
return ret, nil
|
|
} else if opts.AlbumID != 0 {
|
|
resp, err := d.q.GetGroupedListensFromRelease(ctx, repository.GetGroupedListensFromReleaseParams{
|
|
ReleaseID: opts.AlbumID,
|
|
BucketCount: opts.Buckets,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("GetInterest: GetGroupedListensFromRelease: %w", err)
|
|
}
|
|
for i, v := range resp {
|
|
ret[i] = db.InterestBucket{
|
|
BucketStart: v.BucketStart,
|
|
BucketEnd: v.BucketEnd,
|
|
ListenCount: v.ListenCount,
|
|
}
|
|
}
|
|
return ret, nil
|
|
} else if opts.TrackID != 0 {
|
|
resp, err := d.q.GetGroupedListensFromTrack(ctx, repository.GetGroupedListensFromTrackParams{
|
|
ID: opts.TrackID,
|
|
BucketCount: opts.Buckets,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("GetInterest: GetGroupedListensFromTrack: %w", err)
|
|
}
|
|
for i, v := range resp {
|
|
ret[i] = db.InterestBucket{
|
|
BucketStart: v.BucketStart,
|
|
BucketEnd: v.BucketEnd,
|
|
ListenCount: v.ListenCount,
|
|
}
|
|
}
|
|
return ret, nil
|
|
} else {
|
|
return nil, errors.New("GetInterest: artist id, album id, or track id must be provided")
|
|
}
|
|
}
|