チェンジログ
何が新しいの?
プラットフォームのすべての改良 それが出荷される
· kamo-internal
すべてのストレージカテゴリを別々に表示
録音、ボイスメール、チャット添付ファイル、人事リソース、マーケティングの呼び出し 各マテリアルは「ドキュメントと画像」を共有するのではなく、独自のラインを得る 同じテーブルで生きるために起こるすべての他の列。 視覚のための2つの結果。 14のカテゴリが何を超える categorical パレットは符号化できます — 過去に約 8 つ、加えられた hues は停止します 色を基調とした読者のために分離可能であり、装飾になるため、アイデンティティは ラベルと共有バーによって運ばれるのは、純粋に1つのhueを使用します。 トレンドは、14方向のスタックではなく、単一の合計シリーズです。 トレンド回答の質問は「私のストレージが成長している」であり、そのカテゴリ テーブルが正確になるテーブルのジョブです.
· kamo-shared-library
各種類の保存したファイルを独自のカテゴリとしてカウントする
通話録音、ボイスメール、チャット添付ファイル、人事リソース、マーケティング 資料、会議の記録、あらゆる種類の文書はすべて、imgs のすべての行です。 ImageAssocType と 1 つの Bucket を共有するだけで区別されます。 ストレージ境界ではなくメタデータです。 それらを報告する 単一のラインは正確で、役に立たない: 1 つの生産の組織のためにそれを隠しました 5.08 GB のフットプリントはチャット添付ファイルでした。 各協会はドメインに属していますので、組織は何かを見ることができます 実際には、未分化された合計ではなく、ストレージを消費します。 StorageDomainCoverageTest はビルドの失敗を省略します。 ImageAssocTypeは、正確に1つのドメインで要求されなければならない - 宣言されていない方法でアップロード 保存され、請求されることはありません。2回請求されると2回請求されます。 プロフィール プローブ:そのドメインからHR RESOURCEを削除しても、ビルドが理由で失敗します。 静かに通過するのではなく。 MEETING RECORDINGSは、そのソース、会議 レコーディングテーブル、および MEET RECORDING協会. ミートレコーディング サービスは元だけ書いているので、 彼らは重複しません.
· EmailService
各orgのKamoMailメールのメールボックスを測定する
すべてのメールボックスのKamoホストとレコードを移動します。, 到着日あたり, RFC822はそれをバイトします 保持 — ヘッダ、ボディ、エンコードされた添付ファイルを含むすべてのフォルダーに ゴミ箱とジャンクは、ゴミ箱のメッセージがディスクに残っているためです。 1往復 フォルダ: ジャカルタメールIMAPプロバイダがFetchProfileを拡大します。 項目。封筒への 封筒の内部RFC822.SIZE、従ってサイズおよび到着の日付は一緒に着きます。 Dovecot がアドレスの認証情報を持っているかどうかによって何のカウントが決定されます。 プロバイダーの設定を読み込みます。 Virtual users のプレゼンスは、 「このメールボックスを格納する」と、プロバイダの列は、継承され、 親、中等から。 マイクロソフトまたはGoogleの収穫によってホストされているメールボックス 資格情報がないため、組織は何も請求されません。 各メールボックスの org id からカウントする人。 KamoMailはシングルではありません テナント — 生産は 1 つの組織と 41 の下の 18 個のメールボックスを持ちます。 ドメインまたはメールドメインをまとめて、4つのドメイン間で相互に統合 別のメールに1つの組織を請求します。 アドレスは小文字と一致します。 Dovecot のユーザテーブルと maildir パスは メールボックステーブルが作成されたメールボックスをケーシングする際の小文字 と, そして、ここに不一致は、すでに一度の分割配送と検索を持っています 2つの異なる郵便利用者を越える。 また、エンドポイントのエンドポイントではなく、/api/internal 全体を保護します。 ザ・オブ・ザ・ /api/internal/calendar と /api/internal/lead-comms を個別にフィルタリングします。 そのプレフィックスの下にマウントされているので、次のコントローラー — は 秘密、無声、露出の方向で到達可能。 6件のアトリビューション、ケースハンドリング、および未ホストケースに関する新しいテスト 合計、すべての渡る.
· InitializerService
メールボックスのストレージ測定用スキーマ
******************************** は、メールボックスと到着日ごとに保持されます。 メールボックスが保持されているRFC822バイト。 ストレージの会計は正直なソースを持っていません mailbox バイトの場合: 検索インデックスはインデックス化されたメッセージのみをカバーし、 誰が保存しているかに関係なく、それらをカバー. ORG ID は、電子メール provider.mailboxes から非正規化されるため、組織化 aggregation は 1 つのインデックスの合計であり、そのためのアトリビューションは 1 つのメールボックスごとに保持されます。 組織は、一度にKamoMailで、ドメインのメールが保持できます。 異なる組織に属するメールボックス。 生産から実行 2026-08-08; 確認されたテーブルとインデックス.
· kamo-shared-library
実際にホストするメールカモを、メールボックスごとに測定する
EMAIL は email metadata.search index から供給され、両方で誤った 方向。 KAMO MAIL の org は、KamoMail を完全に見逃しました。 自社のドベコットメーディルの添付ファイル、制作中の62 MB ゼロとしてカウントされる。 Microsoft 365 または Google で org を請求しました。 そのプロバイダのディスクに座ってメールのためのワークスペース, カモは何も保持していない場所 しかし、独自の検索インデックスです。 メニュー 置換:メールボックス、到着日ごとに、 合計 RFC822 バイト — ヘッダ、ボディ、エンコードされた添付ファイル。 郵便利用者を占める メッセージの1つではなく、1日で Bucketing はテーブルを保持します 仲裁請求ウィンドウをまだ許可しながら、日々のメールに比例 数か月に丸められたのではなく正確にまとめられます。 属性は、独自の org id を経由してメールボックスあたりで、ドメインごとではなく、 メールアドレス KamoMail は 1 つのテナントではありません。: 生産は既に 18 個のメールボックスを持っています 1 つの org と 41 の他の 1 つのテーブルで 4 つのドメインをインターミックス. ドメインを召し上がるか、メールが全体として、別のドメインに対して1つのorgを請求する メール この上陸前に生産で確認されたシェマ:email provider .mailbox storage days は、KI の実行後にその一意の制約で存在します.
· kamo-internal
メールボックスのストレージがゼロを読むことができる理由を言う
メールボックスバイトは、実際にホストするメールカモだけをカウントします。 組織について Microsoft 365 や Google のワークスペースは、そのプロバイダのディスクにそのメッセージを持っているので、 メールボックスの行は正当 0 です。つまり、説明されていない、壊れたものとして読み込みます。 正しいものではなく、番号.
· BillingService
プラットフォーム管理者は、要求に応じてスナップショットスイープを実行してみましょう
スイープは、期間の除去と寿命の合計を作るものです 完全で解散するドメインが解答可能なため、残留に失われた日は失われます ギャップが満たされる限り永久に。 待ってから次の 04:20 run ない a 回復計画。 スイープはすでに14日間追いつかり、(例えば、日、ドメイン) 繰り返しの呼び出しは、二重数ではなく決済されます。 これは、後ろにそれを暴露します @PlatformAdmin は、行数だけを返し、呼び出し側が動作する様子を確認できます.
· kamo-internal
アカウント stats タブでストレージの使用状況を表示
タブは、組織ごとに「この期間に利用するデータがない」と述べた。 billingApi.getCurrentUsage() は、stub を返す { メートル: [] }, 使用法Meters 空の状態をゼロメートルでレンダリングするので、メッセージはスタブを報告していました。 データではなく。 StorageUsagePanel は、BillingService のエンドポイントを読み込み、2 つを示す 側面で理解しやすい数字:組織が保持しているもの 今、ファイルが削除されたときに落ちる、およびその上に追加されたもの ない寿命。 それらに加えて、この期間を移動したものと、 文書、メールボックス、ナレッジベースメディア、ミーティングを横断する 記録および開示。 図が測定ではなく床である場合、それはそう言う - 除去 背後にあるスナップショットを開くか、ストレージ領域の合計で合計 そのレコードをハード削除する。 チップはレコードベースを説明します: orgは カモがハッシュごとに1つのコピーを保存しても、保持するすべてのファイルに対してカウントされます。 トレンドは、歴史の2日間だけ存在します。 1つのポイントはトレンドではありません。 そして、まだ収集されていない歴史は、それを描きます。 シリーズ色は、検証済みの分類順です。最悪の隣接するCVD ΔE 9.1、 この表面に最も近い隣接した正常なvision ΔE 19.6。 3:1以下の3座 対照、従って故障テーブルは装飾的ではないです:それは非色読書です 同じデータの バイトカウントは終了まで続く文字列を保持します(BillingServiceはロングを経由してシリアライズします) ToStringSerializer(トーストリングセラライザ)は、その大きさが確実に安全であるところに限られております.
· BillingService
組織が保存されていることを報告する
アカウント stats タブは常に「この期間に利用可能な使用データがない」と述べています。 kamo-internal の getCurrentUsage() がスタブであるので、すべての組織のために ゼロメートルを戻し、その背後にある何も蓄積されたストレージ。 ストレージエリアごとに3つの異なる数字を、合計で保存します。 - 組織が現在保持しているもの、ファイルが削除されたときに落ちるもの - それがその寿命の上に追加したもの、それはない - 現在の請求期間中に移動したもの 取り外しは派生しています — 記憶テーブルは非活性化をタイムスタンプしません。 EmbRecordState.DATE UPDATED は、inputable=false であり、決して更新しません。 開始 + 追加 - 期間の開いているスナップショットに対する現在の。 なし スナップショットを開くと、タイムスタンプをゴミ箱に戻り、それ自体をレポートします。 測定として推測を提示するのではなく、床。 ライフタイムが正確な場所 削除された行は、彼らがしないスナップショットから生き残り、蓄積します。 つまり、UIもできる。 BillingPeriodResolver は、ライブサブスクリプションの期間を優先し、に戻る orgのタイムゾーンのカレンダー月。 そのフォールバックは、機能全体です 生産: すべてのサブスクリプションは、NULL current period start および current period end なので、その期間の数値が全て空になります 存在する組織 — 置換するスタブと同じバグのクラス。 StorageSnapshotSweep は、各 org の履歴ごとに毎日の位置を記述します。 最大14日見逃しの日をキャッチし、クエリ可能なから最初のスナップショットをシード 追跡がゼロで再起動しないので、寿命。 プラットフォームのエンドポイントは、物理的に保存されたバイトに対して請求されます。 お客様の声 レコードごとに請求されます。 img dats はハッシュごとのコピーを保持していますが、多くの orgs には そのファイルとサムネイルと変換の費用バイトは誰にも請求されません。 両方とも カモの経済性が高まっていますので、@PlatformAdmin.Only. 21件の新しいテスト、113合計、すべての通過.
· InitializerService
Org storage snapshotsのスキーマランナー
ミラー OrgStorageSnapshot as explicit DDL, per house style — ddl-auto 最初にテーブルを作成するので、CREATEはフォールバックであり、SET DEFAULTは 実際にSQLをプレーン(Hibernate はカラムのデフォルトを出力しない) Java でエンティティティティティティが埋め込まれる値の場合。 また、imgsを(ORG ID、DATE CREATED)、(ORG ID、DATE TRASHED)にインデックス化します。 ストレージ 集計は、すべての要約リクエストと既存のインデックスの両方を読み込みます。 assoc-とフォルダ形状。 生産から実行 2026-08-08; org storage snapshots すべての16で検証 共有リブのエンティティティが押し出される前に、カラムとその独自性制約.
· kamo-shared-library
組織化ストレージ使用モデル
組織ごとのストレージを要約したことがない。 6つのエンティティティティティがバイトを運ぶ ファイルごとにカウントし、アカウントが集計されていない stats タブは、すべての org に対して "この期間に利用可能な使用データなし" をレンダリングします。 集計が必要な共有モデルを追加します。 - StorageDomain — 5つのorg-attributableストレージ領域、各宣言 削除されたレコードが生き残るかどうか。 ドキュメントやKBメディアソフトデレツなど 生涯合計はストレートクエリです。メールボックス、録音、開示 硬いデレツなので、その人は先にしか蓄積できません。 - OrgStorageSnapshot — 1行/(または、日、ドメイン) 3つに存在する 事実の後に回復不可能である数字:生涯合計のための ドメインの削除、期間除去の開始位置 (テーブルのタイムスタンプが非アクティブ化されていない - EmbRecordState's DATE UPDATED は、inputable=false で、決して更新しません)。 期間が終了した際に固定する番号。 - OrgStorageAggregator — 1つのクラスのすべてのドメイン集計。 総計数 保存されたオブジェクトを上回らないレコードの上にまとめました。 img dats は 1 つの物理的を保持します。 しかし、多くのorgsがそのファイルを保持し、その保存はカモのことです。 aggregator は意図的にステレオタイプを運びません。 すべてのサービスが実行される @ComponentScan("com.kamo") なので、すべての~40 でそれをアノテーションする BillingService はビーンを宣言します。 また、メールサイズのバックフィルが必要とする検索インデックスのクエリを追加 —size bytes インデックスが作成されてからハードコード 0 として記述されたので、メールボックスのストレージ これらの行が修復されるまで、プラットフォーム全体でゼロバイトとして読み込みます。 この着陸前に生成で確認されたスキーマ: org storage snapshots が存在します KamoInitializer が実行した後、全 16 列で.
· InitializerService
********************アプリの分割を宣言
バックフィルは、見逃していたプランの行だけを埋めただけなので、黙ってはいけません。 tierを移動します。これは、最初にそれらを置くたびに価格がなかったアプリを残します。 販売のポイント そして、マーケティングツールは、フリーで販売されていない方法で終了しました。 各プランがすでに価格設定ページで約束しているかに固定されているため、行列とマーケティングコピー ドリフトできません:無料は評価(CRM、チャット、ドキュメント、メモ、KB、計算機)です。 Starterはアプリを追加します。 ビジネス取引(サポート、コマース、マーケティング)。 ビジネスはプレミアムセットプラステレフォニーを追加します。 在庫およびクラブハウス; 企業は法的を加えます。 電子メールのホスティングと2つの起源システムが属しています いかなるプランにおいても、メールが座席ごとに料金を請求されることはありません。 バックフィルとは違い、ギャップを埋めるのではなく、その理由は、 真実: 階層の変更はここに所属します。, レビューで, 次の実行を編集するUIではなく、再変換します。. 対象:11列変更 POSとマーケティングフリー、および4つの未発表アプリが与えられた 彼らが出荷するときに着陸するので、データを変更するのではなく、一つはステージフリップです。 2 番目の実行レポート 0 の変更.
· kamo-internal
利用可能なアプリと機能の分割/非公開/非推奨
1つのフラットリストは、プラットフォームは、それがないものとそれを提供し、プラットフォームを混合アプリ 退役したので、オペレータはそれらを離れてそれらに言うためにすべての破片を読んでいなければなりませんでした。 バケツは排他的で、非推奨が最初にテストされます:退職されたアプリは 空室状況のフラグがまだ言うと、その理由は残っていません。 廃止予定 これにより、パールーの「非推奨」チップと調光も行えます。 冗長 - そのタブ内のすべての行が退職されるので、両方がなくなっています。 パーティションは、ドラフトではなくサーバーの状態を読み込むので、非推奨のチェック スイッチは、それをヤンキングするのではなく保存の土地まで、場所の行を残します 編集から.
· SecurityService
ブランチタイプのテナント対応アプリカタログ
ブランチタイプ→ 許可されたアプリは、/platform-config/app-catalog からアプリ一覧を読み込むようになりました。 トップレベルのオーガナイザーが必要です。 ホストページは、CONFIGURE SYSTEMの代わりにゲートされます。 GET 403'dのテナント:エディタはゼロアプリと保存ハンドラをレンダリングし、保存を拒否しました すべてのセキュリティモデル — 名前、年齢範囲、役割、商取引の種類をブロックする カタログを含む。 これは、KamoCRM管理者が組織せずに失敗しましたOwnerも. **************** は、CONFIGURE SYSTEM の下の同じ解決されたカタログを、 意図的に狭い投影:タイプ、表示名、説明、段階、利用できる、非推奨。 オペレータノート、enum のデフォルト無し、entitlement の診断 — これらはプラットホームがいかにあるか記述しません 実行し、書き込みはプラットフォーム所有者のみを維持します.
· kamo-internal
Apps & Featuresタブを追加し、許可されたアプリリストを修正
新しいタブは、組織の権利に、組織のあらゆる組織を制御します 提供: 可用性、開発段階、表示名、説明、 オペレータノート、および非推奨。 ステージから受け継がれず、 なので、テスト中でも、テスト中でも、あとで戻ってもアプリを公開することができます。 終わり;段階はバッジおよび棒だけを運転します。 オーバーライドされたフィールドは マークされ、個別に再変換し、非推奨化 — アプリを隠す 使用するテナントごとに、確認するアプリの名前が必要です。 セキュリティ・モデル・エディタでアプリを手持ちのTypeScriptで許可 ServiceType.java のコピーは、エディタに問い合わせて整列するコメントです。 それは、目に見えない漂流していた: - MLOSは完全に欠落していたので、セキュリティモデルが死亡率を付与できませんでした オリジネーション - LOSは「住宅ローンの起源システム」を分類しました — それは個人を意味します 2026-08-08 の名前が変更されるので、エディタは個人ローンを書いた 彼らが住宅ローンを付与したと思ったオペレータのための助成金。 - POS と ESIG は、出荷後に長い計画を示した。 そのリストに可用性インジケータを追加するだけで、 自信を持って間違っているので、新しいタブの書き込みと同じカタログを読み、 同意できません。 保存は、カタログの負荷までブロックされます。 appConfigs ビルダーはそれを反復します、従って空のリストは除去しました モデルの助成金.
· SecurityService
アプリカタログを配信し、機能を読み込む
FeatureController は enum のステージから「このアプリが提供されている」を 4 で取得しました 別の場所なので、回答は赤味でしか変更できません プラットフォーム。 それぞれが AppCatalogService を読んでいます。 表示名、記述および非推奨。 1つの行動の繊細さは、根元の門です。 「ステージ」を読むのに使われます 必須ではないので、子供はこれを有効にしないかもしれません」 — ドッグフードの道。 それは、 「現在このプラットフォームは提供していません」を読んでいます。 オーバーライドなし unset の可用性が解決するため、同じ文が存在します。 ステージ ==必須 オペレータがまだあるアプリを公開したら TESTINGは、新しいフォームのみが正しいことです。アプリなしでは あらゆる子のorgにサイレントブロックされたまま。 PlatformAppCatalogControllerは、トップレベルの所有者、同じにゲートされています 隣接するプラットフォームタブとしてオーディエンス、利用可能なかどうかをレポート app は実際にプランの行列にある — アプリの計画の言及は解決しない 演算子が選択したものではなく、フェイルオープンの設定.
· kamo-shared-library
実行時にアプリの可用性とステージ編集が可能
すべての属性は、アプリの設定ページがレンダリングされます — 表示名、説明、 ステージ、非推奨 — は、ServiceType 列でコンパイル時の定数でした。 と “Available” は全く保存されていません: ステージ == COMPLETED として派生しました UI とサーバー側の 3 つの場所にある。 編集の意味の変更 共有ライブラリとプラットフォームを再デプロイします。 PLATFORM APP CATALOG は、すべての上書き列で1行ずつ保持します。 nullable と AppCatalogService はオーバーライドを解決しますか? ログイン 行方不明 つまり、enum の動詞は、この変更を動作させない。 可用性は独自の値になります。これは、ソフトローンチ(提供)を作るものです。 それでもテスト中)、または侵害された必須アプリが表現可能です。 そのフォールバック enum ではなく、ReSOLVED ステージを読み込むので、動かす演算子 また、スイッチをフリッピングすることなく、COMPLETEDのアプリが利用可能になります.
· InitializerService
アプリごとに適切に分類されたカタログ行を1つに分類し、すべてのエンタイトルメントルート
Nineアプリ — POS、マーケティングツール、計算機、クラブ、在庫、法的、ゲームと2 オリジネーションシステム — カタログの表現は全くなかった: 価格の行、カテゴリなし、ティアなし。 すでにマーケティングの行で説明していたので、それらを結合して並列を追加する APP * 行は 1 つの ServiceType の 2 行を与えられ、PlanFeatureincluded は依存します 反復の順序。 ランナーは、代わりにカタログを収束します。 - 公開されたマーケティング行をアプリにバインドする(VIDEO CONFはミート、メッセージングはチャットです)、 公開された行列が動かないため、コード、名前、カテゴリ、および階層値を維持します。 - アプリ用の行を作成して、カタログが記述されていない、実際のカテゴリで、新しいものを含む 商取引及び起源の部門; - 以前のAPP *プレースホルダーを実際のアイデンティティに宣伝し、フラットアプリケーションを削除します。 バケツを空にして下さい; - 同じアプリの重複行を削除し、マーケティング行を好む。 左にAPP フォールバックはありません。すべてのアプリは読み取り可能なコードを持ち、公開されたカタログをアプリで提供しています。 既に名前は、独自の行列と記述せずに、元の行列と 1 でその厳密なコードを再利用します。 同じプロダクト同じ。 その問題 — Sign.pink はマーケティングの行列がなく、左に enumの定数の後で示される11列。 MLOS と Personal Loans は、一食当たりではなく、エンタープライズネゴシエートです。 CUSTOM型プラン(Enterprise)でのみ対応可能。 彼らは上に作成されます プラットフォーム org のみ — ホワイトラベル製品 org はそれらを再販せず、2 は上に作成しました 以前のパスによるsign.pinkは非アクティブ化されます。 実行後、prod に対して検証: 0 APP * コード左、0 重複service type 行、21 件のアプリ 各ルート, 0 未発見のプラン・バイ・アプリの組み合わせ, 再実行は、no-op.
· kamo-internal
サーバー発祥の組織コンソール
1つのリクエストですべての組織をロードし、それぞれカードをレンダリングするタブ バックエンドが org ごとにファンニングし、アカウントごとに、サブスクリプションごとに実行します。 検索、ソート、フィルタリング、およびページングは、サーバー側を不動産全体に対して実行します。 そのため、多くの組織が存在してもページコストは平らです。 行は右オブジェクトです。 サブスクリプションはアカウントによってHELDされ、 TARGETS org なので、古いカード -- ホルダーにキーをつけました -- 印刷しなければなりませんでした ネストされたテーブルの内側のターゲットの名前、および顧客 orgs は文字列として現れます 行ではなく、他の orgs の行の中。 各行は今、エンタリメントを実行します (インバウンド:このorgを支配するもの)と課金が保持される(アウトバウンド:それが請求するもの 他の人) 別の面として。 設計:各行の左端および比例した不動産棒を離れた状態柵、 そのため、単語の前に商業健康の色のヒストグラムとしてページが読み込まれます 読み込み; 請求不動産のほとんどのセル以来、突然変異ゼロの表数 ゼロです。 表の状態は URL に住んでおり、フィルタリングされたビューは linkable -- 書かれています `tab` を保存し、ActiveTab を公開しないコピーを介して、 tabSync に所属します.
· SecurityService
アプリを閉じた失敗は、計画は決して言及しません
Kamo.entitlement.fail-open は AppEntitlementCatalogMigration が反して実行されていることを今オフにします prod とすべてのアクティブな計画の entitlement ルート (KamoCRM, サインピンク) explicit を運ぶ 全21コア以外のアプリの行 — 未発見のプラン・バイ・アプリの組み合わせを検証するので、 正式に価格設定されていないアプリを除き、デニーバイデフォルトでは残らない。 これは、任意のorgが今日使用できるものを変更しません: 出荷されたアプリは明示的に含まれています、そしてMLOS そして、すでに明示的に拒否された個人ローンアプリは、バインドされたincluded=false行です。 このフラグに関係なく。 それが閉じるものは、決して現れないで価格を割ってアプリの滑りです プランの行列で 移行が実行される前に、新しいエンタイトルのルートが追加されている場合、Flip は true に戻ります.
· BillingService
Org ディレクトリをフィルタリング、ソート、ページをペジネーション
GET /orgs はページ/size/q/sort/dir と 7 つのフィルターをとり、家を返す 不動産全体の総計でページをエンベロープします。 GET /orgs/{orgId} は、完全な詳細を提供しています コンソールのドリルイン引き出しでは、パーアカウントのファンアウトが細かいので、 1つの組織に拘束されます。 listAllOrgs() は truncating delegate として保存されるのではなく置換されます。 正確に1つの呼び出し元(このコントローラ)、およびフロントエンドの ListOrgs() は正確に 1(書き換えるタブ)なので、互換性のシムは追加されるだけ それに応じて何もないサイレント実行リスク.
· BillingService
一定のクエリカウントでページ水和をバッチ処理
親タイトル、プライマリドメイン、資格の背後にある計画/市場 サブスクリプション catalog フラグは、ページ全体で 1 つのバッチ IN (:ids) です。 そのため、100-rowページは1-rowページと同じ6つのステートメントを要します。 テスト equality を直接主張する -- 実装はこの置換がスコアになる 600から6。 サブスクリプションは、EntitlementModeResolver、同じコードで選択されます 行のモードを決めたので、常に示した計画は状態に属します 詳細はこちら Queries は、新しいリポジトリメソッドではなく EntityManager を経由します。 kamo-shared-library は、すべてのサービスに依存し、変更する必要はありません.
· BillingService
ディレクトリ行/ページ DTO とネイティブクエリリポジトリ
PlatformOrgRow は 2 つのファセットを別々に運ぶ: 字幕 (インバウンド サブ) orgをターゲティングする - 何はそれを支配します)と課金が保持される(org自身のアカウント) -- プラットホームのorgおよびresellersだけのための非ゼロ。 アグレゲートは、 フィルタされたセット全体で、ページではなく、KPI ストリップは意味を変えません オペレータページ。 すべてのドライバーは、キャストではなく、数値/ボロランを経由して強制されます。 行が一致しないcolesce(...,0) は、同じ列が同じ列で整数を返す rows は dev で渡され、prod で投げるロングを返します。 お金が交差する ワイヤーは小数の文字列として.
· BillingService
Per-facet CTEs を使用した Org ディレクトリ SQL
各アカウント、インバウンドサブスクリプション、メンバー、ライセンス、子供 orgs に入社する前に、CTE に集約。 1つでそれらを結合 パスは行を乗算し、すべてのSUMを膨脹させます。 純粋で、単テスト済み(26テスト): ':' キャスト、すべての値のバインド、ソートキー OrgSortを通してホワイトリスト。 テストピンの2つのことは簡単です "tidy" をバグに -- ORDER BY と派生した述語 (mode rank, has stripe) `o` alias がスコープから出ているので、ベース CTE の projected カラムの名前を付ける必要があります。 外部クエリでは、PENDING の試験は期限ではなく期限を報告しません。 新規登録 ライブクラスターに対して検証: 両方のステートメントが実行され、カウントは一致します 行で、フィルタ/アグレゲートが適用されます。 インデックス使用は実証されていません -- で 12 orgs / 9 サブs CockroachDB フルスキャン, 正しく.
· BillingService
検証済み、クランプされた org ディレクトリー
サイズクランプを[1,100]にし、認識されていないソートはタイトルに戻りますので、 hand-edited URL は、プロパティ全体が要求できず、SQL をそのまま取得できます。 無料のテキスト。 OrgSort enumはソートホワイトリストです.
· BillingService
1つの共有、決定的な解決者によるDeriveのentitlementモード
TrialAdminService は、findFirst() でトライアルサブスクリプションをピックアップしました。 順序付けされていないリストなので、 Pending と Active の両方を保有する org は、 報告する。 今後の組織ディレクトリは、ソートとフィルタリングを行わなければならない この状態では、クエリは非決定的なルールを再現できません。 今の優先順位は、中 **************** に住んでいます ライブトライアル、エンドウイングオーバーのアクティブウィンが期限切れになり、アクティブな有効期限 最新のお知らせです。 status() は正確な応答形状を保持します。 このリポジトリの最初のテスト (11).
· InitializerService
プラットフォームプランのカタログにバックフィルアプリのタイトルの行を埋めます
Entitlement はタイプされたservice type カラムで解決しますが、カタログ行は行いません。 全てのプランは、fail-open デフォルトで 'everything include' に解決しました。 この種は、 行列なので、kamo.entitlement.fail-open は、最終的にダークファイリングアプリなしでオフにすることができます。 - AppEntitlementCatalogMigration (@Order(51)、プラットフォームOwnerPlanSeederの後に): 重要 バックフィル。 'Applications' の機能カテゴリを 1 つの BOOLEAN 行を非コア アプリごとに作成します。 ServiceType にバインドし、コードを持つ既存の行を再バインドしますが、 serviceType は、階層ごとに不足しているプラン・ツー・アプリの行を差し込みます。 Insert-if-missing のみ — オペレータのisincludedを削除し、決して上書きしません、従って編集される層 設定 UI は再起動を生き残ります。 また、既存のVIDEO CONF/AI ASSISTANTを再結合/ HR SYSTEM / ESIGNATURES / EMAIL HOSTINGアドオン, 何も付与されていない. - KamoCRMPricingLoader:新鮮なクラスターのための同じマトリックス。 アプリの行は内部に追加されます upsertFeatures は 2 番目のパスで書かれているのではなく、upsertPlanFeatures は削除します。 差し込む前に計画の行 — 第二の呼び出しは、マーケティングの行を静かに拭きます。 お問い合わせ この loader は無効です (早期に返り、その DataLoader 呼び出しはコメントアウトされます)。 上記の移行が生産経路である理由.
· SecurityService
アプリのタイトルに住宅ローンと個人ローンの垂直をゲート
MORTGAGE 市場は POS がオンになったとき、MLOS アプリに関係なく / コマースに登場しました。 /features/enable は課金チェックが全くなかった — 設定 UI の padlock はプレゼンテーションだった なので、直接 POST は非必須アプリで切り替えられます。 - FeatureController: 計画がアプリを含まない場合、有効に403、シリアライズ 'entitled' は、両方の関数の verdict[] と available[] なので、UI の Padlock と 403 は 同じサービスによって計算され、同意できません。 - CommerceMarketController:市場型ピッカー(モデル許可リスト)のGET /allowedタイプ タイトルメントと交差する。 市場リストは、無題の垂直を低下させる - 非表示、決して アーカイブされたので、計画を回復すると、そのデータがそのまま市場を取り戻すことができます。 -**************** は、すべての /{marketId}/... サブルート上のガードを閉じました。 アプリの可用性 インターセプターはこれを表現できません。そのプレフィックスマップは1つのプレフィックスです。 ServiceType および /Commerce-markets は、POS の 7 つの垂直に対応しています。 - POSController:サブスクリプションカタログの公開発信者は、アプリにバインドされた行が見つかりません 必須に達していないので、ServiceType を COMPLETED に移動させると、それを公開する マーケティングサイト。 内部の発信者は、事前に価格をするためにすべてのものを見る。 - MortgageVerticalResolver:readinessはPOSだけを測定しました、従ってMLOSをまだ買ったことがないorg 準備が整っているので、 'missing' で MLOS を報告するようになりました.
· kamo-internal
LOS を MLOS に名前を変更し、個人的な融資のオリジネーション システム、ゲートの商業縦を加えて下さい
Apps タブは「商取引: Mortgage Loan Origination System」(タイトルはから提供されます) バックエンドのenum、TSミラーではなく)、新しい「商取引:個人ローンの起源システム」の下 利用できません。 MORTGAGE と PERSONAL LOANS の市場は、アプリ上でゲートされます。 - AppType/ServiceType ミラー: MLOS(14) + 新しい LOS(25)。 また、既存の漂流を修正します。 ミラーはJava列で解散しました。 - 組織: isMlos を追加しました。 isLos は個人ローンを意味します。 isLosはゼロの消費者を持っていた。 - FeaturesManager: gating は、サーバの 'entitled' フラグを読み込みます。 クライアント側の再構築 billingApi から getCurrentSubscription スローと getAvailablePlans が返されます [] (legacy) stubs) なので、すべてのアプリは、'ungated' と Padlock がレンダリングされることはありません。 - 市場ピッカー:作成と編集ページの両方が独自のハードコードされたCOMMERCE TYPES配列を保持しました。 今度は GET ******************** をレンダーします。 選択できません。 編集ページも1-MORTGAGE-per-orgルールをスキップしました。 それは保ちます 市場の現在のタイプは選択可能なので、ラプスされたorgはまだ開いて名前を変更することができます。 - Mortgage の設定は isPos ではなく isMlos のゲートを囲みます.
· kamo-shared-library
ServiceType でアプリのタイトルを解決します。LOS を MLOS に変更します
Entitlement は、ServiceType.name() に対して解決しました。 メニュー カタログのコードはマーケティングコード(USERS、VIDEO CONF、HR SYSTEM、...)であり、決して一致しません、 そのため、PlanFeatureincluded の不足しているデフォルトでは、すべてのプランですべてのアプリが付与されます。 リンクは不活性でした。 カタログ行は現在、型付きnullable service type と解像度が通過する なので、アプリは、動かずに名前を変更することができます。 -******************** 型サービス type カラム ( id として区切る) メニュー ServiceType で解決する; honour アドオンを経由して 以前は未読の**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** kamo.entitlement.fail-open の背後にある (デフォルトは、カタログ行列がシードされるまで)。 - サブスクリプションサービス: create/update/DTO と derive feature code によるサービスタイプを運ぶ 省略されたときの名前から — 設定 ダイアログは 1 つを送らなかったので、すべてから作成します。 UIはNOT NULL制約をヒットしました。 - CommerceType:各垂直を必要なアプリ(MORTGAGE->MLOS、PERSONAL LOANS->LOS)にバインドします。 - AppliedModelEnforcementService: getAllowedCommerceTypes はセキュリティモデルを交差させます allow-list をエンタイトルメントで; assertCommerceTypeAllowed は既に作成および編集をカバーしています。 - ServiceType: LOS -> MLOS id 14 を保持 (ORG FEATURES は id を主張するので、名前ではなく、 個人データの移行; 個人的な融資のための新しいLOS(25) — id 25 再利用14は再割り当てされるため 既存のmortgage行ごと。 - RoleRightType: MLOS * リバウンド、ID 139-144 変更なし; 個人ローン LOS * 190-195 に追加。 - ピモジュール。 PLOS が追加されました。名前は、mortgage PHI にマップされた個人ローンアプリを左に残します。 モジュールとmortgage unmapped, コンパイルされたクリーン.
