diff --git a/cmd/main.go b/cmd/main.go index 7c8377a..8d22f17 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -11,7 +11,7 @@ import ( "sync" "syscall" - "ticket-creator/domain" + "ticket-creator/ext" "github.com/joho/godotenv" "github.com/mr-linch/go-tg" @@ -87,11 +87,16 @@ func newTicketAnswer(name string) string { func newRepoHandler(ctx context.Context, mu *tgb.MessageUpdate) error { - str := strings.Replace(mu.Text, "/newrepo", "", 1) + 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) } @@ -113,7 +118,7 @@ func pingHandler(ctx context.Context, mu *tgb.MessageUpdate) error { } func workflow(name string) (string, error) { - yt := domain.NewYT(os.Getenv("YT_URL"), os.Getenv("YT_TOKEN")) + yt := ext.NewYT(os.Getenv("YT_URL"), os.Getenv("YT_TOKEN")) projects, err := yt.GetProjects() if err != nil { @@ -154,7 +159,7 @@ func workflow(name string) (string, error) { } func createRepo(name string, param uint) (string, error) { - gb := domain.NewGitBucket(os.Getenv("GIT_BASE_URL"), os.Getenv("GIT_TOKEN")) + gb := ext.NewGitBucket(os.Getenv("GIT_BASE_URL"), os.Getenv("GIT_TOKEN")) repo, err := gb.NewRepo(name) if err != nil { return "", err @@ -176,7 +181,7 @@ func createRepo(name string, param uint) (string, error) { } func createFolder(name string) string { - oc := domain.NewCloud(os.Getenv("CLOUD_BASE_URL"), os.Getenv("CLOUD_USER"), os.Getenv("CLOUD_PASS")) + 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 diff --git a/domain/client.go b/ext/client.go similarity index 97% rename from domain/client.go rename to ext/client.go index 217c2ae..d118d2e 100644 --- a/domain/client.go +++ b/ext/client.go @@ -1,4 +1,4 @@ -package domain +package ext import ( "fmt" diff --git a/domain/cloud.go b/ext/cloud.go similarity index 98% rename from domain/cloud.go rename to ext/cloud.go index 328da56..3ee1612 100644 --- a/domain/cloud.go +++ b/ext/cloud.go @@ -1,4 +1,4 @@ -package domain +package ext import ( "time" diff --git a/domain/git.go b/ext/git.go similarity index 71% rename from domain/git.go rename to ext/git.go index cb8f07c..e476c13 100644 --- a/domain/git.go +++ b/ext/git.go @@ -1,7 +1,9 @@ -package domain +package ext import ( "log" + "regexp" + "strings" "time" "github.com/imroc/req/v3" @@ -38,7 +40,26 @@ type Repo struct { SshUrl string `json:"ssh_url"` } +func gitHubLikeNaming(input string) string { + // Remove leading and trailing whitespace + input = strings.TrimSpace(input) + + // Replace non-Latin letters with spaces + reg := regexp.MustCompile("[^a-zA-Z]+") + input = reg.ReplaceAllString(input, " ") + + // Split into words and capitalize first letter of each + words := strings.Fields(input) + for i, word := range words { + words[i] = strings.ToLower(word) + } + + // Join words and return + return strings.Join(words, "-") +} + func (gb *gitbucket) NewRepo(name string) (*Repo, error) { + name = gitHubLikeNaming(name) type request struct { Name string `json:"name"` @@ -70,11 +91,12 @@ func (gb *gitbucket) NewRepo(name string) (*Repo, error) { Perm: "admin", } - _, err = gb.R(). + resp, err = gb.R(). SetBody(&payloadPermission). Put("/repos/naudachu/" + name + "/collaborators/apps") if err != nil { + log.Print(resp) return nil, err } diff --git a/domain/yt.go b/ext/yt.go similarity index 99% rename from domain/yt.go rename to ext/yt.go index 1f9119a..7339282 100644 --- a/domain/yt.go +++ b/ext/yt.go @@ -1,4 +1,4 @@ -package domain +package ext import ( "fmt"