Files
video-factory/shortdrama/controller/drama_controller.go
T
2026-06-18 16:01:39 +08:00

133 lines
4.5 KiB
Go

package controller
import (
"context"
"fmt"
"video-factory/shortdrama/model/dto"
"video-factory/shortdrama/service"
)
type drama struct{}
var Drama = new(drama)
// ==================== Drama CRUD ====================
func (c *drama) List(ctx context.Context, req *dto.ListDramaReq) (res *dto.ListDramaRes, err error) {
list, err := service.DramaService.List(ctx)
if err != nil {
return nil, err
}
return &dto.ListDramaRes{List: list}, nil
}
func (c *drama) Create(ctx context.Context, req *dto.CreateDramaReq) (res *dto.CreateDramaRes, err error) {
id, err := service.DramaService.Create(ctx, req.Title, req.Style, int64(req.EpisodeDuration))
if err != nil {
return nil, err
}
return &dto.CreateDramaRes{Id: id}, nil
}
func (c *drama) Get(ctx context.Context, req *dto.GetDramaReq) (res *dto.GetDramaRes, err error) {
drama, characters, episodes, tasks, err := service.DramaService.Get(ctx, req.Id)
if err != nil {
return nil, err
}
return &dto.GetDramaRes{
Drama: drama,
Characters: characters,
Episodes: episodes,
Tasks: tasks,
}, nil
}
func (c *drama) Update(ctx context.Context, req *dto.UpdateDramaReq) (res *struct{}, err error) {
return nil, service.DramaService.Update(ctx, req.Id, req.Title, req.Style, int64(req.EpisodeDuration))
}
func (c *drama) Delete(ctx context.Context, req *dto.DeleteDramaReq) (res *struct{}, err error) {
return nil, service.DramaService.Delete(ctx, req.Id)
}
// ==================== Character CRUD ====================
func (c *drama) AddCharacter(ctx context.Context, req *dto.AddCharacterReq) (res *dto.GetDramaRes, err error) {
_, err = service.DramaService.AddCharacter(ctx, req.DramaId, req.Name, req.Description, req.VoiceType, req.PortraitUrl)
if err != nil {
return nil, err
}
return c.Get(ctx, &dto.GetDramaReq{Id: req.DramaId})
}
func (c *drama) UpdateCharacter(ctx context.Context, req *dto.UpdateCharacterReq) (res *dto.GetDramaRes, err error) {
err = service.DramaService.UpdateCharacter(ctx, req.DramaId, req.CharId, req.Name, req.Description, req.VoiceType, req.PortraitUrl)
if err != nil {
return nil, err
}
return c.Get(ctx, &dto.GetDramaReq{Id: req.DramaId})
}
func (c *drama) DeleteCharacter(ctx context.Context, req *dto.DeleteCharacterReq) (res *dto.GetDramaRes, err error) {
err = service.DramaService.DeleteCharacter(ctx, req.DramaId, req.CharId)
if err != nil {
return nil, err
}
return c.Get(ctx, &dto.GetDramaReq{Id: req.DramaId})
}
// ==================== Episode CRUD ====================
func (c *drama) AddEpisode(ctx context.Context, req *dto.AddEpisodeReq) (res *dto.GetDramaRes, err error) {
_, err = service.DramaService.AddEpisode(ctx, req.DramaId, req.Title, req.Script, req.Index)
if err != nil {
return nil, err
}
return c.Get(ctx, &dto.GetDramaReq{Id: req.DramaId})
}
func (c *drama) UpdateEpisode(ctx context.Context, req *dto.UpdateEpisodeReq) (res *dto.GetDramaRes, err error) {
err = service.DramaService.UpdateEpisode(ctx, req.DramaId, req.EpId, req.Title, req.Script, req.Index)
if err != nil {
return nil, err
}
return c.Get(ctx, &dto.GetDramaReq{Id: req.DramaId})
}
func (c *drama) DeleteEpisode(ctx context.Context, req *dto.DeleteEpisodeReq) (res *dto.GetDramaRes, err error) {
err = service.DramaService.DeleteEpisode(ctx, req.DramaId, req.EpId)
if err != nil {
return nil, err
}
return c.Get(ctx, &dto.GetDramaReq{Id: req.DramaId})
}
// ==================== Generation ====================
func (c *drama) GenerateEpisode(ctx context.Context, req *dto.GenerateEpisodeReq) (res *struct{}, err error) {
return nil, service.DramaService.GenerateEpisode(ctx, req.DramaId, req.EpId)
}
func (c *drama) ContinueSegment(ctx context.Context, req *dto.ContinueSegmentReq) (res *struct{}, err error) {
return nil, service.DramaService.ContinueSegment(ctx, req.TaskId)
}
func (c *drama) FeedbackSegment(ctx context.Context, req *dto.FeedbackSegmentReq) (res *struct{}, err error) {
return nil, service.DramaService.FeedbackSegment(ctx, req.TaskId, req.Feedback)
}
func (c *drama) GetEpisodeTask(ctx context.Context, req *dto.GetEpisodeTaskReq) (res *dto.GetEpisodeTaskRes, err error) {
task, err := service.DramaService.GetEpisodeTask(ctx, req.EpId)
if err != nil {
return nil, err
}
return &dto.GetEpisodeTaskRes{Task: task}, nil
}
// ==================== 保留旧版 Generate(兼容) ====================
func (c *drama) Generate(ctx context.Context, req *struct{}) (res *struct{}, err error) {
return nil, fmt.Errorf("旧版接口已弃用,请使用单集生成")
}