diff --git a/bin/evening_detective_server b/bin/evening_detective_server index 94007e9..8d4933c 100755 Binary files a/bin/evening_detective_server and b/bin/evening_detective_server differ diff --git a/internal/modules/string_tools/transliterate.go b/internal/modules/string_tools/transliterate.go new file mode 100644 index 0000000..6dfe414 --- /dev/null +++ b/internal/modules/string_tools/transliterate.go @@ -0,0 +1,66 @@ +package string_tools + +import ( + "regexp" + "strings" +) + +var ( + replacer = strings.NewReplacer( + "а", "a", + "б", "b", + "в", "v", + "г", "g", + "д", "d", + "е", "e", + "ё", "yo", + "ж", "zh", + "з", "z", + "и", "i", + "й", "y", + "к", "k", + "л", "l", + "м", "m", + "н", "n", + "о", "o", + "п", "p", + "р", "r", + "с", "s", + "т", "t", + "у", "u", + "ф", "f", + "х", "h", + "ц", "ts", + "ч", "ch", + "ш", "sh", + "щ", "sch", + "ъ", "", + "ы", "y", + "ь", "", + "э", "e", + "ю", "yu", + "я", "ya", + " ", "_", + ) +) + +// Transliterate выполняет транслитерацию русского текста в латиницу, +// заменяет пробелы на _, удаляет все остальные символы, кроме цифр (знаки препинания и т.д.) +func Transliterate(text string) string { + + // Приводим к нижнему регистру и транслитерируем + result := replacer.Replace(strings.ToLower(text)) + + // Удаляем все символы, кроме букв латиницы, подчеркивания и цифр + reg := regexp.MustCompile(`[^a-z0-9_]`) + result = reg.ReplaceAllString(result, "") + + // Удаляем множественные подчеркивания (опционально) + regMulti := regexp.MustCompile(`_+`) + result = regMulti.ReplaceAllString(result, "_") + + // Удаляем подчеркивания в начале и конце строки (опционально) + result = strings.Trim(result, "_") + + return result +} diff --git a/internal/services/file_service/service.go b/internal/services/file_service/service.go index 8028d0b..98b5421 100644 --- a/internal/services/file_service/service.go +++ b/internal/services/file_service/service.go @@ -3,6 +3,7 @@ package file_service import ( "context" "evening_detective_server/internal/modules/file_storage" + "evening_detective_server/internal/modules/string_tools" ) type FileService struct { @@ -21,6 +22,7 @@ func (s *FileService) UploadFile( ctx context.Context, file *file_storage.File, ) (string, error) { + file.Name = string_tools.Transliterate(file.Name) if err := s.fileStorage.Put(ctx, file); err != nil { return "", err }