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() }