Files
butterfliu/internal/service/cover_svc.go
lzw-723 169b2c1858
All checks were successful
Go CI / test-and-build (push) Successful in 2m3s
实现封面缓存
2026-04-08 20:56:18 +08:00

54 lines
1.2 KiB
Go

package service
import (
"butterfliu/internal/model"
"butterfliu/internal/repository"
"butterfliu/internal/util"
"errors"
)
type CoverService struct {
mediaRepo *repository.MediaRepository
songRepo *repository.SongRepository
albumRepo *repository.AlbumRepository
}
func NewCoverService(mediaRepo *repository.MediaRepository, songRepo *repository.SongRepository, albumRepo *repository.AlbumRepository) *CoverService {
return &CoverService{
mediaRepo: mediaRepo,
songRepo: songRepo,
albumRepo: albumRepo,
}
}
func (s *CoverService) getMediaFile(id int) (model.MediaFile, error) {
song, err := s.songRepo.Get(id)
if err != nil {
return model.MediaFile{}, err
}
return s.mediaRepo.Get(song.MediaFileID)
}
func (s *CoverService) GetSongCover(id int) (string, error) {
file, err := s.getMediaFile(id)
if err != nil {
return "", err
}
cover, err := util.ExtractCover(file.Path, id)
if err != nil {
return "", err
}
return cover, nil
}
func (s *CoverService) GetAlbumCover(id int) (string, error) {
songs, err := s.albumRepo.GetSongIDs(id)
if err != nil {
return "", err
}
if len(songs) == 0 {
return "", errors.New("no songs found for album")
}
return s.GetSongCover(songs[0])
}