- farm task handler;

This commit is contained in:
naudachu 2023-11-14 12:43:42 +05:00
parent da119ab4d5
commit 77b8bd8abb
10 changed files with 98 additions and 52 deletions

View File

@ -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")
}() // }()
}, },
} }
} }

View File

@ -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)

View File

@ -1,26 +1,30 @@
package handler package handler
import ( import (
"ticket-pimp/internal/controller"
"ticket-pimp/internal/services" "ticket-pimp/internal/services"
) )
type Handler struct { type Handler struct {
git services.IGit git services.IGit
cloud services.ICloud cloud services.ICloud
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,
} }
} }

View File

@ -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().

View File

@ -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 {

View File

@ -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
} }

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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 *;