From 1f39c283c5cfb9788e8a9001f7467857cfe0f28e Mon Sep 17 00:00:00 2001 From: naudachu Date: Mon, 12 Jun 2023 20:42:37 +0500 Subject: [PATCH] forget to commit main.go --- cmd/main.go | 149 ++-------------------------------------------------- 1 file changed, 4 insertions(+), 145 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index d412675..3ce3031 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -2,16 +2,12 @@ package main import ( "context" - "errors" "fmt" "log" "os" "os/signal" - "strings" - "sync" "syscall" - - "ticket-creator/ext" + "ticket-creator/handler" "github.com/joho/godotenv" "github.com/mr-linch/go-tg" @@ -39,153 +35,16 @@ func env(envFilePath string) { } } -func errorAnswer(errorMsg string) string { - return tg.HTML.Text( - tg.HTML.Line( - tg.HTML.Italic(errorMsg), - ), - ) -} - func run(ctx context.Context) error { client := tg.New(os.Getenv("TG_API")) router := tgb.NewRouter(). - Message(newTicketHandler, tgb.TextHasPrefix("/new")). - Message(pingHandler, tgb.Command("ping")). - Message(newRepoHandler, tgb.TextHasPrefix("/repo")) + Message(handler.NewTicketHandler, tgb.TextHasPrefix("/new")). + Message(handler.PingHandler, tgb.Command("ping")). + Message(handler.NewRepoHandler, tgb.TextHasPrefix("/repo")) return tgb.NewPoller( router, client, ).Run(ctx) } - -func newTicketHandler(ctx context.Context, mu *tgb.MessageUpdate) error { - - str := strings.Replace(mu.Text, "/new", "", 1) - if str == "" { - return errors.New("empty command provided") - } - issueKeyStr, err := workflow(str) - if err != nil { - return mu.Answer(errorAnswer(err.Error())).ParseMode(tg.HTML).DoVoid(ctx) - } - - return mu.Answer(newTicketAnswer(issueKeyStr)).ParseMode(tg.HTML).DoVoid(ctx) -} - -func newTicketAnswer(name string) string { - return tg.HTML.Text( - tg.HTML.Line( - "🤘 Ticket ", - tg.HTML.Link(name, fmt.Sprintf("https://marlerino.youtrack.cloud/issue/%s", name)), - "has been created!", - ), - ) -} - -func newRepoHandler(ctx context.Context, mu *tgb.MessageUpdate) error { - - str := strings.Replace(mu.Text, "/repo", "", 1) - str = strings.TrimSpace(str) - str = strings.Replace(str, " ", "-", -1) - - if str == "" { - return errors.New("empty command provided") - } - - repoStr, err := createRepo(str, 0) - - if err != nil { - return mu.Answer(errorAnswer(err.Error())).ParseMode(tg.HTML).DoVoid(ctx) - } - - return mu.Answer(newRepoAnswer(repoStr)).ParseMode(tg.HTML).DoVoid(ctx) -} - -func newRepoAnswer(name string) string { - return tg.HTML.Text( - tg.HTML.Line( - "Repo ", - name, - "has been created!", - ), - ) -} - -func pingHandler(ctx context.Context, mu *tgb.MessageUpdate) error { - return mu.Answer("pong").DoVoid(ctx) -} - -func workflow(name string) (string, error) { - yt := ext.NewYT(os.Getenv("YT_URL"), os.Getenv("YT_TOKEN")) - - projects, err := yt.GetProjects() - if err != nil { - return "", err - } - - issue, err := yt.CreateIssue(projects[1].ID, name) - if err != nil { - return "", err - } - if issue != nil { - var ( - wg sync.WaitGroup - git, gitBuild, folder string - ) - - wg.Add(3) - - go func() { - defer wg.Done() - git, _ = createRepo(issue.Key, 0) - }() - - go func() { - defer wg.Done() - gitBuild, _ = createRepo(issue.Key+"-build", 1) - }() - go func() { - defer wg.Done() - folder = createFolder(issue.Key + " - " + issue.Summary) - }() - - wg.Wait() - - yt.UpdateIssue(issue, folder, git, gitBuild) - } - return issue.Key, nil -} - -func createRepo(name string, param uint) (string, error) { - gb := ext.NewGitBucket(os.Getenv("GIT_BASE_URL"), os.Getenv("GIT_TOKEN")) - repo, err := gb.NewRepo(name) - if err != nil { - return "", err - } - - // Result string formatting: - if repo != nil { - switch param { - case 0: - return repo.HtmlUrl, nil - case 1: - return fmt.Sprintf("ssh://%s/%s.git", repo.SshUrl, repo.FullName), nil - default: - return repo.CloneUrl, nil - } - } - - return "", err -} - -func createFolder(name string) string { - oc := ext.NewCloud(os.Getenv("CLOUD_BASE_URL"), os.Getenv("CLOUD_USER"), os.Getenv("CLOUD_PASS")) - cloud, _ := oc.CreateFolder(name) - if cloud != nil { - return cloud.FolderPath - } - return "no-folder" -}