- farm task handler;
This commit is contained in:
parent
da119ab4d5
commit
77b8bd8abb
|
|
@ -27,9 +27,9 @@ func (h *router) CreateExternalTask() CommandRoute {
|
||||||
|
|
||||||
s.InteractionRespond(i.Interaction, &initialResponse)
|
s.InteractionRespond(i.Interaction, &initialResponse)
|
||||||
|
|
||||||
go func() {
|
// go func() {
|
||||||
h.controller.InitTask("something like a default description")
|
// h.controller.InitTask("something like a default description")
|
||||||
}()
|
// }()
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@ package handler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"strings"
|
"strings"
|
||||||
"ticket-pimp/internal/domain"
|
"ticket-pimp/internal/domain"
|
||||||
|
|
||||||
|
|
@ -38,33 +36,42 @@ func (h *Handler) FarmTaskHandler(ctx context.Context, mu *tgb.MessageUpdate) er
|
||||||
mu.Chat.ID.PeerID(),
|
mu.Chat.ID.PeerID(),
|
||||||
)
|
)
|
||||||
|
|
||||||
id, err := h.coda.CreateTask(t.Summary, t.Description, t.Creator, t.CreatorLink)
|
err := h.controller.InitTask(t)
|
||||||
if err != nil {
|
|
||||||
answer := errorAnswer(err.Error())
|
|
||||||
h.LogMessage(ctx, mu, answer)
|
|
||||||
return mu.Answer(answer).ParseMode(tg.HTML).DoVoid(ctx)
|
|
||||||
}
|
|
||||||
if id == "" {
|
|
||||||
answer := errorAnswer("task wasn't created")
|
|
||||||
h.LogMessage(ctx, mu, answer)
|
|
||||||
return mu.Answer(answer).ParseMode(tg.HTML).DoVoid(ctx)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = mu.Answer(fmt.Sprintf("Задача с id: %s была создана, жду ссылку", id)).DoVoid(ctx)
|
// Coda.io was deprecated!
|
||||||
if err != nil {
|
|
||||||
log.Println("бот не смог ответить про создание задачи")
|
|
||||||
}
|
|
||||||
|
|
||||||
url, err := h.coda.GetRowLink(id)
|
// id, err := h.coda.CreateTask(t.Summary, t.Description, t.Creator, t.CreatorLink)
|
||||||
|
// if err != nil {
|
||||||
|
// answer := errorAnswer(err.Error())
|
||||||
|
// h.LogMessage(ctx, mu, answer)
|
||||||
|
// return mu.Answer(answer).ParseMode(tg.HTML).DoVoid(ctx)
|
||||||
|
// }
|
||||||
|
// if id == "" {
|
||||||
|
// answer := errorAnswer("task wasn't created")
|
||||||
|
// h.LogMessage(ctx, mu, answer)
|
||||||
|
// return mu.Answer(answer).ParseMode(tg.HTML).DoVoid(ctx)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// err = mu.Answer(fmt.Sprintf("Задача с id: %s была создана, жду ссылку", id)).DoVoid(ctx)
|
||||||
|
// if err != nil {
|
||||||
|
// log.Println("бот не смог ответить про создание задачи")
|
||||||
|
// }
|
||||||
|
|
||||||
|
// url, err := h.coda.GetRowLink(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
answer := err.Error()
|
answer := err.Error()
|
||||||
h.LogMessage(ctx, mu, answer)
|
h.LogMessage(ctx, mu, answer)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
t.URL = url
|
// t.URL = url
|
||||||
|
|
||||||
|
// answer := tg.HTML.Text(
|
||||||
|
// tg.HTML.Line(tg.HTML.Link("🤘 Задача", t.URL), "была создана!"))
|
||||||
|
// h.LogMessage(ctx, mu, answer)
|
||||||
|
// return mu.Answer(answer).
|
||||||
|
// ReplyToMessageID(msgID).ParseMode(tg.HTML).DisableWebPagePreview(true).DoVoid(ctx)
|
||||||
answer := tg.HTML.Text(
|
answer := tg.HTML.Text(
|
||||||
tg.HTML.Line(tg.HTML.Link("🤘 Задача", t.URL), "была создана!"))
|
tg.HTML.Line("🤘 Задача была создана!"))
|
||||||
h.LogMessage(ctx, mu, answer)
|
h.LogMessage(ctx, mu, answer)
|
||||||
return mu.Answer(answer).
|
return mu.Answer(answer).
|
||||||
ReplyToMessageID(msgID).ParseMode(tg.HTML).DisableWebPagePreview(true).DoVoid(ctx)
|
ReplyToMessageID(msgID).ParseMode(tg.HTML).DisableWebPagePreview(true).DoVoid(ctx)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package handler
|
package handler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"ticket-pimp/internal/controller"
|
||||||
"ticket-pimp/internal/services"
|
"ticket-pimp/internal/services"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -10,17 +11,20 @@ type Handler struct {
|
||||||
coda services.ICoda
|
coda services.ICoda
|
||||||
key string
|
key string
|
||||||
id string
|
id string
|
||||||
|
controller *controller.WorkflowController
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHandler(
|
func NewHandler(
|
||||||
git services.IGit,
|
git services.IGit,
|
||||||
cloud services.ICloud,
|
cloud services.ICloud,
|
||||||
coda services.ICoda,
|
coda services.ICoda,
|
||||||
|
controller *controller.WorkflowController,
|
||||||
) *Handler {
|
) *Handler {
|
||||||
|
|
||||||
return &Handler{
|
return &Handler{
|
||||||
git: git,
|
git: git,
|
||||||
cloud: cloud,
|
cloud: cloud,
|
||||||
coda: coda,
|
coda: coda,
|
||||||
|
controller: controller,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,21 +4,20 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"log"
|
"log"
|
||||||
"ticket-pimp/client/telegram/handler"
|
"ticket-pimp/client/telegram/handler"
|
||||||
|
"ticket-pimp/internal/controller"
|
||||||
"ticket-pimp/internal/domain"
|
"ticket-pimp/internal/domain"
|
||||||
"ticket-pimp/internal/services"
|
"ticket-pimp/internal/services"
|
||||||
|
|
||||||
"github.com/mr-linch/go-tg"
|
"github.com/mr-linch/go-tg"
|
||||||
"github.com/mr-linch/go-tg/tgb"
|
"github.com/mr-linch/go-tg/tgb"
|
||||||
|
|
||||||
tickets "ticket-pimp/internal/storage/db"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type TelegramOptions struct {
|
type TelegramOptions struct {
|
||||||
TicketsRepo *tickets.Queries
|
|
||||||
GitService *services.Git
|
GitService *services.Git
|
||||||
CloudService *services.Cloud
|
CloudService *services.Cloud
|
||||||
Coda *services.Coda
|
Coda *services.Coda
|
||||||
AppConfig *domain.Config
|
AppConfig *domain.Config
|
||||||
|
Controller *controller.WorkflowController
|
||||||
}
|
}
|
||||||
|
|
||||||
// runTgBot ...
|
// runTgBot ...
|
||||||
|
|
@ -35,6 +34,7 @@ func Run(ctx context.Context, opts TelegramOptions) error {
|
||||||
opts.GitService,
|
opts.GitService,
|
||||||
opts.CloudService,
|
opts.CloudService,
|
||||||
opts.Coda,
|
opts.Coda,
|
||||||
|
opts.Controller,
|
||||||
)
|
)
|
||||||
|
|
||||||
router := tgb.NewRouter().
|
router := tgb.NewRouter().
|
||||||
|
|
|
||||||
|
|
@ -63,11 +63,11 @@ func run(conf domain.Config) {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
opts := telegram.TelegramOptions{
|
opts := telegram.TelegramOptions{
|
||||||
// TicketsRepo: db,
|
|
||||||
GitService: gitService,
|
GitService: gitService,
|
||||||
CloudService: cloudService,
|
CloudService: cloudService,
|
||||||
Coda: codaService,
|
Coda: codaService,
|
||||||
AppConfig: &conf,
|
AppConfig: &conf,
|
||||||
|
Controller: controller,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := telegram.Run(ctx, opts); err != nil {
|
if err := telegram.Run(ctx, opts); err != nil {
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,10 @@ package controller
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"ticket-pimp/internal/domain"
|
||||||
"ticket-pimp/internal/storage/db"
|
"ticket-pimp/internal/storage/db"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -11,7 +13,7 @@ import (
|
||||||
"github.com/jackc/pgx/v5/pgtype"
|
"github.com/jackc/pgx/v5/pgtype"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (wc *WorkflowController) InitTask(description string) {
|
func (wc *WorkflowController) InitTask(t *domain.Task) error {
|
||||||
var (
|
var (
|
||||||
token = os.Getenv("DISCORD_TOKEN")
|
token = os.Getenv("DISCORD_TOKEN")
|
||||||
channel = os.Getenv("TASKS_CHANNEL")
|
channel = os.Getenv("TASKS_CHANNEL")
|
||||||
|
|
@ -27,8 +29,31 @@ func (wc *WorkflowController) InitTask(description string) {
|
||||||
log.Printf("cannot open the session: %v", err)
|
log.Printf("cannot open the session: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dbtask, err := wc.q.InsertTask(context.TODO(), pgtype.Text{String: st.ID, Valid: true})
|
||||||
|
dbtask, err := wc.q.InsertTask(context.TODO(), db.InsertTaskParams{
|
||||||
|
Creator: pgtype.Text{String: t.Creator, Valid: true},
|
||||||
|
CreatorLink: pgtype.Text{
|
||||||
|
String: t.CreatorLink,
|
||||||
|
Valid: true,
|
||||||
|
},
|
||||||
|
Description: pgtype.Text{
|
||||||
|
String: t.Description,
|
||||||
|
Valid: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Println("unable to insert task")
|
||||||
|
}
|
||||||
|
|
||||||
|
content := fmt.Sprintf(
|
||||||
|
"## TaskID: %d\nCreated by: %s\n\n%s",
|
||||||
|
dbtask.ID,
|
||||||
|
t.Creator,
|
||||||
|
t.Description,
|
||||||
|
)
|
||||||
|
|
||||||
msg := discordgo.MessageSend{
|
msg := discordgo.MessageSend{
|
||||||
Content: description,
|
Content: content,
|
||||||
Components: []discordgo.MessageComponent{
|
Components: []discordgo.MessageComponent{
|
||||||
discordgo.ActionsRow{
|
discordgo.ActionsRow{
|
||||||
Components: []discordgo.MessageComponent{
|
Components: []discordgo.MessageComponent{
|
||||||
|
|
@ -54,12 +79,9 @@ func (wc *WorkflowController) InitTask(description string) {
|
||||||
log.Println("unable to send task message")
|
log.Println("unable to send task message")
|
||||||
}
|
}
|
||||||
|
|
||||||
t, err := wc.q.InsertTask(context.TODO(), pgtype.Text{String: st.ID, Valid: true})
|
_ = dbtask
|
||||||
if err != nil {
|
_ = st
|
||||||
log.Println("unable to insert task")
|
return err
|
||||||
}
|
|
||||||
|
|
||||||
_ = t
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ type Task struct {
|
||||||
Creator pgtype.Text
|
Creator pgtype.Text
|
||||||
CreatorLink pgtype.Text
|
CreatorLink pgtype.Text
|
||||||
Messageid pgtype.Text
|
Messageid pgtype.Text
|
||||||
|
Description pgtype.Text
|
||||||
StartedAt pgtype.Timestamptz
|
StartedAt pgtype.Timestamptz
|
||||||
ClosedAt pgtype.Timestamptz
|
ClosedAt pgtype.Timestamptz
|
||||||
CreatedAt pgtype.Timestamptz
|
CreatedAt pgtype.Timestamptz
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ const closeTask = `-- name: CloseTask :one
|
||||||
UPDATE tasks
|
UPDATE tasks
|
||||||
SET closed_at = $1
|
SET closed_at = $1
|
||||||
WHERE messageID = $2
|
WHERE messageID = $2
|
||||||
RETURNING id, creator, creator_link, messageid, started_at, closed_at, created_at, deleted_at, updated_at
|
RETURNING id, creator, creator_link, messageid, description, started_at, closed_at, created_at, deleted_at, updated_at
|
||||||
`
|
`
|
||||||
|
|
||||||
type CloseTaskParams struct {
|
type CloseTaskParams struct {
|
||||||
|
|
@ -31,6 +31,7 @@ func (q *Queries) CloseTask(ctx context.Context, arg CloseTaskParams) (Task, err
|
||||||
&i.Creator,
|
&i.Creator,
|
||||||
&i.CreatorLink,
|
&i.CreatorLink,
|
||||||
&i.Messageid,
|
&i.Messageid,
|
||||||
|
&i.Description,
|
||||||
&i.StartedAt,
|
&i.StartedAt,
|
||||||
&i.ClosedAt,
|
&i.ClosedAt,
|
||||||
&i.CreatedAt,
|
&i.CreatedAt,
|
||||||
|
|
@ -145,21 +146,28 @@ func (q *Queries) GetTicketByID(ctx context.Context, id int32) (Ticket, error) {
|
||||||
|
|
||||||
const insertTask = `-- name: InsertTask :one
|
const insertTask = `-- name: InsertTask :one
|
||||||
INSERT INTO tasks (
|
INSERT INTO tasks (
|
||||||
messageID
|
creator, creator_link, description
|
||||||
) VALUES (
|
) VALUES (
|
||||||
$1
|
$1, $2, $3
|
||||||
)
|
)
|
||||||
RETURNING id, creator, creator_link, messageid, started_at, closed_at, created_at, deleted_at, updated_at
|
RETURNING id, creator, creator_link, messageid, description, started_at, closed_at, created_at, deleted_at, updated_at
|
||||||
`
|
`
|
||||||
|
|
||||||
func (q *Queries) InsertTask(ctx context.Context, messageid pgtype.Text) (Task, error) {
|
type InsertTaskParams struct {
|
||||||
row := q.db.QueryRow(ctx, insertTask, messageid)
|
Creator pgtype.Text
|
||||||
|
CreatorLink pgtype.Text
|
||||||
|
Description pgtype.Text
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) InsertTask(ctx context.Context, arg InsertTaskParams) (Task, error) {
|
||||||
|
row := q.db.QueryRow(ctx, insertTask, arg.Creator, arg.CreatorLink, arg.Description)
|
||||||
var i Task
|
var i Task
|
||||||
err := row.Scan(
|
err := row.Scan(
|
||||||
&i.ID,
|
&i.ID,
|
||||||
&i.Creator,
|
&i.Creator,
|
||||||
&i.CreatorLink,
|
&i.CreatorLink,
|
||||||
&i.Messageid,
|
&i.Messageid,
|
||||||
|
&i.Description,
|
||||||
&i.StartedAt,
|
&i.StartedAt,
|
||||||
&i.ClosedAt,
|
&i.ClosedAt,
|
||||||
&i.CreatedAt,
|
&i.CreatedAt,
|
||||||
|
|
@ -254,7 +262,7 @@ const startTask = `-- name: StartTask :one
|
||||||
UPDATE tasks
|
UPDATE tasks
|
||||||
SET started_at = $1
|
SET started_at = $1
|
||||||
WHERE messageID = $2
|
WHERE messageID = $2
|
||||||
RETURNING id, creator, creator_link, messageid, started_at, closed_at, created_at, deleted_at, updated_at
|
RETURNING id, creator, creator_link, messageid, description, started_at, closed_at, created_at, deleted_at, updated_at
|
||||||
`
|
`
|
||||||
|
|
||||||
type StartTaskParams struct {
|
type StartTaskParams struct {
|
||||||
|
|
@ -270,6 +278,7 @@ func (q *Queries) StartTask(ctx context.Context, arg StartTaskParams) (Task, err
|
||||||
&i.Creator,
|
&i.Creator,
|
||||||
&i.CreatorLink,
|
&i.CreatorLink,
|
||||||
&i.Messageid,
|
&i.Messageid,
|
||||||
|
&i.Description,
|
||||||
&i.StartedAt,
|
&i.StartedAt,
|
||||||
&i.ClosedAt,
|
&i.ClosedAt,
|
||||||
&i.CreatedAt,
|
&i.CreatedAt,
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,9 @@ CREATE TABLE tasks (
|
||||||
creator_link VARCHAR(255),
|
creator_link VARCHAR(255),
|
||||||
messageID VARCHAR(255),
|
messageID VARCHAR(255),
|
||||||
|
|
||||||
|
description TEXT,
|
||||||
|
|
||||||
|
|
||||||
started_at TIMESTAMPTZ,
|
started_at TIMESTAMPTZ,
|
||||||
closed_at TIMESTAMPTZ,
|
closed_at TIMESTAMPTZ,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,9 +56,9 @@ UPDATE tickets SET deleted_at = current_timestamp WHERE key = $1;
|
||||||
|
|
||||||
-- name: InsertTask :one
|
-- name: InsertTask :one
|
||||||
INSERT INTO tasks (
|
INSERT INTO tasks (
|
||||||
messageID
|
creator, creator_link, description
|
||||||
) VALUES (
|
) VALUES (
|
||||||
$1
|
$1, $2, $3
|
||||||
)
|
)
|
||||||
RETURNING *;
|
RETURNING *;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue