amocrm/internal/tools/construct.go
skeris c37d8fceba
Some checks failed
Deploy / CreateImage (push) Failing after 2m0s
Deploy / DeployService (push) Has been skipped
ci gitea
2025-02-08 00:06:49 +03:00

175 lines
5.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package tools
import (
"amocrm/internal/models"
"fmt"
"gitea.pena/SQuiz/common/model"
"strings"
"unicode/utf8"
)
func ToPipeline(amoPipelines []models.Pipeline) []model.Pipeline {
var pipelines []model.Pipeline
for _, p := range amoPipelines {
pipeline := model.Pipeline{
Amoid: int32(p.ID),
Name: p.Name,
Isarchive: p.IsArchive,
AccountID: int32(p.AccountID),
}
pipelines = append(pipelines, pipeline)
}
return pipelines
}
func ToStep(amoStatuses []models.Statuses) []model.Step {
var steps []model.Step
for _, s := range amoStatuses {
step := model.Step{
Amoid: int32(s.ID),
Name: s.Name,
Pipelineid: int32(s.PipelineID),
Color: s.Color,
Accountid: int32(s.AccountID),
}
steps = append(steps, step)
}
return steps
}
func ToTag(amoTag []models.Tag, entity model.EntityType) []model.Tag {
var tags []model.Tag
for _, t := range amoTag {
tag := model.Tag{
Amoid: int32(t.ID),
Entity: entity,
Name: t.Name,
Color: t.Color,
}
tags = append(tags, tag)
}
return tags
}
func ToField(amoField []models.CustomField, entity model.EntityType) []model.Field {
var fields []model.Field
for _, f := range amoField {
field := model.Field{
Amoid: int32(f.ID),
Code: f.Code,
Name: f.Name,
Entity: entity,
Type: model.FieldType(f.Type),
}
fields = append(fields, field)
}
return fields
}
func isEmoji(r rune) bool {
// https://symbl.cc/ru/unicode/blocks/emoticons/
return (r >= 0x1F600 && r <= 0x1F64F) || // эмотикоины
(r >= 0x1F650 && r <= 0x1F67F) || // орнаментные символы
(r >= 0x1F680 && r <= 0x1F6FF) || // Транспортные и картографические символы
(r >= 0x1F700 && r <= 0x1F77F) || // Алхимические символы
(r >= 0x1F780 && r <= 0x1F7FF) || // Расширенные геометрические фигуры
(r >= 0x1F800 && r <= 0x1F8FF) || // Дополнительные стрелки — С
(r >= 0x1F900 && r <= 0x1F9FF) || // Дополнительные символы и пиктограммы
(r >= 0x1FA00 && r <= 0x1FA6F) || // Шахматные символы
(r >= 0x1FA70 && r <= 0x1FAFF) || // Расширенные символы и пиктограммы — A
(r >= 0x1FB00 && r <= 0x1FBFF) || // Символы наследия вычислительной техники
(r >= 0x20000 && r <= 0x2A6DF) || // Унифицированные идеограммы ККЯ. Расширение B
(r >= 0x2A700 && r <= 0x2B73F) || // Унифицированные идеограммы ККЯ. Расширение C
(r >= 0x2B740 && r <= 0x2B81F) || // Унифицированные идеограммы ККЯ. Расширение D
(r >= 0x2B820 && r <= 0x2CEAF) || // Унифицированные идеограммы ККЯ. Расширение E
(r >= 0x2CEB0 && r <= 0x2EBEF) || // Унифицированные идеограммы ККЯ. Расширение F
(r >= 0x2EBF0 && r <= 0x2EE5F) || // CJK Unified Ideographs Extension I
(r >= 0x2F800 && r <= 0x2FA1F) || // Дополнение к совместимым идеограммам ККЯ
(r >= 0x30000 && r <= 0x3134F) || // Унифицированные идеограммы ККЯ. Расширение G
(r >= 0x31350 && r <= 0x323AF) || // Унифицированные идеограммы ККЯ. Расширение H
(r >= 0xE0000 && r <= 0xE007F) || // Теги
(r >= 0xE0100 && r <= 0xE01EF) // Дополнение к селекторам вариантов начертания
}
func EmojiUnicode(text string) string {
var result strings.Builder
for len(text) > 0 {
r, size := utf8.DecodeRuneInString(text)
if size == -1 {
result.WriteString(text[:1])
text = text[1:]
} else {
if isEmoji(r) {
result.WriteString(fmt.Sprintf(`"0x%x"`, r))
} else {
result.WriteRune(r)
}
text = text[size:]
}
}
return result.String()
}
func AddContactFields(contactFields []models.FieldsValues, fieldValue string, fieldType model.ContactQuizConfig, fieldMap map[string]int) []models.FieldsValues {
if fieldValue != "" && fieldMap[string(fieldType)] != 0 {
values := make([]models.ValueInterface, 0)
values = append(values, models.Values{Value: fieldValue})
contactFields = append(contactFields, models.FieldsValues{
FieldID: fieldMap[string(fieldType)],
Values: values,
})
}
return contactFields
}
func ConstructUTMFields(utmMap model.UTMSavingMap, currentFields []model.Field) []models.FieldsValues {
var fields []models.FieldsValues
for _, field := range currentFields {
if data, ok := utmMap[field.Name]; ok {
val := []models.ValueInterface{
models.Values{
Value: data,
},
}
f := models.FieldsValues{
FieldID: int(field.Amoid),
Values: val,
}
fields = append(fields, f)
continue
}
}
return fields
}
func ConstructAmoTags(currentTags []model.Tag, ruleTags model.TagsToAdd) []models.Tag {
var tagsToAmo []models.Tag
ruleTagMap := make(map[int64]struct{})
mapConstruct := func(idsArray []int64) {
for _, id := range idsArray {
ruleTagMap[id] = struct{}{}
}
}
mapConstruct(ruleTags.Lead)
mapConstruct(ruleTags.Contact)
mapConstruct(ruleTags.Company)
mapConstruct(ruleTags.Customer)
for _, tag := range currentTags {
if _, ok := ruleTagMap[int64(tag.Amoid)]; ok {
tagsToAmo = append(tagsToAmo, models.Tag{
ID: int(tag.Amoid),
Name: tag.Name,
//Color: tag.Color,
})
}
}
return tagsToAmo
}