diff --git a/answerwc/to_client.go b/answerwc/to_client.go index 20d29cd..16b3fc8 100644 --- a/answerwc/to_client.go +++ b/answerwc/to_client.go @@ -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())) + } } } diff --git a/go.mod b/go.mod index fe657cb..f6badfb 100644 --- a/go.mod +++ b/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 ) diff --git a/go.sum b/go.sum index 1e66516..fb68c1b 100644 --- a/go.sum +++ b/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=