Перейти к содержимому
KAMOUniverse

Журнал изменений

Что нового.

Каждое усовершенствование платформы, как только она появится.

  1. · kamo-internal

    Email участника из своего ряда

    Добавляет почтовое действие рядом с чатом, звонком и профилем в строке участника, открывая Инструмент сообщений с уже заполненным получателем. Скрыто, если только орг не включена электронная почта, у зрителя есть ACCESS MAIL, а у участника фактически есть адрес Действие, открывающее пустого композитора, хуже, чем отсутствие действия. Разрешение разрешается один раз в NavTopPanel, а не в строке: использоватьEmailAvailability() Зонд стоит OTK плюс провайдер и почтовый ящик туда-обратно, и Эта панель монтируется по всему приложению. Получатели проходят как { Начальные данные: { к: [email] } }. DraftMessage.to струна [], так что плоская { к: '...' } молча падает и композитор открывает без Получатель — та же ловушка HexHeadPopover документов.

  2. · MediaService

    Принять 3 GiB вложения, передавая их на хранение

    file.getBytes() не может представлять загрузку такого большого размера — Java-массив просто останавливается. выше 2 ГБ — так что каждое прошлое привязанности, которое умерло на ошибках OutOfMemory из кучи, и 1 ГБ один нуждался в выделении 1 ГБ для хранения файла Весна уже Привязался к диску. MultipartFile теперь идет на визуализацию в качестве повторно открываемого источника. Он проходит прямо сквозь. Лимиты, увеличенные до соответствия: мультичастица до 3 ГБ на файл (3100 МБ на запрос), поэтому Самый большой разрешенный файл не отклоняется для собственных границ и заголовков. media.attachments.max-bytes to 3 GiB. Multipart spools to a explicit 24Gi emptyDir Вместо того, чтобы писать контейнер. Tomcat max-swallow-size теперь -1. Отклоненная загрузка получает 4xx вместо подключения к сбросу.

  3. · kamo-shared-library

    Поток контент-адресованного хранилища, чтобы объект мог превышать кучу

    Вложения в чате переходят на потолок 3 ГБ. Для того, чтобы получить доступ к сайту, [ ] который не может выразить это вообще — Java-массив останавливается на Integer. MAX VALUE - и MinIOStorageService.upload затем буферизовал весь объект во второй раз, чтобы он мог Повторите нажатие на следующий узел. Добавляет стриминговый путь вместе с обоими: HashUtils.computeDigests выводит Blake3 и SHA3-256 с одного прохода, загрузкаStreaming повторно открывает InputStreamSource для каждого узла Попробуйте вместо того, чтобы удерживать байты, и новый магазинContentAddressed перегрузит Хеши, дедукты и магазины без накопления контента. Пик памяти — это Буфер частей MinIO, а не размер файла. Это намеренно не @Transactional: хранение гигабайтов занимает минуты, а строка публикуется только после того, как объект надежно хранится, поэтому авария Оставляет то же состояние, что и буферный путь.

  4. · kamo-internal

    Название формы ипотеки Заемщик(ы)

    Форма займа / заемщика / объекта недвижимости обслуживает каждого заемщика в файле. Заголовки вкладок и панелей теперь приходят из переводов и читают Заемщик(ы). Кредит и Subject Property были жестко закодированы на английском языке и теперь решаются через next-intl.

  5. · kamo-internal

    Уберите шаблон электронной почты с адреса From, за переключателем включения / выключения

    Сборщик шаблонов в нижнем колонтитуле композитора исчез. Какой шаблон носит сообщение, не является отдельное решение от того, кому оно отправлено как: собственный основной адрес участника подписывает его как их, почтовый ящик отдела подписывает его как тот отдел с контактными данными отдела, Контактный почтовый ящик организации обозначает ее как организацию, а почтовый ящик другого члена — как организацию. В качестве этого члена. Все, что остается выбрать, это использовать ли его вообще, который теперь является одним из самых распространенных. Переключатель в том же углу. Отключение посылает тело точно так же, как напечатано. Редактор показал подпись в этом штате в то время как отправленное сообщение не имело ни одного, потому что нулевой шаблон вернулся к DEFAULT CONFIG для Только предварительный просмотр; теперь он отображается голым, поэтому то, что находится на экране, выходит наружу. Также фиксирует должность и отдел, никогда не появляющийся в составленной подписи — они отвисают. TeamMember и прибытие в качестве jobTitleOfficial/jobTitleTitle и DepartmentTitle, а не jobTitle и Отдел — и заполняет мобильную линию, которую пользователь CellPhone уже переключает.

  6. · kamo-internal

    Предложите билеты на ожидание каждому агенту сразу

  7. · kamo-internal

    Всплывающее окно Teal, визуально отличное от ведущего предупреждения

  8. · kamo-internal

    Переключайте почтовые ящики с того же поисковика, который использует композитор

    Переключатель был более слабой половиной пары: избранный, держащий каждую почтовый ящик, который может открыть член, который для доступа в масштабе всей организации является каждым почтовым ящиком в Орг. Он также называется /доступным, который строит их на каждом из них. Загрузка страницы — запрос на одного участника и другой на почтовый ящик. Теперь кнопка с открытым почтовым ящиком, открывающая MailboxPickerDialog Отправить. Ничто не загружает весь список, а коммутатор и поле предлагает те же почтовые ящики под теми же заголовками, потому что они читают той же конечной точки. Алиазы исключаются через псевдонимы = ложные. Почта, отправленная в одну страну почтовый ящик за ним, поэтому открывать нечего; Открытый почтовый ящик отказывается Это вторая линия обороны. Восстановление выбора не изменяется в поведении: строка запроса уже несет идентификатор и адрес, поэтому кнопка маркирует себя, не дожидаясь Поиск и решает только имя дисплея, если это дешево.

  9. · EmailService

    Пусть /sendable удалит группу псевдонимов для звонящих, которые открывают почтовые ящики

    Коммутатор почтовых ящиков /messages предлагает тот же набор, что и композитор From Поле, минус одно: псевдоним нельзя открыть. Почта адресована ему Попадает в почтовый ящик за ним, поэтому у него нет папок и нечего показывать. Исключается серверная сторона, а не фильтруется абонентом, поэтому сумма остается честный — клиент, сбрасывающий строки со страницы, сообщит, что 24 из них 41234' при переводе 21.

  10. · kamo-internal

    Чистая машина принятия-всплывающего решения и снюс на члена

  11. · kamo-internal

    Прокси-очереди-резюме и конечные точки претензии

  12. · kamo-internal

    Загрузите выполненный документ и выберите реальный заказ на подпись

    У отправителя вообще не было пути к готовому документу. Конверт резюме рекламируется подписанный документUrl, указывающий внутри собственного приложения подписчика камо BFF, аутентифицированный подписавшим сессией, поэтому единственный человек, который мог Когда-либо приносить то, что было последним подписантом, в течение четырех часов. Добавить Прокси-маршрут OTK и действие загрузки на каждый завершенный конверт. Диалог также отправлял маршрутизациюПорядок 1, 2, 3..., который выглядел заказано и был Никогда не принуждался. ESigService применяет его сейчас, поэтому выбор ясен: Любой заказ (все приглашены вместе, сегодняшнее поведение и дефолт) Или по одному за раз. Отказы теперь показывают свою причину вместо «Действия провалились» Они говорят слова, и их выбрасывают — и отправляют / лишают Они спрятаны там, где служба будет только 409.

  13. · EmailService

    Переменные предварительного просмотра шаблонов электронной подписи

    Редактор шаблона администратора делает каждый заполнитель пустым для ключа с Нет шаблонов переменных, поэтому семь шаблонов esign предварительно просматриваются как страница Пустые пробелы, включая пять новых уведомлений о жизненном цикле. Одна рука для пятого жизненного цикла, плюс руки для приглашения и код повышения.

  14. · kamo-shared-library

    Пять шаблонов электронной почты, которые никогда не были написаны

    В конверте электронной подписи было ровно два шаблона: приглашение и приглашение. Повышенный код. Ничего не было для того, что происходит после подписи знаки — вот почему приложение для подписи обещает «подписанная копия будет По электронной почте всем сторонам, и ни одно такое письмо никогда не было отправлено. Добавлен esign.envelope completed (каждая копия), **************************** esign.signer decoderd, esign.envelope voided и esign.envelope expired вместе с CANONICAL KEYS Записи, без которых каждая отправка является постоянной 404. Также избегает свободного текста в двух существующих телах эмблемы: TemplateRenderer. заменители без побега, а также имя получателя, название документа и Персональное сообщение - это бесплатный текст. Простые варианты остаются предоставленными Потому что строки per-org только вставлены. EsignLifecycleTemplateTest pins the constant -> dotted-key -> sent-key Трижды и что каждый заполнитель - это тот, который отправитель фактически заполняет.

  15. · MediaService

    Решите заявку на билет с условным обновлением

  16. · kamo-internal

    Восстановите настройки ипотечного рынка в семь последовательных вкладок

    Рыночная страница MORTGAGE содержала пятнадцать вкладок, двенадцать из них - конфигурация кредитора. и несколько ответили на один и тот же вопрос в двух местах: хеджирование было включено при рынках капитала, в то время как его терпимость жила при политике, обслуживание модель и условия обслуживания были отдельными вкладками, включение продукта ограничение канала, в то время как правила канала разрешают и запрещают каналы; Делегация была поставлена в трех местах, где нечего сказать, какая из них выиграла. Сгруппированный по вопросу, на который фактически отвечает оператор: бизнес-модель учреждения, орган андеррайтинга, лицензирование предложения по включению продукта, правила канала, наложения рисков положение на рынках капитала, ценовая политика, политика капитала инвесторы инвесторы и их делегация, накладные расходы, доставка, обязательства поза обслуживания, политика обслуживания Автономность ИИ, стены доверия на стадии Связи поставщиков партнеров, каталог поставщиков Там, где настройка действительно решена из нескольких мест, страница теперь говорит об этом. Вместо того, чтобы оставлять оператора гадать: в разделе «Власть» указывается: Преимущество делегации, намеки на правила канала говорят, что правило доставки инвестора бьет Они, и цель обслуживания денежных переводов помечены как дефолт организации. Каждая секция построена из нового конфигуратора, заменяющего около ста линий. дублированная нагрузка/сохранение/ошибка/закупорка сантехники на вкладку с одной секционной оболочкой, Один стол, один бар и один тост за вкладку. Лицензии, риски и Связи провайдера получают встроенное редактирование — API всегда поддерживал его. Фиксация опечатки обычно означает удаление строки. Четыре подредактора инвесторов Он стал одним из компонентов сегментированного контроля, открывая затраты инвестора. Одна просьба вместо четырех. Обзор получает считывание профиля кредитора, подключенное к файлу кредитора, ProfileValidation и changeLog: три конечных точки, которые существовали с тех пор Поверхность была построена, и никто никогда не звонил, поэтому не было никакого способа, чтобы Посмотрите, проверен ли профиль или какие модули он включил. Связи, отчеканенные против старых слизней, переделаны, а не тихо приземляются на Обзор, поскольку SettingsView разрешает неизвестный ?tab = индекс 0.

  17. · kamo-internal

    Pick the From address from a searchable dialog, not a dropdown

    A select cannot hold this list. Everything the /messages switcher offers is sendable, and for a member with ACCESS_ALL_MEMBER_MAILBOXES that is every mailbox in the org — tens of thousands in a large one. The composer now shows the current sender as a button and opens a picker that searches and pages on the server, so nothing loads the whole set. The picker shell is extracted from MemberPickerDialog, which already solved this for the org directory: debouncing, paging, out-of-order responses, infinite scroll, keyboard navigation, group headings, and the empty, error and loading screens. SearchablePickerDialog now owns all of it and takes a fetcher plus a row renderer. MemberPickerDialog is a wrapper over it with its props unchanged, so the manager field, chat member add and e-sign search are untouched; MailboxPickerDialog is the second wrapper. Group headings reuse the switcher's own translation keys, so the same mailbox cannot end up named two different things in two places. Composing as another member still offers that member's aliases: they are addresses on an identity rather than mailboxes, so the endpoint — which answers for the logged-in member — cannot know them. The composer merges them into the first page through the picker's fetcher hook.

  18. · EmailService

    Поисково-страничная конечная точка для адресов, которые член может отправлять из

    GET /api/email/mailboxes/sendable отвечает на тот же вопрос, что и /accessible каждый адрес участник может отправить как - но как один объединенный поток, который Проверено и размещено в базе данных. /Доступный не может служить сборщику. Он материализует каждую группу в полном объеме. для члена, держащего ACCESS ALL MEMBER MAILBOXES, что означает ходьбу член в организации, а затем выдает запрос на одного члена и другой на почтовый ящик. При пяти цифрах персонала это десятки тысяч запросов и десятки тысяч запросов. Полезная нагрузка на каждый звонок. Только привилегированный хвост размещен в SQL; собственные почтовые ящики участника; псевдонимы и общие почтовые ящики засчитываются на Java и всегда сортируются первыми. Поиск собственного адреса никогда не отвечает на странице 40. Почтовый ящик Достижимый через несколько грантов перечисляется один раз, под самым узким — То же самое правило применяется и к композитору, поэтому ни одна личность не появляется дважды. Ряды несут группу, из которой они пришли, и для почтового ящика другого участника, его Владелец, поэтому клиент может отображать те же заголовки, которые использует коммутатор почтового ящика. Разрешение имени ухудшается точно так же, как это делает MemberDisplayName; оба должны Один и тот же человек читает по-разному в двух местах.

  19. · MediaService

    Сообщите о заявляемой очереди на билеты звонящего

  20. · MediaService

    GET /types/{typeId}/slots, чтобы редактор настроек мог перечислять слоты

    UI настроек всегда прокладывал этот путь, но только POST/PUT/DELETE На карте, так что вкладка «Слоты доступности» получила 405 и оказалась пустой. отличие /slots/доступно это возвращает каждый активный слот на тип без фильтрации с предварительным уведомлением о бронировании или ограничениями для детей - администратор должен увидеть Слоты, которые они настроили, включая те, которые в настоящее время никто не может забронировать. Ограничения проходят в каждом слоте ребенкаОграничения, так что это также Заменяет /slots/restrictions считанные UI-файлы.

  21. · MediaService

    Собственный предикат заявляемого билета в одной услуге

  22. · kamo-internal

    Назначить почтовый ящик в отдел и в организацию

    Контактная электронная почта диалогового отдела была бесплатным текстом, поэтому он мог назвать адрес Орг не владеет. Он становится пикером над реальными почтовыми ящиками организации - тот же список **************** Предложения, так что "присвояемые почтовые ящики" означает Тот же набор, где бы он ни предлагался. Факультативный, а «нет» — это и дефолт, и как Вы отменяете назначение; ясная кнопка в поле делает это одним щелчком мыши. Контактная информация с маркировкой поведения сохраняет свое текстовое поле электронной почты таким, каким оно было и было. Под ним находится тот же сборщик. Они независимы: текстовое поле — это то, что Орг публикует, почтовый ящик называет один из своих. Один MailboxSelect обслуживает оба экрана, поэтому они не могут дрейфовать по общему кэшированному выбору Поэтому строка чтения контактной информации и ее выборщик не запрашивают список. The государства держатся отдельно по назначению: организация без почтовых ящиков, почтовый бэкэнд, который является вниз, и почтовый ящик, удаленный на стороне провайдера, в противном случае все выглядело бы пустым поле. Последний показывает, что он «больше не доступен», а не выглядит неназначенным. Потому что несвежий указатель должен быть виден тому, кто его исправляет. Отдел сохранения отправляет разрешенный адрес вместе с указателем. Служба безопасности Созданный до того, как появился почтовый ящик, он игнорирует его и читает электронную почту, поэтому без этого изменения Очистил бы адрес каждого отдела, когда первый был сохранен против В настоящее время развернута сборка. Восстановленная служба игнорирует поле; убрать мост Каждая среда проходит мимо того, что строится.

  23. · InitializerService

    Указатели почтовых ящиков для департаментов и организаций, а также заполнение отделов

    DEPTS.MAILBOX ID и ORGS.CONTACT MAILBOX ID - простые UUID без FK email provider.mailboxes: почтовые ящики синхронизируются с внешними поставщиками и могут быть удалены на стороне провайдера, и конечная точка удаления почтового ящика ничего не знает о отделах, поэтому Реальная ФК превратит оба этих процесса в провалы. DEPTS.EMAIL был бесплатным текстом и содержит микс. Адреса, которые действительно являются одним из почтовые ящики связаны и переписаны на собственный почтовый ящик — Support@KamoCRM.com Такого почтового ящика никогда не было. Адреса без соответствующего почтового ящика не могут быть Они выражены пикером, который заменяет поле, поэтому они очищаются. Деструктивное заявление, и оно является преднамеренным, охватывая Sales@ и Corporate@ сегодня. ORGS.CONTACT EMAIL остается в одиночестве. Он сохраняет свой собственный текстовый ввод, а почтовый ящик сидит вместо того, чтобы заменить его.

  24. · kamo-shared-library

    Пусть отдел и организация указывают на один из своих почтовых ящиков

    Контактное письмо отдела было бесплатным текстом, поэтому он мог назвать адрес, который делает организация. Два из трех отделов с одним набором сегодня делают именно это. Теперь держит указатель на один из почтовых ящиков организации, и организация получает то же самое указатель рядом с существующей контактной электронной почтой, которая не тронута. Назначение - это указатель и ничего больше: он записывает, какой почтовый ящик отдел или Орг достигается и не предоставляет никому доступа к нему. Оба столбца являются простыми UUID без FK для email provider.mailboxes. Почтовые ящики синхронизируются с внешними поставщиками и могут быть удалены на стороне поставщика, а также конечная точка удаления почтового ящика ничего не знает о отделах - реальная ФК перевернет оба из тех, кто потерпел неудачу. Несвежий указатель - это принятая стоимость, и пользовательский интерфейс ее отображает. Department.email остается, удерживая адрес, на который решается назначенный почтовый ящик. Потребители хотят адрес, а не идентификатор, и адреса почтовых ящиков неизменны. (updateMailbox принимает только имя дисплея и пароль), поэтому копия не может дрейфовать. Назначение записывает оба; очистка отменяет оба. Почтовый ящик другой организации отказал - сборщик предлагает только эту организацию, но запрос может быть сделан без нее, и указатель перекрестного арендатора помещает адрес одной организации на исходящую почту другой.

  25. · kamo-internal

    Поле менеджера на позиции и один человек для всего приложения

    Карта позиции получает менеджера, необязательно. Это поиск, а не выпадение: орг может держать Тысячи имен, и единственное, что выбирается со всеми гарантиями, это свиток. Отклоненный менеджер — скажем, цикл отчетности — вскрывает причину сервера, а не Неисправность члена не может действовать. MemberPickerDialog - это выборщик. Поиск выполняется на сервере, результаты приходят на страницу Время, и прокрутка просит следующего, так что ничто здесь не держит каталог. Он читается как Командная палитра, потому что это самый быстрый маршрут для тех, кто знает имя. Навигация по-прежнему работает для тех, кто этого не делает: стрелки движутся, Enter выбирает, Escape закрывается, И подножие так говорит. Rows несут название, отдел, электронную почту и количество отчетов - достаточно для Назовите двух людей с одинаковым именем. Тот, кого нельзя выбрать, остается видимым с Причина прилагается; имя, которое молча не в списке, читается как ошибка. Два сборщика уже существовали, и ни один из них не смог выжить в большой организации. Подписчик электронной подписи Диалог и чат добавленных участников пополз как принесли каждого участника и отфильтровывали в Браузер. Оба сейчас ведут этот диалог, сохраняя собственные источники — подписчиком может быть любой Член, каталог чата - это не просто персонал - и получение того же поиска, клавиатура Управлять и смотреть. Потопом становится AddChatMembersDialog, так как он больше не является попувер.

  26. · SecurityService

    Установите менеджер и ищите в каталоге страницу за раз

    GET **************** отвечает на одну страницу каталога организации сессии. Поиск, заказ и подкачка происходят в базе данных; враждебный размер = ограничен. Слова есть ANDed и LIKE метахарактеры ускользнули, поэтому вставленное электронное письмо с подчеркиванием сужает Поиск вместо того, чтобы расширять его. Пользователь платформы никогда не появляется. Сейчас сотрудник службы безопасности читает и пишет менеджеру. Три отказа, в заказе вызывающий бьет их: не член команды этой организации, не они сами, не кто-то, кто уже отчитывается. через этого члена — последний закроет линию отчетности в петлю без запроса Это может закончиться, поэтому он не может жить в схеме. Менеджер решается до того, как что-либо будет написано. Экономия - это одна транзакция роли, права, тайм-аут и должность; возвращение 400 на полпути по-прежнему будет совершаться Все, что было написано до этого момента, так что ответ будет сообщать об отклоненном менеджере. Роли тихо изменились. MemberAvatarUrlService является домом для построения URL-адреса аватара в новом коде. Несколько Контроллеры несут частные копии, которые дрейфовали - AccountController все еще выбирает расширение фотографии с экземпляром, которое является ложным для прокси Hibernate и служит для .png URL для JPEG.

  27. · kamo-shared-library

    Менеджер и поиск в каталоге, который выживает в большой организации

    TeamMember получает дополнительную самооценку для того, кому он сообщает. Обозначение является Прикреплен к INT8, поэтому Hibernate не может копировать Участника. ID's DEFAULT unique rowid() в соединении Заполните каждую строку столбцом и обратно с менеджером, которого не существует. TeamMemberRepo получает SearchDirectory: одна страница каталога организации, отфильтрованная, заказанная Окна в базе данных. Она написана для организаций с пятью фигурами персонала, поэтому Абонент никогда не держит больше, чем страницу — пикер, который он поддерживает, работает на каждом нажатии клавиши. Термины ANDed против одного конкатенированного стога сена, что позволяет найти «кредитование» Ана в кредитовании; цепь или подобие не может, потому что подобие только соответствует смежным. СМС. Каждая ассоциация соединена с явным левым: неявный путь присоединения является внутренним. в JPQL и молча бросал всех без отделения. Циклы не могут быть выражены в схеме, поэтому найдитеManagerId Позволяет писателю ходить отчетная цепочка по одному звену за раз, прежде чем принять менеджера.

  28. · InitializerService

    Дайте члену команды менеджера

    Добавляет MANAGER ID в Member team member, самоотчетность для отчетности линия. Ничего не заполнено: ни один менеджер не является полным ответом. График и для любого просто неназначенного. DROP DEFAULT — несущее нагрузку заявление, а не ADD COLUMN — ddl-auto: обновление Сначала создается колонка. Присоединяйтесь к члену, идентификатор которого INT8 DEFAULT Уникальный rowid(), наследует этот дефолт, если сущность не прикрепляет столбец Определение, которое Каждый существующий ряд будет штампован случайным идентификатором менеджера. Сирота и самооценка Сметает четкие идентификаторы, которые колонка по умолчанию уже написала бы.

  29. · InitializerService

    Добавить DEPTS.PARENT DEPT ID для вложенных отделов

    Nullable with no backfill - нуль означает верхний уровень, который является тем, что каждый существующий Большинство было и останется. Объявлен простой UUID с явным DROP DEFAULT. Отключите ключи UUID DEFAULT gen random uuid() и колонка FK, которая наследует этот дефолт В каждой из них есть свои родные и близкие, и все они – дети. Несоблюдение ограничений, которые следуют.

  30. · SecurityService

    Погрузите родительский отдел через создание и обновление

    Теперь ведомство принимает запрос DTO вместо восьми позиционных аргументов, Таким образом, родитель присоединяется к полезной нагрузке, а не становится девятым в ряду однотипных. струны. Организация, нащупывающая мутирующие конечные точки, неизменна; собственная аренда родителя Проверяйте жизнь в службе вместе с охранником цикла.

Ваша вселенная ждет.

Начните бесплатно через несколько минут. Добавляйте продукты, когда будете готовы — без миграции, без новых логинов.

Бесплатно навсегда — не требуется кредитная карта