110 lines
3.2 KiB
Go
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
|
|
}
|