Implement annotations per user
This commit is contained in:
+36
-18
@@ -25,39 +25,57 @@ func NewSearch(ds model.DataStore) Search {
|
||||
|
||||
func (s *search) SearchArtist(ctx context.Context, q string, offset int, size int) (Entries, error) {
|
||||
q = sanitize.Accents(strings.ToLower(strings.TrimSuffix(q, "*")))
|
||||
resp, err := s.ds.Artist().Search(q, offset, size)
|
||||
artists, err := s.ds.Artist().Search(q, offset, size)
|
||||
if len(artists) == 0 || err != nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
artistIds := make([]string, len(artists))
|
||||
for i, al := range artists {
|
||||
artistIds[i] = al.ID
|
||||
}
|
||||
annMap, err := s.ds.Annotation().GetMap(getUserID(ctx), model.ArtistItemType, artistIds)
|
||||
if err != nil {
|
||||
return nil, nil
|
||||
}
|
||||
res := make(Entries, 0, len(resp))
|
||||
for _, ar := range resp {
|
||||
res = append(res, FromArtist(&ar))
|
||||
}
|
||||
return res, nil
|
||||
|
||||
return FromArtists(artists, annMap), nil
|
||||
}
|
||||
|
||||
func (s *search) SearchAlbum(ctx context.Context, q string, offset int, size int) (Entries, error) {
|
||||
q = sanitize.Accents(strings.ToLower(strings.TrimSuffix(q, "*")))
|
||||
resp, err := s.ds.Album().Search(q, offset, size)
|
||||
albums, err := s.ds.Album().Search(q, offset, size)
|
||||
if len(albums) == 0 || err != nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
albumIds := make([]string, len(albums))
|
||||
for i, al := range albums {
|
||||
albumIds[i] = al.ID
|
||||
}
|
||||
annMap, err := s.ds.Annotation().GetMap(getUserID(ctx), model.AlbumItemType, albumIds)
|
||||
if err != nil {
|
||||
return nil, nil
|
||||
}
|
||||
res := make(Entries, 0, len(resp))
|
||||
for _, al := range resp {
|
||||
res = append(res, FromAlbum(&al))
|
||||
}
|
||||
return res, nil
|
||||
|
||||
return FromAlbums(albums, annMap), nil
|
||||
}
|
||||
|
||||
func (s *search) SearchSong(ctx context.Context, q string, offset int, size int) (Entries, error) {
|
||||
q = sanitize.Accents(strings.ToLower(strings.TrimSuffix(q, "*")))
|
||||
resp, err := s.ds.MediaFile().Search(q, offset, size)
|
||||
mediaFiles, err := s.ds.MediaFile().Search(q, offset, size)
|
||||
if len(mediaFiles) == 0 || err != nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
trackIds := make([]string, len(mediaFiles))
|
||||
for i, mf := range mediaFiles {
|
||||
trackIds[i] = mf.ID
|
||||
}
|
||||
annMap, err := s.ds.Annotation().GetMap(getUserID(ctx), model.MediaItemType, trackIds)
|
||||
if err != nil {
|
||||
return nil, nil
|
||||
}
|
||||
res := make(Entries, 0, len(resp))
|
||||
for _, mf := range resp {
|
||||
res = append(res, FromMediaFile(&mf))
|
||||
}
|
||||
return res, nil
|
||||
|
||||
return FromMediaFiles(mediaFiles, annMap), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user