package controller import ( "context" "video-factory/shortdrama/model/dto" "video-factory/shortdrama/service" ) // ==================== Character CRUD ==================== func (c *drama) AddCharacter(ctx context.Context, req *dto.AddCharacterReq) (res *dto.GetDramaRes, err error) { var voicePath, portraitPath string if req.VoiceFile != nil { f, err := req.VoiceFile.Open() if err != nil { return nil, err } defer func() { _ = f.Close() }() voicePath, err = service.DramaService.SaveCharacterFile(ctx, req.DramaId, f, req.VoiceFile.Filename, "演员声音", req.Name) if err != nil { return nil, err } } if req.PortraitFile != nil { f, err := req.PortraitFile.Open() if err != nil { return nil, err } defer func() { _ = f.Close() }() portraitPath, err = service.DramaService.SaveCharacterFile(ctx, req.DramaId, f, req.PortraitFile.Filename, "演员形象", req.Name) if err != nil { return nil, err } } _, err = service.DramaService.AddCharacter(ctx, req.DramaId, req.Name, req.Description, voicePath, portraitPath) 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) { var voicePath, portraitPath string if req.VoiceFile != nil { f, err := req.VoiceFile.Open() if err != nil { return nil, err } defer func() { _ = f.Close() }() voicePath, err = service.DramaService.SaveCharacterFile(ctx, req.DramaId, f, req.VoiceFile.Filename, "演员声音", req.Name) if err != nil { return nil, err } } if req.PortraitFile != nil { f, err := req.PortraitFile.Open() if err != nil { return nil, err } defer func() { _ = f.Close() }() portraitPath, err = service.DramaService.SaveCharacterFile(ctx, req.DramaId, f, req.PortraitFile.Filename, "演员形象", req.Name) if err != nil { return nil, err } } err = service.DramaService.UpdateCharacter(ctx, req.DramaId, req.CharId, req.Name, req.Description, voicePath, portraitPath) 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}) }