bitrix/internal/tools/construct.go

105 lines
4.0 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 (
"fmt"
"penahub.gitlab.yandexcloud.net/backend/quiz/bitrix/internal/models"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"strconv"
"strings"
"unicode/utf8"
)
func ToPipeline(bitrixPipelines []models.Category, bitrixID string) []model.PipelineBitrix {
var pipelines []model.PipelineBitrix
for _, p := range bitrixPipelines {
pipelines = append(pipelines, model.PipelineBitrix{
BitrixID: p.ID,
Name: p.Name,
EntityTypeId: p.EntityTypeId,
AccountID: bitrixID,
})
}
return pipelines
}
func ToStep(bitrixPipelines []models.Steps, bitrixID string) ([]model.StepBitrix, error) {
var pipelines []model.StepBitrix
for _, p := range bitrixPipelines {
pipelineID, err := strconv.ParseInt(p.ID, 10, 64)
if err != nil {
return nil, err
}
pipelines = append(pipelines, model.StepBitrix{
BitrixID: p.ID,
AccountID: bitrixID,
EntityID: p.EntityID,
StatusID: p.StatusID,
Name: p.Name,
NameInit: p.NameInit,
Color: p.Color,
PipelineID: int32(pipelineID),
})
}
return pipelines, nil
}
func ToField(bitrixFields []models.Fields, bitrixID string) []model.BitrixField {
var fields []model.BitrixField
for _, f := range bitrixFields {
fields = append(fields, model.BitrixField{
AccountID: bitrixID,
BitrixID: f.ID,
EntityID: f.EntityID,
FieldName: f.FieldName,
EditFromLabel: f.EditFormLabel,
FieldType: f.UserTypeID,
})
}
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()
}