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) }