package entity // Виды текста записи. Расшифровка и вычитанный текст читаются по открытию одной // записи и лежат строками `texts`, а не колонками: колонкой на каждый вид схема // росла бы с каждым новым видом, а необратимый шаг схемы платится за каждую // такую колонку отдельно. const ( // TextKindTranscript — сырая расшифровка, как её отдал распознаватель. TextKindTranscript = "transcript" // TextKindLiterary — вычитанный текст. Его считает отдельная задача; здесь // заведено только место, куда он ляжет. TextKindLiterary = "literary" ) // Виды текста, которыми приложение спрашивает текст записи. // // Перечень закрыт, и каждое значение называет ровно одну хранимую вещь. Назван // он так, а не парой «вид текста плюс форма показа», потому что реплики со // временем — не вид текста: они лежат структурой разбора и принадлежат записи, а // не тексту. Пара из двух параметров обещала бы сочетания, которых не существует. // // Вычитанный текст назван здесь вперёд, хотя считает его отдельная задача: // перечень без него пришлось бы расширять правкой публичного контракта — того // самого, который согласован один раз. const ( // TextViewTranscript — сырая расшифровка сплошным текстом. TextViewTranscript = TextKindTranscript // TextViewLiterary — вычитанный текст сплошным. TextViewLiterary = TextKindLiterary // TextViewReplicas — реплики со временем. TextViewReplicas = "replicas" ) // IsKnownTextView — принадлежит ли вид закрытому перечню. Незаданный вид // известным не считается: умолчание сделало бы ответ функцией того, что успел // записать конвейер, а не состояния записи. func IsKnownTextView(view string) bool { switch view { case TextViewTranscript, TextViewLiterary, TextViewReplicas: return true } return false } // Text — один вид текста одной записи. Пара «запись и вид» уникальна: повтор // прерванного шага иначе завёл бы второй комплект строк, и вопрос «какой текст // отдавать человеку» стал бы вопросом порядка записи, а не состояния. type Text struct { Id string RecordID string Kind string Contents string }