хранилище переехало с PocketBase на SQLite со своим каталогом файлов
- база своя: два пула, захват одним UPDATE ... RETURNING, шаги схемы на goose под файловым замком, одна миграция начальной схемы вместо семи прежних - транспорт переписан на net/http: свои слои, свой ограничитель частоты, отдача файла с проверкой владельца; панель /_/ и пространство /api/ исчезли - по находкам ревью: журнал не пишет путь под корнем приложения, ключ бюджета читается справа налево, узнавание известного идёт читающим пулом
This commit is contained in:
+11
-18
@@ -4,21 +4,13 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// Где лежит копия файла. Поле названо `location`, а не `storage`: последним
|
||||
// словом зовут само хранилище, и третий смысл у одного слова развёл бы по
|
||||
// разным вещам запись о файле и хранилище, в котором она лежит.
|
||||
const (
|
||||
LocationLocal = "local"
|
||||
LocationS3 = "s3"
|
||||
)
|
||||
|
||||
// MaxRecordSize — потолок размера одного файла записи. Выведен из расчётного
|
||||
// потолка записи в шесть часов с запасом на видео, а не из замера.
|
||||
//
|
||||
// Число нужно назвать **явно** в двух местах сразу: у поля файла в хранилище
|
||||
// нулевой потолок значит не «без предела», а умолчание библиотеки в 5 МиБ, а у
|
||||
// тела запроса приёма умолчание роутера отсекало бы запись раньше, чем она
|
||||
// дойдёт до обработчика — без строки в журнале приёма.
|
||||
// Число называется **явно** везде, где иначе действует умолчание: у тела запроса
|
||||
// приёма умолчание отсекало бы запись раньше, чем она дойдёт до обработчика — и
|
||||
// без строки в журнале приёма. Умолчания здесь не «без предела», а величины на
|
||||
// два-три порядка меньше нужного.
|
||||
const MaxRecordSize int64 = 8 << 30 // 8 ГиБ
|
||||
|
||||
// File — одна физическая копия записи. Их ровно две: принятая и приведённая к
|
||||
@@ -26,12 +18,13 @@ const MaxRecordSize int64 = 8 << 30 // 8 ГиБ
|
||||
// существует только потому, что провайдер читает аудио по адресу, и её ключ
|
||||
// живёт в строке попытки распознавания.
|
||||
type File struct {
|
||||
Id string
|
||||
Location string
|
||||
// FileName — имя, под которым файл лежит: имя задаёт сервис. Своего суффикса
|
||||
// хранилище к заданному имени не дописывает: суффикс появляется только у
|
||||
// имён, которые оно строит само из имени отправителя, а это умолчание не
|
||||
// применяется.
|
||||
Id string
|
||||
// RecordID — запись, которой копия принадлежит. Копии одной записи лежат её
|
||||
// подкаталогом, названным этим идентификатором: так они лежат вместе, а
|
||||
// запись убирается целиком одним движением.
|
||||
RecordID string
|
||||
// FileName — имя, под которым файл лежит: имя задаёт сервис. Имя, данное
|
||||
// отправителем, в него не попадает — от него взято только расширение.
|
||||
FileName string
|
||||
Size int64
|
||||
// Format — расширение без точки, приведённое к нижнему регистру. Наружу оно
|
||||
|
||||
Reference in New Issue
Block a user