package entity import ( "time" ) // Где лежит копия файла. Поле названо `location`, а не `storage`: последним // словом зовут само хранилище, и третий смысл у одного слова развёл бы по // разным вещам запись о файле и хранилище, в котором она лежит. const ( LocationLocal = "local" LocationS3 = "s3" ) // MaxRecordSize — потолок размера одного файла записи. Выведен из расчётного // потолка записи в шесть часов с запасом на видео, а не из замера. // // Число нужно назвать **явно** в двух местах сразу: у поля файла в хранилище // нулевой потолок значит не «без предела», а умолчание библиотеки в 5 МиБ, а у // тела запроса приёма умолчание роутера отсекало бы запись раньше, чем она // дойдёт до обработчика — без строки в журнале приёма. const MaxRecordSize int64 = 8 << 30 // 8 ГиБ // File — одна физическая копия записи. Их ровно две: принятая и приведённая к // рабочему формату. Копия во внешнем хранилище файлом записи не считается — она // существует только потому, что провайдер читает аудио по адресу, и её ключ // живёт в строке попытки распознавания. type File struct { Id string Location string // FileName — имя, под которым файл лежит: имя задаёт сервис. Своего суффикса // хранилище к заданному имени не дописывает: суффикс появляется только у // имён, которые оно строит само из имени отправителя, а это умолчание не // применяется. FileName string Size int64 // Format — расширение без точки, приведённое к нижнему регистру. Наружу оно // выходит только через метку метрики, приведённую к перечню известных. Format string // DurationMs — длительность записи, если её удалось прочитать. DurationMs int64 CreatedAt time.Time }