Files
nl-video-api/internal/dao/episode.go
2025-08-03 00:11:15 +08:00

110 lines
3.2 KiB
Go

package dao
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
"nl-video-api/internal/model/entity"
)
// EpisodeDao 集数数据访问对象
type EpisodeDao struct{}
// episodeDao 集数DAO实例
var episodeDao = &EpisodeDao{}
// NewEpisodeDao 创建集数DAO实例
func NewEpisodeDao() *EpisodeDao {
return episodeDao
}
// GetByMovieId 根据影片ID获取集数列表
func (d *EpisodeDao) GetByMovieId(ctx context.Context, movieId int) ([]*entity.Episode, error) {
var episodes []*entity.Episode
err := g.DB().Model("nl_episode").
Where("movie_id = ? AND deleted_at = 0", movieId).
Order("episode_num ASC, sort ASC").
Scan(&episodes)
return episodes, err
}
// GetById 根据ID获取集数详情
func (d *EpisodeDao) GetById(ctx context.Context, id int) (*entity.Episode, error) {
var episode *entity.Episode
err := g.DB().Model("nl_episode").
Where("id = ? AND deleted_at = 0", id).
Scan(&episode)
return episode, err
}
// Create 创建集数
func (d *EpisodeDao) Create(ctx context.Context, episode *entity.Episode) (int64, error) {
result, err := g.DB().Model("nl_episode").Data(episode).Insert()
if err != nil {
return 0, err
}
return result.LastInsertId()
}
// Update 更新集数
func (d *EpisodeDao) Update(ctx context.Context, id int, data g.Map) error {
data["updated_at"] = gtime.Now().Unix()
_, err := g.DB().Model("nl_episode").Where("id = ?", id).Data(data).Update()
return err
}
// Delete 删除集数(软删除)
func (d *EpisodeDao) Delete(ctx context.Context, id int) error {
_, err := g.DB().Model("nl_episode").Where("id = ?", id).Data(g.Map{
"deleted_at": gtime.Now().Unix(),
"updated_at": gtime.Now().Unix(),
}).Update()
return err
}
// UpdateViewCount 更新观看次数
func (d *EpisodeDao) UpdateViewCount(ctx context.Context, id int) error {
_, err := g.DB().Model("nl_episode").Where("id = ?", id).Increment("view_count", 1)
return err
}
// GetMaxEpisodeNum 获取影片的最大集数
func (d *EpisodeDao) GetMaxEpisodeNum(ctx context.Context, movieId int) (int, error) {
var maxNum int
err := g.DB().Model("nl_episode").
Where("movie_id = ? AND deleted_at = 0", movieId).
Fields("MAX(episode_num) as max_num").
Scan(&maxNum)
return maxNum, err
}
// BatchCreate 批量创建集数
func (d *EpisodeDao) BatchCreate(ctx context.Context, episodes []*entity.Episode) error {
if len(episodes) == 0 {
return nil
}
_, err := g.DB().Model("nl_episode").Data(episodes).Insert()
return err
}
// GetEpisodesByRange 获取指定范围的集数
func (d *EpisodeDao) GetEpisodesByRange(ctx context.Context, movieId, startNum, endNum int) ([]*entity.Episode, error) {
var episodes []*entity.Episode
err := g.DB().Model("nl_episode").
Where("movie_id = ? AND episode_num >= ? AND episode_num <= ? AND deleted_at = 0",
movieId, startNum, endNum).
Order("episode_num ASC").
Scan(&episodes)
return episodes, err
}
// CheckEpisodeExists 检查集数是否存在
func (d *EpisodeDao) CheckEpisodeExists(ctx context.Context, movieId, episodeNum int) (bool, error) {
count, err := g.DB().Model("nl_episode").
Where("movie_id = ? AND episode_num = ? AND deleted_at = 0", movieId, episodeNum).
Count()
return count > 0, err
}