forget to commit main.go

This commit is contained in:
naudachu 2023-06-12 20:42:37 +05:00
parent fd1c8fc894
commit 1f39c283c5
1 changed files with 4 additions and 145 deletions

View File

@ -2,16 +2,12 @@ package main
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"log" "log"
"os" "os"
"os/signal" "os/signal"
"strings"
"sync"
"syscall" "syscall"
"ticket-creator/handler"
"ticket-creator/ext"
"github.com/joho/godotenv" "github.com/joho/godotenv"
"github.com/mr-linch/go-tg" "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 { func run(ctx context.Context) error {
client := tg.New(os.Getenv("TG_API")) client := tg.New(os.Getenv("TG_API"))
router := tgb.NewRouter(). router := tgb.NewRouter().
Message(newTicketHandler, tgb.TextHasPrefix("/new")). Message(handler.NewTicketHandler, tgb.TextHasPrefix("/new")).
Message(pingHandler, tgb.Command("ping")). Message(handler.PingHandler, tgb.Command("ping")).
Message(newRepoHandler, tgb.TextHasPrefix("/repo")) Message(handler.NewRepoHandler, tgb.TextHasPrefix("/repo"))
return tgb.NewPoller( return tgb.NewPoller(
router, router,
client, client,
).Run(ctx) ).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"
}