55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/repository"
|
|
)
|
|
|
|
type ScriptService struct {
|
|
repo *repository.ScriptInterpreterRepo
|
|
}
|
|
|
|
func NewScriptService(repo *repository.ScriptInterpreterRepo) *ScriptService {
|
|
return &ScriptService{repo: repo}
|
|
}
|
|
|
|
// ResolveCommand builds the full argv[] by prepending the interpreter's argv
|
|
// to the script text (as the last argument).
|
|
func (self *ScriptService) ResolveCommand(ctx context.Context, interpreterID int64, scriptText string) ([]string, error) {
|
|
interpreter, err := self.repo.GetByID(ctx, interpreterID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(interpreter.Argv) == 0 {
|
|
return nil, fmt.Errorf("interpreter %q has empty argv", interpreter.Name)
|
|
}
|
|
|
|
argv := make([]string, len(interpreter.Argv)+1)
|
|
copy(argv, interpreter.Argv)
|
|
argv[len(argv)-1] = scriptText
|
|
return argv, nil
|
|
}
|
|
|
|
func (self *ScriptService) Create(ctx context.Context, in repository.ScriptInterpreterCreate) (*repository.ScriptInterpreter, error) {
|
|
return self.repo.Create(ctx, in)
|
|
}
|
|
|
|
func (self *ScriptService) GetByID(ctx context.Context, id int64) (*repository.ScriptInterpreter, error) {
|
|
return self.repo.GetByID(ctx, id)
|
|
}
|
|
|
|
func (self *ScriptService) List(ctx context.Context) ([]repository.ScriptInterpreter, error) {
|
|
return self.repo.List(ctx)
|
|
}
|
|
|
|
func (self *ScriptService) Update(ctx context.Context, id int64, in repository.ScriptInterpreterUpdate) (*repository.ScriptInterpreter, error) {
|
|
return self.repo.Update(ctx, id, in)
|
|
}
|
|
|
|
func (self *ScriptService) Delete(ctx context.Context, id int64) error {
|
|
return self.repo.Delete(ctx, id)
|
|
}
|