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]) }