update init reps and add strip html from all data for gen mail message
This commit is contained in:
parent
f0563c3c10
commit
80a3481d58
17
app/app.go
17
app/app.go
@ -3,8 +3,11 @@ package app
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"github.com/go-redis/redis/v8"
|
"github.com/go-redis/redis/v8"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
|
"github.com/minio/minio-go/v7"
|
||||||
|
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||||
"github.com/skeris/appInit"
|
"github.com/skeris/appInit"
|
||||||
"github.com/themakers/hlog"
|
"github.com/themakers/hlog"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@ -67,6 +70,9 @@ type Options struct {
|
|||||||
SmtpPassword string `env:"SMTP_PASSWORD"`
|
SmtpPassword string `env:"SMTP_PASSWORD"`
|
||||||
SmtpApiKey string `env:"SMTP_API_KEY"`
|
SmtpApiKey string `env:"SMTP_API_KEY"`
|
||||||
CustomerServiceAddress string `env:"CUSTOMER_SERVICE_ADDRESS"`
|
CustomerServiceAddress string `env:"CUSTOMER_SERVICE_ADDRESS"`
|
||||||
|
MinioEP string `env:"MINIO_EP" default:"localhost:3002"`
|
||||||
|
MinioAK string `env:"MINIO_AK" default:"minio"`
|
||||||
|
MinioSK string `env:"MINIO_SK" default:"miniostorage"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(ctx context.Context, opts interface{}, ver appInit.Version) (appInit.CommonApp, error) {
|
func New(ctx context.Context, opts interface{}, ver appInit.Version) (appInit.CommonApp, error) {
|
||||||
@ -144,7 +150,16 @@ func New(ctx context.Context, opts interface{}, ver appInit.Version) (appInit.Co
|
|||||||
}
|
}
|
||||||
customerServiceClient := customer.NewCustomerServiceClient(customerServiceConn)
|
customerServiceClient := customer.NewCustomerServiceClient(customerServiceConn)
|
||||||
|
|
||||||
pgdal, err := dal.New(ctx, options.PostgresCredentials, nil)
|
minioClient, err := minio.New(options.MinioEP, &minio.Options{
|
||||||
|
Creds: credentials.NewStaticV4(options.MinioAK, options.MinioSK, ""),
|
||||||
|
Secure: options.IsProd,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("MINIOERR", options.MinioEP, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
pgdal, err := dal.New(ctx, options.PostgresCredentials, nil, minioClient)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,9 @@ func NewClient(deps ClientDeps) *Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) SendMailWithAttachment(recipient, subject string, emailTemplate string, data EmailTemplateData, attachments []Attachment) error {
|
func (c *Client) SendMailWithAttachment(recipient, subject string, emailTemplate string, data EmailTemplateData, attachments []Attachment) error {
|
||||||
text, err := generateTextFromTemplate(data, emailTemplate)
|
sanitizedData := sanitizeHTMLData(data)
|
||||||
|
|
||||||
|
text, err := generateTextFromTemplate(sanitizedData, emailTemplate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.deps.Logger.Module("Error generate text from template")
|
c.deps.Logger.Module("Error generate text from template")
|
||||||
return err
|
return err
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
package mailclient
|
package mailclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"golang.org/x/net/html"
|
||||||
"html/template"
|
"html/template"
|
||||||
"io"
|
"io"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LineWriter struct {
|
type LineWriter struct {
|
||||||
@ -79,3 +82,92 @@ func RenderImage(content string) template.HTML {
|
|||||||
fmt.Println(tpl)
|
fmt.Println(tpl)
|
||||||
return tpl
|
return tpl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sanitizeHTMLData(data EmailTemplateData) EmailTemplateData {
|
||||||
|
sanitized := EmailTemplateData{
|
||||||
|
QuizConfig: stripHTMLResultInfo(data.QuizConfig),
|
||||||
|
AnswerContent: stripHTMLResultContent(data.AnswerContent),
|
||||||
|
AllAnswers: stripHTMLResultAnswers(data.AllAnswers),
|
||||||
|
QuestionsMap: stripHTMLResultMap(data.QuestionsMap),
|
||||||
|
AnswerTime: StripHTML(data.AnswerTime),
|
||||||
|
}
|
||||||
|
return sanitized
|
||||||
|
}
|
||||||
|
|
||||||
|
func stripHTMLResultInfo(input model.ResultInfo) model.ResultInfo {
|
||||||
|
return model.ResultInfo{
|
||||||
|
When: StripHTML(input.When),
|
||||||
|
Theme: StripHTML(input.Theme),
|
||||||
|
Reply: StripHTML(input.Reply),
|
||||||
|
ReplName: StripHTML(input.ReplName),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func stripHTMLResultContent(input model.ResultContent) model.ResultContent {
|
||||||
|
return model.ResultContent{
|
||||||
|
Text: StripHTML(input.Text),
|
||||||
|
Name: StripHTML(input.Name),
|
||||||
|
Email: StripHTML(input.Email),
|
||||||
|
Phone: StripHTML(input.Phone),
|
||||||
|
Address: StripHTML(input.Address),
|
||||||
|
Telegram: StripHTML(input.Telegram),
|
||||||
|
Wechat: StripHTML(input.Wechat),
|
||||||
|
Viber: StripHTML(input.Viber),
|
||||||
|
Vk: StripHTML(input.Vk),
|
||||||
|
Skype: StripHTML(input.Skype),
|
||||||
|
Whatsup: StripHTML(input.Whatsup),
|
||||||
|
Messenger: StripHTML(input.Messenger),
|
||||||
|
Custom: stripHTMLCustom(input.Custom),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func stripHTMLResultAnswers(answers []model.ResultAnswer) []model.ResultAnswer {
|
||||||
|
sanitized := make([]model.ResultAnswer, len(answers))
|
||||||
|
for i, j := range answers {
|
||||||
|
sanitized[i] = model.ResultAnswer{
|
||||||
|
Content: StripHTML(j.Content),
|
||||||
|
CreatedAt: j.CreatedAt,
|
||||||
|
QuestionID: j.QuestionID,
|
||||||
|
AnswerID: j.AnswerID,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sanitized
|
||||||
|
}
|
||||||
|
|
||||||
|
func stripHTMLResultMap(questionsMap map[uint64]string) map[uint64]string {
|
||||||
|
sanitized := make(map[uint64]string)
|
||||||
|
for i, j := range questionsMap {
|
||||||
|
sanitized[i] = StripHTML(j)
|
||||||
|
}
|
||||||
|
return sanitized
|
||||||
|
}
|
||||||
|
|
||||||
|
func stripHTMLCustom(custom map[string]string) map[string]string {
|
||||||
|
sanitized := make(map[string]string)
|
||||||
|
for i, j := range custom {
|
||||||
|
sanitized[i] = StripHTML(j)
|
||||||
|
}
|
||||||
|
return sanitized
|
||||||
|
}
|
||||||
|
|
||||||
|
func StripHTML(htmlString string) string {
|
||||||
|
tokenizer := html.NewTokenizer(bytes.NewBufferString(htmlString))
|
||||||
|
var result bytes.Buffer
|
||||||
|
for {
|
||||||
|
tokenType := tokenizer.Next()
|
||||||
|
switch tokenType {
|
||||||
|
case html.ErrorToken:
|
||||||
|
return strings.TrimSpace(result.String())
|
||||||
|
case html.TextToken:
|
||||||
|
result.WriteString(tokenizer.Token().Data)
|
||||||
|
result.WriteString("\n")
|
||||||
|
case html.StartTagToken, html.EndTagToken:
|
||||||
|
tagName, _ := tokenizer.TagName()
|
||||||
|
if string(tagName) == "a" {
|
||||||
|
_, attrVal, _ := tokenizer.TagAttr()
|
||||||
|
result.WriteString(string(attrVal))
|
||||||
|
result.WriteString("\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
8
go.mod
8
go.mod
@ -14,7 +14,7 @@ require (
|
|||||||
go.uber.org/zap v1.26.0
|
go.uber.org/zap v1.26.0
|
||||||
google.golang.org/grpc v1.61.1
|
google.golang.org/grpc v1.61.1
|
||||||
google.golang.org/protobuf v1.32.0
|
google.golang.org/protobuf v1.32.0
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240327143506-416edf5094db
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240328115420-a7f632c44159
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@ -26,7 +26,7 @@ require (
|
|||||||
github.com/google/uuid v1.6.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||||
github.com/klauspost/compress v1.17.4 // indirect
|
github.com/klauspost/compress v1.17.6 // indirect
|
||||||
github.com/lib/pq v1.10.9 // indirect
|
github.com/lib/pq v1.10.9 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
@ -40,8 +40,8 @@ require (
|
|||||||
github.com/valyala/tcplisten v1.0.0 // indirect
|
github.com/valyala/tcplisten v1.0.0 // indirect
|
||||||
go.uber.org/atomic v1.7.0 // indirect
|
go.uber.org/atomic v1.7.0 // indirect
|
||||||
go.uber.org/multierr v1.10.0 // indirect
|
go.uber.org/multierr v1.10.0 // indirect
|
||||||
golang.org/x/net v0.18.0 // indirect
|
golang.org/x/net v0.21.0 // indirect
|
||||||
golang.org/x/sys v0.15.0 // indirect
|
golang.org/x/sys v0.17.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
5
go.sum
5
go.sum
@ -49,6 +49,7 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9
|
|||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||||
github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
|
github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
|
||||||
github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
|
github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
|
||||||
|
github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
@ -135,6 +136,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
|
|||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
|
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
|
||||||
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
|
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
|
||||||
|
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -142,6 +144,7 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
||||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
@ -178,5 +181,7 @@ penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef
|
|||||||
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
|
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240327143506-416edf5094db h1:zSbTQEUxnZAhttiL9WkuX51qxHPEaXGm00Y+WlEnHug=
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240327143506-416edf5094db h1:zSbTQEUxnZAhttiL9WkuX51qxHPEaXGm00Y+WlEnHug=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240327143506-416edf5094db/go.mod h1:okduDAq0NVVDcM+TMyrd4mVXzBMeTzYI2B2/yi1sL1Y=
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240327143506-416edf5094db/go.mod h1:okduDAq0NVVDcM+TMyrd4mVXzBMeTzYI2B2/yi1sL1Y=
|
||||||
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240328115420-a7f632c44159 h1:H//yyZ7KJAdVWByz4hV78TMLTENRE3CiBrJBTaQAo2A=
|
||||||
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240328115420-a7f632c44159/go.mod h1:/DcyAjBh41IbomuDu5QzhL9flZW6lWO3ZAEbUXKobk0=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af h1:jQ7HaXSutDX5iepU7VRImxhikK7lV/lBKkiloOZ4Emo=
|
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af h1:jQ7HaXSutDX5iepU7VRImxhikK7lV/lBKkiloOZ4Emo=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af/go.mod h1:5S5YwjSXWmnEKjBjG6MtyGtFmljjukDRS8CwHk/CF/I=
|
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af/go.mod h1:5S5YwjSXWmnEKjBjG6MtyGtFmljjukDRS8CwHk/CF/I=
|
||||||
|
@ -30,33 +30,37 @@ func TestProcessMessageToSMTP(t *testing.T) {
|
|||||||
|
|
||||||
client := mailclient.NewClient(clientDeps)
|
client := mailclient.NewClient(clientDeps)
|
||||||
|
|
||||||
recipient := "sadasdsadsadsafd.dasdsadasdad@mail.ru"
|
recipient := "pashamullin2001@gmail.com"
|
||||||
subject := "Test"
|
subject := "Test"
|
||||||
|
|
||||||
data := mailclient.EmailTemplateData{
|
data := mailclient.EmailTemplateData{
|
||||||
QuizConfig: model.ResultInfo{
|
QuizConfig: model.ResultInfo{
|
||||||
Theme: "Taemplste Quiz",
|
Theme: "<h1>Taemplste Quiz</h1>",
|
||||||
},
|
},
|
||||||
AnswerContent: model.ResultContent{
|
AnswerContent: model.ResultContent{
|
||||||
Name: "Pasha",
|
Name: "<a>Pasha</a>",
|
||||||
Phone: "+723456789",
|
Phone: "<div>+723456789<div",
|
||||||
Email: "test@example.com",
|
Email: "test@example.com",
|
||||||
//Adress: "chtoto tam",
|
//Adress: "chtoto tam",
|
||||||
Telegram: "@test",
|
Telegram: "<br>@test</br>",
|
||||||
Wechat: "test_wechat",
|
Wechat: "<span>test_wechat</span>",
|
||||||
Viber: "+723456789",
|
Viber: "<span><span>+723456789</span></span>",
|
||||||
Vk: "test_vk",
|
Vk: "<body>test_vk<body>",
|
||||||
Skype: "test_skype",
|
Skype: "test_skype",
|
||||||
Whatsup: "test_whatsup",
|
Whatsup: "test_whatsup",
|
||||||
Messenger: "test_messenger",
|
Messenger: "test_messenger",
|
||||||
},
|
},
|
||||||
AllAnswers: []model.ResultAnswer{
|
AllAnswers: []model.ResultAnswer{
|
||||||
{QuestionID: 1, Content: "Pasha"},
|
{AnswerID: 1, QuestionID: 1, Content: "https://www.google.com/search?sca_esv=c51a80de1a7d45f0&sxsrf=ACQVn08xG-a0eH1Vds246-fONoSvvjzVMw:1707762485524&q=ku,n&tbm=isch&source=lnms&sa=X&ved=2ahUKEwi7ub2Ct6aEAxVVb_UHHQIQBVoQ0pQJegQIDRAB&biw=1536&bih=703&dpr=1.25#imgrc=0PWwTuuH2uBQ3M|html", CreatedAt: time.Now()},
|
||||||
{QuestionID: 2, Content: "From a friend"},
|
{AnswerID: 2, QuestionID: 2, Content: "From a friend", CreatedAt: time.Now()},
|
||||||
|
{AnswerID: 3, QuestionID: 3, Content: "From a friend", CreatedAt: time.Now()},
|
||||||
|
{AnswerID: 4, QuestionID: 4, Content: `{"Image":"https://letsenhance.io/static/8f5e523ee6b2479e26ecc91b9c25261e/1015f/MainAfter.jpg","Description":"Gekon"}`, CreatedAt: time.Now()},
|
||||||
},
|
},
|
||||||
QuestionsMap: map[uint64]string{
|
QuestionsMap: map[uint64]string{
|
||||||
1: "How did you hear about us?",
|
1: "?",
|
||||||
2: "How did you hear about us?",
|
2: "How did you hear about us?",
|
||||||
|
3: "que 3",
|
||||||
|
4: "que 4",
|
||||||
},
|
},
|
||||||
AnswerTime: time.Now().Format("Monday, 2 January 2006 г., 15:04 UTC-07:00"),
|
AnswerTime: time.Now().Format("Monday, 2 January 2006 г., 15:04 UTC-07:00"),
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user