add db housekeeping

This commit is contained in:
Simon Ding
2025-11-12 14:00:38 +08:00
parent e2ec07aaa2
commit 1f6b704405
3 changed files with 42 additions and 6 deletions

View File

@@ -232,6 +232,15 @@ func (c *client) GetMediaWatchlist(mediaType media.MediaType) []*ent.Media {
return list
}
func (c *client) GetAllEpisodes() (ent.Episodes, error) {
ep, err := c.ent.Episode.Query().All(context.TODO())
return ep, err
}
func (c *client) DeleteEpisode(id int) error {
_, err := c.ent.Episode.Delete().Where(episode.ID(id)).Exec(context.TODO())
return err
}
func (c *client) GetEpisode(seriesId, seasonNum, episodeNum int) (*ent.Episode, error) {
return c.ent.Episode.Query().Where(episode.MediaID(seriesId), episode.SeasonNumber(seasonNum),
episode.EpisodeNumber(episodeNum)).First(context.TODO())

View File

@@ -59,7 +59,6 @@ type Settings interface {
GetAcceptedSubtitleFormats() ([]string, error)
SetAcceptedSubtitleFormats(key string, v []string) error
GetTmdbApiKey() string
}
type MediaApis interface {
@@ -75,6 +74,8 @@ type MediaApis interface {
}
type EpisodeApis interface {
GetAllEpisodes() (ent.Episodes, error)
DeleteEpisode(id int) error
GetEpisode(seriesId, seasonNum, episodeNum int) (*ent.Episode, error)
GetEpisodeByID(epID int) (*ent.Episode, error)
UpdateEpiode(episodeId int, name, overview string) error
@@ -89,7 +90,6 @@ type EpisodeApis interface {
UpdateEpisodeTargetFile(id int, filename string) error
GetSeasonEpisodes(mediaId, seasonNum int) ([]*ent.Episode, error)
CleanAllDanglingEpisodes() error
}
type IndexerApis interface {
@@ -97,7 +97,6 @@ type IndexerApis interface {
DeleteIndexer(id int)
GetIndexer(id int) (*ent.Indexers, error)
GetAllIndexers() []*ent.Indexers
}
type HistoryApis interface {
@@ -108,5 +107,5 @@ type HistoryApis interface {
GetHistories() ent.Histories
DeleteHistory(id int) error
GetDownloadHistory(mediaID int) ([]*ent.History, error)
GetMovieDummyEpisode(movieId int) (*ent.Episode, error)
}
GetMovieDummyEpisode(movieId int) (*ent.Episode, error)
}

View File

@@ -1,6 +1,9 @@
package engine
import "polaris/log"
import (
"polaris/ent/media"
"polaris/log"
)
func (c *Engine) housekeeping() error {
log.Infof("start housekeeping tasks...")
@@ -17,6 +20,31 @@ func (c *Engine) housekeeping() error {
func (c *Engine) checkDbScraps() error {
//TODO: remove episodes that are not associated with any series
tvs := c.db.GetMediaWatchlist(media.MediaTypeTv)
movies := c.db.GetMediaWatchlist(media.MediaTypeMovie)
validMediaIDs := make(map[int]bool, len(tvs)+len(movies))
for _, tv := range tvs {
validMediaIDs[tv.ID] = true
}
for _, movie := range movies {
validMediaIDs[movie.ID] = true
}
allEpisodes, err := c.db.GetAllEpisodes()
if err != nil {
return err
}
for _, ep := range allEpisodes {
if _, ok := validMediaIDs[ep.MediaID]; !ok {
log.Infof("remove scrap episode record: %v S%vE%v", ep.MediaID, ep.SeasonNumber, ep.EpisodeNumber)
if err := c.db.DeleteEpisode(ep.ID); err != nil {
log.Errorf("delete scrap episode record error: %v", err)
}
}
}
return nil
}