Browse Source

视频管理

master
chenyang 9 months ago
parent
commit
da76478668
  1. 151
      app/api/video/v1/video.go
  2. 20
      app/api/video/video.go
  3. 5
      app/controller/video/video.go
  4. 15
      app/controller/video/video_new.go
  5. 14
      app/controller/video/video_v1_batch_delete.go
  6. 14
      app/controller/video/video_v1_create.go
  7. 14
      app/controller/video/video_v1_delete.go
  8. 14
      app/controller/video/video_v1_get.go
  9. 14
      app/controller/video/video_v1_get_list.go
  10. 14
      app/controller/video/video_v1_update.go
  11. 107
      app/logic/video/video.go
  12. 56
      app/model/video.go
  13. 43
      app/service/video.go

151
app/api/video/v1/video.go

@ -0,0 +1,151 @@
package v1
import (
"github.com/gogf/gf/v2/frame/g"
"xgit.pub/st52/xcore/dto"
)
// GetListReq 获取视频列表请求
type GetListReq struct {
g.Meta `path:"/video/list" method:"post" summary:"获取视频列表" tags:"视频"`
Title string `json:"title" description:"标题"`
CategoryIdList []uint `json:"category_id_list" description:"分类 ID"`
Lock string `json:"lock" description:"锁定"`
IsEnd string `json:"is_end" description:"完结"`
Copyright string `json:"copyright" description:"版权"`
Year uint `json:"year" description:"年份"`
Actor string `json:"actor" description:"演员"`
Director string `json:"director" description:"导演"`
Writer string `json:"writer" description:"编剧"`
dto.PageReq
}
// GetListRes 获取视频列表响应
type GetListRes struct {
dto.PageRes
}
// CreateReq 创建视频请求
type CreateReq struct {
g.Meta `path:"/video/add" method:"post" summary:"创建视频" tags:"视频"`
Title string `json:"title" description:"标题"`
TitleSub string `json:"title_sub" description:"副标"`
Letter string `json:"letter" description:"首字母"`
Tag string `json:"tag" description:"TAG"`
Color string `json:"color" description:"颜色"`
Lock uint `json:"lock" description:"锁定"`
Copyright uint `json:"copyright" description:"版权"`
IsEnd uint `json:"is_end" description:"完结"`
Status uint `json:"status" description:"状态"`
CategoryId uint `json:"category_id" description:"分类"`
Pic string `json:"pic" description:"图片"`
PicThumb string `json:"pic_thumb" description:"缩略图"`
PicSlide string `json:"pic_slide" description:"轮播"`
PicScreenshot string `json:"pic_screenshot" description:"截图"`
Actor string `json:"actor" description:"演员"`
Director string `json:"director" description:"导演"`
Writer string `json:"writer" description:"编剧"`
Remarks string `json:"remarks" description:"备注"`
Pubdate string `json:"pubdate" description:"发布时间"`
Total int `json:"total" description:"总集数"`
Serial string `json:"serial" description:"连载数"`
Duration string `json:"duration" description:"视频时长"`
Tv string `json:"tv" description:"电视频道"`
Weekday string `json:"weekday" description:"节目周期"`
Class string `json:"class" description:"扩展分类"`
Area string `json:"area" description:"地区"`
Lang string `json:"lang" description:"语言"`
Jumpurl string `json:"jumpurl" description:"跳转URL"`
Version string `json:"version" description:"资源版本"`
Year int `json:"year" description:"年份"`
State string `json:"state" description:"资源类别"`
DoubanScore float64 `json:"douban_score" description:"豆瓣评分"`
DoubanId int `json:"douban_id" description:"豆瓣ID"`
Up int `json:"up" description:"顶"`
Down int `json:"down" description:"踩"`
Hits int `json:"hits" description:"人气"`
HitsMonth int `json:"hits_month" description:"月人气"`
HitsWeek int `json:"hits_week" description:"周人气"`
HitsDay int `json:"hits_day" description:"天人气"`
}
// CreateRes 创建视频响应
type CreateRes struct{}
// UpdateReq 更新视频请求
type UpdateReq struct {
g.Meta `path:"/video/update" method:"post" summary:"更新视频" tags:"视频"`
Id uint `json:"id" description:""`
Title string `json:"title" description:"标题"`
TitleSub string `json:"title_sub" description:"副标"`
Letter string `json:"letter" description:"首字母"`
Tag string `json:"tag" description:"TAG"`
Color string `json:"color" description:"颜色"`
Lock uint `json:"lock" description:"锁定"`
Copyright uint `json:"copyright" description:"版权"`
IsEnd uint `json:"is_end" description:"完结"`
Status uint `json:"status" description:"状态"`
CategoryId uint `json:"category_id" description:"分类"`
Pic string `json:"pic" description:"图片"`
PicId string `json:"pic_id" description:"图片编号"`
PicLocal string `json:"pic_local" description:""`
PicThumb string `json:"pic_thumb" description:"缩略图"`
PicSlide string `json:"pic_slide" description:"轮播"`
PicScreenshot string `json:"pic_screenshot" description:"截图"`
Actor string `json:"actor" description:"演员"`
Director string `json:"director" description:"导演"`
Writer string `json:"writer" description:"编剧"`
Remarks string `json:"remarks" description:"备注"`
Pubdate string `json:"pubdate" description:"发布时间"`
Total int `json:"total" description:"总集数"`
Serial string `json:"serial" description:"连载数"`
Duration string `json:"duration" description:"视频时长"`
Tv string `json:"tv" description:"电视频道"`
Weekday string `json:"weekday" description:"节目周期"`
Class string `json:"class" description:"扩展分类"`
Area string `json:"area" description:"地区"`
Lang string `json:"lang" description:"语言"`
Jumpurl string `json:"jumpurl" description:"跳转URL"`
Version string `json:"version" description:"资源版本"`
Year int `json:"year" description:"年份"`
State string `json:"state" description:"资源类别"`
DoubanScore float64 `json:"douban_score" description:"豆瓣评分"`
DoubanId int `json:"douban_id" description:"豆瓣ID"`
Up int `json:"up" description:"顶"`
Down int `json:"down" description:"踩"`
Hits int `json:"hits" description:"人气"`
HitsMonth int `json:"hits_month" description:"月人气"`
HitsWeek int `json:"hits_week" description:"周人气"`
HitsDay int `json:"hits_day" description:"天人气"`
}
// UpdateRes 更新视频响应
type UpdateRes struct{}
// DeleteReq 删除视频请求
type DeleteReq struct {
g.Meta `path:"/video/delete" method:"post" summary:"删除视频" tags:"视频"`
Id uint `json:"id" description:"视频ID"`
}
// DeleteRes 删除视频响应
type DeleteRes struct{}
// BatchDeleteReq 批量删除视频请求
type BatchDeleteReq struct {
g.Meta `path:"/video/batch/delete" method:"post" summary:"批量删除视频" tags:"视频"`
Ids []uint `json:"ids" description:"视频ID数组"`
}
// BatchDeleteRes 批量删除视频响应
type BatchDeleteRes struct{}
// GetReq 获取视频请求
type GetReq struct {
g.Meta `path:"/video/get" method:"post" summary:"获取视频" tags:"视频"`
Id uint `json:"id" description:"视频ID"`
}
// GetRes 获取视频响应
type GetRes struct {
}

20
app/api/video/video.go

@ -0,0 +1,20 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package video
import (
"context"
"xgit.pub/module/cms/app/api/video/v1"
)
type IVideoV1 interface {
GetList(ctx context.Context, req *v1.GetListReq) (res *v1.GetListRes, err error)
Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error)
Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error)
Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error)
BatchDelete(ctx context.Context, req *v1.BatchDeleteReq) (res *v1.BatchDeleteRes, err error)
Get(ctx context.Context, req *v1.GetReq) (res *v1.GetRes, err error)
}

5
app/controller/video/video.go

@ -0,0 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package video

15
app/controller/video/video_new.go

@ -0,0 +1,15 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package video
import (
"xgit.pub/module/cms/app/api/video"
)
type ControllerV1 struct{}
func NewV1() video.IVideoV1 {
return &ControllerV1{}
}

14
app/controller/video/video_v1_batch_delete.go

@ -0,0 +1,14 @@
package video
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"xgit.pub/module/cms/app/api/video/v1"
)
func (c *ControllerV1) BatchDelete(ctx context.Context, req *v1.BatchDeleteReq) (res *v1.BatchDeleteRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

14
app/controller/video/video_v1_create.go

@ -0,0 +1,14 @@
package video
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"xgit.pub/module/cms/app/api/video/v1"
)
func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

14
app/controller/video/video_v1_delete.go

@ -0,0 +1,14 @@
package video
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"xgit.pub/module/cms/app/api/video/v1"
)
func (c *ControllerV1) Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

14
app/controller/video/video_v1_get.go

@ -0,0 +1,14 @@
package video
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"xgit.pub/module/cms/app/api/video/v1"
)
func (c *ControllerV1) Get(ctx context.Context, req *v1.GetReq) (res *v1.GetRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

14
app/controller/video/video_v1_get_list.go

@ -0,0 +1,14 @@
package video
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"xgit.pub/module/cms/app/api/video/v1"
)
func (c *ControllerV1) GetList(ctx context.Context, req *v1.GetListReq) (res *v1.GetListRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

14
app/controller/video/video_v1_update.go

@ -0,0 +1,14 @@
package video
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"xgit.pub/module/cms/app/api/video/v1"
)
func (c *ControllerV1) Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

107
app/logic/video/video.go

@ -0,0 +1,107 @@
package video
import (
"context"
"github.com/gogf/gf/v2/text/gstr"
v1 "xgit.pub/module/cms/app/api/video/v1"
"xgit.pub/module/cms/app/dao"
"xgit.pub/module/cms/app/model"
)
type sVideo struct {
}
func (s *sVideo) GetList(ctx context.Context, req *v1.GetListReq) (res *v1.GetListRes, err error) {
res = &v1.GetListRes{}
tx := dao.Video.Ctx(ctx)
//var ms []*entity.Video
var ms []*model.Video
if req.Title != "" { //标题
tx = tx.WhereLike(dao.Video.Columns().Title, "%"+req.Title+"%")
}
//if req.TitleSub != "" {
// tx = tx.WhereLike(dao.Video.Columns().TitleSub, "%"+req.TitleSub+"%")
//}
if len(req.CategoryIdList) > 0 { //分类
tx = tx.WhereIn(dao.Video.Columns().CategoryId, req.CategoryIdList)
}
if req.Lock != "" { //锁定
tx = tx.Where(dao.Video.Columns().Lock, req.Lock)
}
if req.IsEnd != "" { //完结
tx = tx.Where(dao.Video.Columns().IsEnd, req.IsEnd)
}
if req.Copyright != "" { //版权
tx = tx.Where(dao.Video.Columns().Copyright, req.Copyright)
}
if req.Year > 0 { //年份
tx = tx.Where(dao.Video.Columns().Year, req.Year)
}
if req.Actor != "" { //演员
tx = tx.WhereLike(dao.Video.Columns().Actor, "%"+req.Actor+"%")
}
if req.Director != "" { //导演
tx = tx.WhereLike(dao.Video.Columns().Director, "%"+req.Director+"%")
}
if req.Writer != "" { //编剧
tx = tx.WhereLike(dao.Video.Columns().Writer, "%"+req.Writer+"%")
}
if err = tx.Page(req.Page, req.PageSize).Scan(&ms); err != nil {
return
}
if res.Total, err = tx.Count(); err != nil {
return
}
for idx, item := range ms {
if len(item.Actor) > 0 {
ms[idx].ActorList = gstr.Split(item.Actor, ",")
} else {
ms[idx].ActorList = []string{}
}
if len(item.Director) > 0 {
ms[idx].DirectorList = gstr.Split(item.Director, ",")
} else {
ms[idx].DirectorList = []string{}
}
if len(item.Writer) > 0 {
ms[idx].WriterList = gstr.Split(item.Writer, ",")
} else {
ms[idx].WriterList = []string{}
}
}
//res.Total, _ = tx.Count()
//err = tx.GetList(req.GetList, req.PageSize).Scan(&ms)
res.Page = req.Page
res.PageSize = req.PageSize
res.Rows = ms
return
}
// Create 创建
func (s *sVideo) Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error) {
return
}
// Update 更新
func (s *sVideo) Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error) {
return
}
// Delete 删除
func (s *sVideo) Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error) {
return
}
// BatchDelete 批量删除
func (s *sVideo) BatchDelete(ctx context.Context, req *v1.BatchDeleteReq) (res *v1.BatchDeleteRes, err error) {
return
}
// Get 获取
func (s *sVideo) Get(ctx context.Context, req *v1.GetReq) (res *v1.GetRes, err error) {
return
}

56
app/model/video.go

@ -0,0 +1,56 @@
package model
import "github.com/gogf/gf/v2/os/gtime"
type Video struct {
Id uint `json:"id" description:""`
Title string `json:"title" description:"标题"`
TitleSub string `json:"title_sub" description:"副标"`
Letter string `json:"letter" description:"首字母"`
Tag string `json:"tag" description:"TAG"`
Color string `json:"color" description:"颜色"`
Lock uint `json:"lock" description:"锁定"`
Copyright uint `json:"copyright" description:"版权"`
IsEnd uint `json:"is_end" description:"完结"`
Status uint `json:"status" description:"状态"`
Class string `json:"class" description:"扩展分类"`
CategoryId uint `json:"category_id" description:"分类"`
Pic string `json:"pic" description:"图片"`
PicId string `json:"pic_id" description:"图片编号"`
PicLocal string `json:"pic_local" description:""`
PicThumb string `json:"pic_thumb" description:"缩略图"`
PicSlide string `json:"pic_slide" description:"轮播"`
PicScreenshot string `json:"pic_screenshot" description:"截图"`
PicStatus uint `json:"pic_status" description:"图片状态"`
Actor string `json:"actor" description:"演员"`
Director string `json:"director" description:"导演"`
Writer string `json:"writer" description:"编剧"`
Remarks string `json:"remarks" description:"备注"`
Pubdate string `json:"pubdate" description:"发布时间"`
Total int `json:"total" description:"总集数"`
Serial string `json:"serial" description:"连载数"`
Duration string `json:"duration" description:"视频时长"`
Tv string `json:"tv" description:"电视频道"`
Weekday string `json:"weekday" description:"节目周期"`
Area string `json:"area" description:"地区"`
Lang string `json:"lang" description:"语言"`
Jumpurl string `json:"jumpurl" description:"跳转URL"`
Version string `json:"version" description:"资源版本"`
Year int `json:"year" description:"年份"`
State string `json:"state" description:"资源类别"`
DoubanScore float64 `json:"douban_score" description:"豆瓣评分"`
DoubanId int `json:"douban_id" description:"豆瓣ID"`
Up int `json:"up" description:"顶"`
Down int `json:"down" description:"踩"`
Hits int `json:"hits" description:"人气"`
HitsMonth int `json:"hits_month" description:"月人气"`
HitsWeek int `json:"hits_week" description:"周人气"`
HitsDay int `json:"hits_day" description:"天人气"`
Content string `json:"content" description:"内容"`
Blurb string `json:"blurb" description:"简要介绍"`
CreatedAt *gtime.Time `json:"created_at" description:""`
UpdatedAt *gtime.Time `json:"updated_at" description:""`
ActorList []string `json:"actor_list" description:"演员"`
DirectorList []string `json:"director_list" description:"导演"`
WriterList []string `json:"writer_list" description:"编剧"`
}

43
app/service/video.go

@ -0,0 +1,43 @@
// ================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// You can delete these comments if you wish manually maintain this interface file.
// ================================================================================
package service
import (
"context"
v1 "xgit.pub/module/cms/app/api/video/v1"
)
type (
IVideo interface {
GetList(ctx context.Context, req *v1.GetListReq) (res *v1.GetListRes, err error)
// Create 创建
Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error)
// Update 更新
Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error)
// Delete 删除
Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error)
// BatchDelete 批量删除
BatchDelete(ctx context.Context, req *v1.BatchDeleteReq) (res *v1.BatchDeleteRes, err error)
// Get 获取
Get(ctx context.Context, req *v1.GetReq) (res *v1.GetRes, err error)
}
)
var (
localVideo IVideo
)
func Video() IVideo {
if localVideo == nil {
panic("implement not found for interface IVideo, forgot register?")
}
return localVideo
}
func RegisterVideo(i IVideo) {
localVideo = i
}
Loading…
Cancel
Save