added logic with sendLead to reminder

This commit is contained in:
Pavel 2024-06-24 16:53:25 +03:00
parent 60882b143d
commit 67e6ea4a5a
3 changed files with 50 additions and 28 deletions

@ -2,13 +2,14 @@ package answerwc
import (
"context"
"database/sql"
_ "embed"
"encoding/json"
"errors"
"fmt"
"github.com/go-redis/redis/v8"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/senders"
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/wctools"
"penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/customer_clients"
@ -239,7 +240,8 @@ func (w *SendToClient) processAnswerWithPrivileges(ctx context.Context, data Pro
}
return true, nil
} else {
w.checkAndSendTaskReminders(sendTaskRemindersDeps{
w.checkAndSendTaskReminders(ctx, sendTaskRemindersDeps{
quiz: data.quiz,
account: data.account,
theme: data.quiz.Name,
config: model.QuizConfig{
@ -290,10 +292,11 @@ type sendTaskRemindersDeps struct {
account model.Account
theme string
config model.QuizConfig
quiz *model.Quiz
}
func (w *SendToClient) checkAndSendTaskReminders(data sendTaskRemindersDeps) {
err := w.processReminderToClient(data.account, data.config)
func (w *SendToClient) checkAndSendTaskReminders(ctx context.Context, data sendTaskRemindersDeps) {
err := w.processReminderToClient(ctx, data.account, data.config, data.quiz)
fmt.Println("PMC1", err)
if err != nil {
w.reportError(err, "Error sending tasks reminder email")
@ -347,11 +350,11 @@ type DepsProcessMsgToClient struct {
// сделал экспортируемым для теста
func (w *SendToClient) ProcessMessageToClient(ctx context.Context, constructData DepsProcessMsgToClient) error {
leadTargetForAll, err := w.dal.AccountRepo.GetLeadTarget(ctx, constructData.quiz.AccountId, 0)
if err != nil {
if err != nil && !errors.Is(err, pj_errors.ErrNotFound) {
return err
}
leadTargetForQuiz, err := w.dal.AccountRepo.GetLeadTarget(ctx, constructData.quiz.AccountId, int32(constructData.quiz.Id))
if err != nil && err != sql.ErrNoRows {
if err != nil && !errors.Is(err, pj_errors.ErrNotFound) {
return err
}
if len(leadTargetForQuiz) > 0 {
@ -404,33 +407,50 @@ func (w *SendToClient) ProcessMessageToClient(ctx context.Context, constructData
return nil
}
// todo email
func (w *SendToClient) processReminderToClient(account model.Account, quizConfig model.QuizConfig) error {
data := senders.TemplateData{
QuizConfig: model.ResultInfo{
When: quizConfig.Mailing.When,
Theme: quizConfig.Mailing.Theme,
Reply: "email",
ReplName: quizConfig.Mailing.ReplName,
},
AnswerContent: model.ResultContent{},
AllAnswers: []model.ResultAnswer{},
QuestionsMap: nil,
func (w *SendToClient) processReminderToClient(ctx context.Context, account model.Account, quizConfig model.QuizConfig, quiz *model.Quiz) error {
leadTargetForAll, err := w.dal.AccountRepo.GetLeadTarget(ctx, account.ID, 0)
if err != nil && !errors.Is(err, pj_errors.ErrNotFound) {
return err
}
//fmt.Println("PRTC", data, email, quizConfig)
leadTargetForQuiz, err := w.dal.AccountRepo.GetLeadTarget(ctx, account.ID, int32(quiz.Id))
if err != nil && !errors.Is(err, pj_errors.ErrNotFound) {
return err
}
if len(leadTargetForQuiz) > 0 {
leadTargetForAll = append(leadTargetForAll, leadTargetForQuiz...)
}
leadData := senders.LeadData{
To: "email",
Subject: quizConfig.Mailing.Theme,
Template: reminderTemplate,
TemplateData: data,
mapLeadTarget := make(map[string][]senders.LeadData)
for _, leadTarget := range leadTargetForAll {
data := senders.TemplateData{
QuizConfig: model.ResultInfo{
When: quizConfig.Mailing.When,
Theme: quizConfig.Mailing.Theme,
Reply: leadTarget.Target,
ReplName: quizConfig.Mailing.ReplName,
},
AnswerContent: model.ResultContent{},
AllAnswers: []model.ResultAnswer{},
QuestionsMap: nil,
}
fmt.Println("PRTC", data, leadTarget.Target, quizConfig)
mapLeadTarget[string(leadTarget.Type)] = append(mapLeadTarget[string(leadTarget.Type)], senders.LeadData{
To: leadTarget.Target,
Subject: quizConfig.Mailing.Theme,
Template: reminderTemplate,
TemplateData: data,
})
}
for _, sender := range w.leadSenders {
err := sender.SendLead(leadData)
if err != nil {
w.reportError(err, fmt.Sprintf("Error sending lead through %s", sender.Name()))
for _, sendData := range mapLeadTarget[sender.Name()] {
err := sender.SendLead(sendData)
if err != nil {
w.reportError(err, fmt.Sprintf("Error sending lead through %s", sender.Name()))
}
}
}

2
go.mod

@ -16,7 +16,7 @@ require (
go.uber.org/zap v1.27.0
golang.org/x/net v0.23.0
gopkg.in/tucnak/telebot.v2 v2.5.0
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240624105135-6982631f2a4b
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240624132638-0bf45822a652
penahub.gitlab.yandexcloud.net/pena-services/customer v1.0.1-0.20240608222239-5c78187bf014
)

2
go.sum

@ -179,5 +179,7 @@ penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607202348-efe5
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607202348-efe5f2bf3e8c/go.mod h1:+bPxq2wfW5S1gd+83vZYmHm33AE7nEBfznWS8AM1TKE=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240624105135-6982631f2a4b h1:dNBWrclJAXP/JFRYQPXWAqmF/UihGxH4oZ9Vs0lfm40=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240624105135-6982631f2a4b/go.mod h1:uOuosXduBzd2WbLH6TDZO7ME7ZextulA662oZ6OsoB0=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240624132638-0bf45822a652 h1:QI+VRYE25xtYbUgaxOBL9sj0WIKacPXlD6YD7TNO5SM=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240624132638-0bf45822a652/go.mod h1:uOuosXduBzd2WbLH6TDZO7ME7ZextulA662oZ6OsoB0=
penahub.gitlab.yandexcloud.net/pena-services/customer v1.0.1-0.20240608222239-5c78187bf014 h1:ziG55nv824SGFZ02AfagKQC5D4ODirGXnpVPQTL6YFA=
penahub.gitlab.yandexcloud.net/pena-services/customer v1.0.1-0.20240608222239-5c78187bf014/go.mod h1:hIMkN5Xe01vAVaX22QWsGD87Oi93IfX1hJGqxy0oJbE=