diff --git a/client/discord/handler/handle_external_task.go b/client/discord/handler/handle_external_task.go index fd65c84..6210143 100644 --- a/client/discord/handler/handle_external_task.go +++ b/client/discord/handler/handle_external_task.go @@ -27,9 +27,9 @@ func (h *router) CreateExternalTask() CommandRoute { s.InteractionRespond(i.Interaction, &initialResponse) - go func() { - h.controller.InitTask("something like a default description") - }() + // go func() { + // h.controller.InitTask("something like a default description") + // }() }, } } diff --git a/client/telegram/handler/handle_farmtask.go b/client/telegram/handler/handle_farmtask.go index 87e5e35..1c55a21 100644 --- a/client/telegram/handler/handle_farmtask.go +++ b/client/telegram/handler/handle_farmtask.go @@ -2,8 +2,6 @@ package handler import ( "context" - "fmt" - "log" "strings" "ticket-pimp/internal/domain" @@ -38,33 +36,42 @@ func (h *Handler) FarmTaskHandler(ctx context.Context, mu *tgb.MessageUpdate) er mu.Chat.ID.PeerID(), ) - 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 := h.controller.InitTask(t) - err = mu.Answer(fmt.Sprintf("Задача с id: %s была создана, жду ссылку", id)).DoVoid(ctx) - if err != nil { - log.Println("бот не смог ответить про создание задачи") - } + // Coda.io was deprecated! - 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 { answer := err.Error() h.LogMessage(ctx, mu, answer) 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( - tg.HTML.Line(tg.HTML.Link("🤘 Задача", t.URL), "была создана!")) + tg.HTML.Line("🤘 Задача была создана!")) h.LogMessage(ctx, mu, answer) return mu.Answer(answer). ReplyToMessageID(msgID).ParseMode(tg.HTML).DisableWebPagePreview(true).DoVoid(ctx) diff --git a/client/telegram/handler/handler.go b/client/telegram/handler/handler.go index 7aa7f0e..da3a326 100644 --- a/client/telegram/handler/handler.go +++ b/client/telegram/handler/handler.go @@ -1,26 +1,30 @@ package handler import ( + "ticket-pimp/internal/controller" "ticket-pimp/internal/services" ) type Handler struct { - git services.IGit - cloud services.ICloud - coda services.ICoda - key string - id string + git services.IGit + cloud services.ICloud + coda services.ICoda + key string + id string + controller *controller.WorkflowController } func NewHandler( git services.IGit, cloud services.ICloud, coda services.ICoda, + controller *controller.WorkflowController, ) *Handler { return &Handler{ - git: git, - cloud: cloud, - coda: coda, + git: git, + cloud: cloud, + coda: coda, + controller: controller, } } diff --git a/client/telegram/telegram.go b/client/telegram/telegram.go index d756363..63fb7d8 100644 --- a/client/telegram/telegram.go +++ b/client/telegram/telegram.go @@ -4,21 +4,20 @@ import ( "context" "log" "ticket-pimp/client/telegram/handler" + "ticket-pimp/internal/controller" "ticket-pimp/internal/domain" "ticket-pimp/internal/services" "github.com/mr-linch/go-tg" "github.com/mr-linch/go-tg/tgb" - - tickets "ticket-pimp/internal/storage/db" ) type TelegramOptions struct { - TicketsRepo *tickets.Queries GitService *services.Git CloudService *services.Cloud Coda *services.Coda AppConfig *domain.Config + Controller *controller.WorkflowController } // runTgBot ... @@ -35,6 +34,7 @@ func Run(ctx context.Context, opts TelegramOptions) error { opts.GitService, opts.CloudService, opts.Coda, + opts.Controller, ) router := tgb.NewRouter(). diff --git a/cmd/main.go b/cmd/main.go index 5e3387b..0ae0db8 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -63,11 +63,11 @@ func run(conf domain.Config) { }() opts := telegram.TelegramOptions{ - // TicketsRepo: db, GitService: gitService, CloudService: cloudService, Coda: codaService, AppConfig: &conf, + Controller: controller, } if err := telegram.Run(ctx, opts); err != nil { diff --git a/internal/controller/control_task.go b/internal/controller/control_task.go index a6ef764..305bc2b 100644 --- a/internal/controller/control_task.go +++ b/internal/controller/control_task.go @@ -2,8 +2,10 @@ package controller import ( "context" + "fmt" "log" "os" + "ticket-pimp/internal/domain" "ticket-pimp/internal/storage/db" "time" @@ -11,7 +13,7 @@ import ( "github.com/jackc/pgx/v5/pgtype" ) -func (wc *WorkflowController) InitTask(description string) { +func (wc *WorkflowController) InitTask(t *domain.Task) error { var ( token = os.Getenv("DISCORD_TOKEN") channel = os.Getenv("TASKS_CHANNEL") @@ -27,8 +29,31 @@ func (wc *WorkflowController) InitTask(description string) { 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{ - Content: description, + Content: content, Components: []discordgo.MessageComponent{ discordgo.ActionsRow{ Components: []discordgo.MessageComponent{ @@ -54,12 +79,9 @@ func (wc *WorkflowController) InitTask(description string) { log.Println("unable to send task message") } - t, err := wc.q.InsertTask(context.TODO(), pgtype.Text{String: st.ID, Valid: true}) - if err != nil { - log.Println("unable to insert task") - } - - _ = t + _ = dbtask + _ = st + return err } diff --git a/internal/storage/db/models.go b/internal/storage/db/models.go index 06edc5e..290ff56 100644 --- a/internal/storage/db/models.go +++ b/internal/storage/db/models.go @@ -18,6 +18,7 @@ type Task struct { Creator pgtype.Text CreatorLink pgtype.Text Messageid pgtype.Text + Description pgtype.Text StartedAt pgtype.Timestamptz ClosedAt pgtype.Timestamptz CreatedAt pgtype.Timestamptz diff --git a/internal/storage/db/queries.sql.go b/internal/storage/db/queries.sql.go index b72b3be..eaabec2 100644 --- a/internal/storage/db/queries.sql.go +++ b/internal/storage/db/queries.sql.go @@ -15,7 +15,7 @@ const closeTask = `-- name: CloseTask :one UPDATE tasks SET closed_at = $1 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 { @@ -31,6 +31,7 @@ func (q *Queries) CloseTask(ctx context.Context, arg CloseTaskParams) (Task, err &i.Creator, &i.CreatorLink, &i.Messageid, + &i.Description, &i.StartedAt, &i.ClosedAt, &i.CreatedAt, @@ -145,21 +146,28 @@ func (q *Queries) GetTicketByID(ctx context.Context, id int32) (Ticket, error) { const insertTask = `-- name: InsertTask :one INSERT INTO tasks ( - messageID + creator, creator_link, description ) 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) { - row := q.db.QueryRow(ctx, insertTask, messageid) +type InsertTaskParams struct { + 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 err := row.Scan( &i.ID, &i.Creator, &i.CreatorLink, &i.Messageid, + &i.Description, &i.StartedAt, &i.ClosedAt, &i.CreatedAt, @@ -254,7 +262,7 @@ const startTask = `-- name: StartTask :one UPDATE tasks SET started_at = $1 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 { @@ -270,6 +278,7 @@ func (q *Queries) StartTask(ctx context.Context, arg StartTaskParams) (Task, err &i.Creator, &i.CreatorLink, &i.Messageid, + &i.Description, &i.StartedAt, &i.ClosedAt, &i.CreatedAt, diff --git a/internal/storage/migrate/003_init_tasks.sql b/internal/storage/migrate/003_init_tasks.sql index c47f75b..dd7323f 100644 --- a/internal/storage/migrate/003_init_tasks.sql +++ b/internal/storage/migrate/003_init_tasks.sql @@ -5,6 +5,9 @@ CREATE TABLE tasks ( creator_link VARCHAR(255), messageID VARCHAR(255), + description TEXT, + + started_at TIMESTAMPTZ, closed_at TIMESTAMPTZ, diff --git a/internal/storage/sqlc/queries.sql b/internal/storage/sqlc/queries.sql index 11f57a1..c0c6a28 100644 --- a/internal/storage/sqlc/queries.sql +++ b/internal/storage/sqlc/queries.sql @@ -56,9 +56,9 @@ UPDATE tickets SET deleted_at = current_timestamp WHERE key = $1; -- name: InsertTask :one INSERT INTO tasks ( - messageID + creator, creator_link, description ) VALUES ( - $1 + $1, $2, $3 ) RETURNING *;