ticket-pimp/telegram/handler/handle_git.go

63 lines
1.1 KiB
Go

package handler
import (
"context"
"errors"
"fmt"
"strings"
"ticket-pimp/internal/domain"
"github.com/mr-linch/go-tg"
"github.com/mr-linch/go-tg/tgb"
)
type git struct {
name string
url string
git string
ssh string
}
func newGit(g *domain.Git) *git {
return &git{
name: g.Name,
url: g.HtmlUrl,
git: g.CloneUrl,
ssh: fmt.Sprintf("ssh://%s/%s.git", g.SshUrl, g.FullName),
}
}
// FYI: Telegram doesn't renders this hyperlink, if the url is localhost 🤷‍♂️
func (g *git) PrepareAnswer() string {
return tg.HTML.Text(
tg.HTML.Line(
"Repo ",
tg.HTML.Link(g.name, g.url),
"has been created!",
),
)
}
func (h *Handler) NewRepoHandler(ctx context.Context, mu *tgb.MessageUpdate) error {
str := strings.Replace(mu.Text, "/repo", "", 1)
if str == "" {
return errors.New("empty command provided")
}
var g *domain.Git
g, err := h.git.CreateRepo(str)
if err != nil {
return mu.Answer(errorAnswer(err.Error())).ParseMode(tg.HTML).DoVoid(ctx)
}
resp := newGit(g).PrepareAnswer()
h.LogMessage(ctx, mu, resp)
return mu.Answer(resp).ParseMode(tg.HTML).DoVoid(ctx)
}