콘텐츠로 건너뛰기
KAMOUniverse

변경 로그

무슨 일이야?

플랫폼에 대한 모든 개선 사항, 그것이 선적.

  1. · kamo-shared-library

    텍스트 메시지 첨부 파일

    MMS 첨부 파일이 저장되고 계산되지 않았습니다. 그들은 또한 그들이 무엇인지 처럼 보이기: VoipMessageService는 데이터로 첨부 파일을 인코딩합니다: URI 및 쓰기 그것은 VOIP MESSAGES.ATTACHMENT URL에 인라인, 그래서 그들은 MinIO 개체가되지 않습니다 그리고 stat에 파일이 없습니다 - 측정은 저장된 문자 길이입니다, 대화의 org를 통해. Base64는 바이트보다 세 번째 더 큰 것을 실행하여 인코딩 및 그 팽창 양식은 실제로 데이터베이스를 점유하므로 계산 된 것이 무엇인지.

  2. · kamo-internal

    모든 저장 범주 표시

    통화 녹음, 음성 메일, 채팅 첨부 파일, HR 리소스 및 마케팅 각각의 자료는 "Documents and images"를 공유하는 대신 자신의 라인을 얻습니다. 같은 테이블에 살고있는 다른 모든 것을 행. 시각에 대한 두 가지 결과. 14 개의 카테고리가 어떤 것을 초과 categorical 팔레트는 인코딩 할 수 있습니다 — 과거 약 8, 추가 된 hues 중지는 컬러 블라인드 리더를 위해 분리하고 장식이되었습니다. — so identity is 라벨에 의해 수행하고 공유 바는 1 개의 hue를 순수하게 크기로 사용합니다. 그리고 추세는 이제 단 하나 총 시리즈 오히려 네 개의 방법 스택보다: 트렌드 답변은 "내가 성장하는 스토리지"이며, 어떤 범주가 테이블의 작업입니다, 테이블은 정확히.

  3. · kamo-shared-library

    저장된 파일의 각 종류를 자신의 범주로 계산

    통화 녹음, 음성 메일, 채팅 첨부 파일, HR 리소스, 마케팅 자료, 회의 기록 및 문서의 모든 종류는 imgs의 모든 행입니다, ImageAssocType과 모든 공유에 의해서만 구별됨 협회는 저장 경계보다 오히려 메타 데이터입니다. 그들을보고 단 하나 선은 정확하고 쓸모가 있었습니다: 1개의 생산 조직을 위해 숨겨지은 5.08 GB의 5.09 GB의 발자국은 채팅 첨부 파일이었다. 각 협회는 이제 도메인에 속하므로 조직은 무엇을 볼 수 있습니다. 실제로 1개의 undifferentiated 합계 보다는 오히려 그것의 저장을 소모. StorageDomainCoverageTest는 빌드 실패를 발생시킵니다. ImageAssocType은 정확히 하나의 도메인에 의해 주장되어야 합니다. - 불평하지 않은 의미 uploads 저장되지 않고 빌려지지 않고 두 번 청구를 두 번 주장합니다. 인증 : 프로브: 도메인에서 HR RESOURCE 제거는 이유와 빌드를 실패, 오히려 조용히 전달보다. MEETING RECORDINGS는 해당 소스, Meeting recordings 테이블과 요약합니다. MEET RECORDING 협회. 대회등록 Service는 이전에만 쓸 수 있으므로 그들은 오버랩하지 않습니다.

  4. · EmailService

    각 org의 자신의 KamoMail 메일 박스 측정

    각 mailbox Kamo 호스트 및 기록, 도착 일 당, RFC822 바이트 보유 - 헤더, 몸 및 인코딩된 첨부 파일, 모든 폴더에 포함 Trash와 Junk, Trash의 메시지가 디스크에 여전히있다. 1 왕복 폴더: Jakarta Mail IMAP 공급자는 FetchProfile을 확장합니다. 항목.ENVELOPE에 ENVELOPE INTERNALDATE RFC822.SIZE, 그래서 크기와 도착 날짜는 함께 도착합니다. Dovecot가 주소에 대한 자격 증명을 가지고 있는지 여부에 따라 어떤 계산이 결정됩니다. 공급자 조정을 읽으십시오. virtual users의 존재는 “Kamo는 이 mailbox를 저장합니다” 공급자 란은 stale일 수 있습니다, 상속했습니다 부모 또는 미주에서. Microsoft 또는 Google 수율로 호스팅되는 메일 박스 비례가 없으며 건너 뛰기 때문에 조직이 아무것도 부과됩니다. 각 mailbox의 자신의 org id에서 옵니다. KamoMail은 단일하지 않습니다. tenant — 생산에는 1개의 조직 그리고 41의 밑에 18의 우편함이 있습니다 또 다른, 4개의 도메인에 걸쳐 혼합 — 그래서 도메인 또는 maildir를 요약 다른 메일에 대한 하나의 조직을 빌릴 것입니다. 주소는 일치합니다. Dovecot의 사용자 테이블과 maildir 경로는 mailbox 테이블이 mailbox가 생성 된 것을 유지하면서 lowcase 와 함께, 그리고 경우에 mismatch 여기에 이미 한 번 분할 배달 및 retrieval 두 개의 다른 maildirs를 통해. 또한 /api/internal를 endpoint가 아닌 전체로 보호합니다. 더 보기 /api/internal/calendar와 /api/internal/lead-comms를 개별적으로 지명하는 여과기, 그래서 다음 컨트롤러는 그 접두사 아래에 장착 — 이 것 — 이었다 비밀, 조용히 그리고 노출의 방향으로 도달 할 수 있습니다. 6개의 새로운 시험은 attribution, 케이스 취급과 not-hosted 케이스를 덮습니다; 152 전체, 모든 전달.

  5. · InitializerService

    Per-mailbox 저장 측정을 위한 Schema

    ****** ******, mailbox 당 보유, 도착 일, 당 mailbox가 보유되는 RFC822 바이트. 저장 회계는 정직한 근원이 없었습니다 mailbox 바이트의 경우: 검색 인덱스는 색인된 메시지만 포함합니다. 누구도 저장하지 못합니다. ORG ID는 email provider.mailboxes에서 개편됩니다. 집계는 하나의 인덱스된 합계이며, 이렇게 attribution은 mailbox 당 체재 — 몇몇 조직은 한 번에 KamoMail에있을 수 있으며 한 도메인의 maildir가 보유 할 수 있습니다. 다른 조직에 속하는 우편함. 생산에 대한 실행 2026-08; 테이블과 인덱스 확인.

  6. · kamo-shared-library

    Mailbox 당 mail Kamo 실제로 호스트를 측정

    EMAIL은 email metadata.search index에서 출처를 썼습니다. 오시는 길 완전히 KamoMail을 놓았습니다 - KAMO MAIL의 org는 메시지가 있습니다. 클러스터 자체 Dovecot maildir의 첨부 파일, 생산 62 MB, 0으로 계산. 그리고 그것은 Microsoft 365 또는 Google에 org를 청구 할 것 그 공급자의 디스크에 앉아있는 메일을위한 작업 공간, 카모가 아무것도없는 곳 그러나 자신의 검색 인덱스. ****** ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** 그것을 대체: mailbox 당, 도착 일 당, 총 RFC822 바이트 - 헤더, 몸 및 인코딩 된 첨부 파일, 이는 무엇인가 maildir를 점유한다. 메시지 당 오히려 하루 버블링은 테이블을 지킵니다 일별 메일로 비례는 여전히 임의 청구 창구를 하도록 모든 달에 둥근 대신 정확히 요약됩니다. Attribution은 자신의 org id를 통해 mailbox 당, 도메인 당 결코 및 결코 당 파일 형식 KamoMail은 단일 임계인이 아닙니다. 이미 18 개의 메일 박스가 있습니다. 다른 한 org와 41 아래에서, 하나의 테이블에 4 개의 도메인을 가로 섞는다. 도메인을 요약, 또는 maildir 전체로, 다른 사람에 대한 청구서 하나 org 메일. 이 착륙하기 전에 생산에서 검증 된 Schema : email provider .mailbox storage days는 KI 실행 후 고유의 제약이 존재합니다.

  7. · kamo-internal

    왜 mailbox 저장이 0을 읽을 수 있는지 말하십시오

    Mailbox 바이트는 mail Kamo가 실제로 호스트 만 계산합니다. 회사 소개 Microsoft 365 또는 Google Workspace는 그 공급자의 디스크에 메시지가 있습니다. 그것의 우편함 행은 합법적으로 0 — 이는, 불평, 깨진으로 읽습니다 정확한 것 보다는 오히려 수.

  8. · BillingService

    플랫폼 관리자가 수요에 스냅 샷 스윕을 실행하자

    청소는 기간 제거 및 일생 합계를 위한 만드는 무엇입니다 열심히 삭제 도메인은 모두에 응답 할 수 있으므로, 정전에 잃어버린 것은 손실됩니다. 틈이 채우지 않으면 영구적으로. 다음에 대한 대기 04:20 실행은 아니다 복구 계획. 청소는 이미 14 일을 잡고 (org, day, domain) 당 idempotent입니다. 그래서 반복 호출은 두 배 계정 보다는 오히려 정착. 이 다만 노출 그것, 뒤에 @PlatformAdminOnly, 콜러가 작동 할 수 있도록 행 카운트를 반환합니다.

  9. · kamo-internal

    계정 통계 탭의 저장 사용보기

    탭은 모든 조직의 "이 기간 동안 사용할 수없는 사용 데이터"라고 말했다. billingApi.getCurrentUsage() 는 stub 반환 { 미터: [] }, 과 useMeters 0 미터에서 빈 상태를 렌더링합니다. 그래서 메시지는 스텁보고되었습니다. 데이터가 아닙니다. StorageUsagePanel은 실제 BillingService 엔드포인트를 읽었으며 두 가지를 보여줍니다. 측면에 의해 측면을 conflate하는 그림 : 조직이 보유하는 것 파일이 삭제될 때 떨어졌고, 그 위에 추가된 것 아닙니다. 그들과 함께, 이 기간을 이동, 그리고 문서, 우편함, 지식 베이스 미디어, 회의를 통해 각 도메인 내역 기록 및 공개. 그림은 측정보다 바닥이 아닌, 그것은 말한다 — 제거 그 뒤에 오프닝 스냅샷 없이, 또는 저장 공간을 위한 일생 합계 그것은 그것의 기록을 삭제합니다. 칩은 기록 기초를 설명합니다: org는 입니다 모든 파일에 대해 계산하는 것은 Kamo가 해시 당 하나의 복사본을 저장하더라도. 트렌드는 한 번의 역사가 존재합니다. 한 점은 트렌드가 아닙니다. 그리고 아직 수집되지 않은 역사가 드로잉됩니다. 시리즈 색상은 검증 된 categorical 순서 - 최악의 인접한 CVD ΔE 9.1, 이 표면에 최악의 인접한 정상적인 시각 ΔE 19.6. 3 아래 앉아 3:1 대조, 그래서 고장 테이블은 장식되지 않습니다: 그것은 비 색깔 독서입니다 동일한 자료의. 바이트 수는 문자열 끝에 종료 (BillingService serializes long via ToStringSerializer)는 평평하게 안전하다는 곳에 뿐만 아니라 넓게.

  10. · BillingService

    조직이 저장되는 것을 보고하십시오

    계정 통계 탭은 항상 "이 기간 동안 사용할 수없는 사용 데이터"라고 말했다. 모든 조직의 경우, getCurrentUsage()는 kamo-internal의 stub입니다. 0 미터를 반환하고 그 후에 아무것도 집계 저장. 스토리지 영역 당 세 가지 차이를 제공, 플러스 총 : - 어떤 조직이 파일을 삭제할 때, 지금 바로 보유 - 그 일생에 추가 된 것은 아닙니다. - 현재 청구 기간 중 어떤 이동 제거는 파생되지 않습니다 — 저장 테이블 타임스탬프 deactivation, 이후 EmbRecordState.DATE UPDATED는 insertable=false이고 결코 새로 고침합니다 — 오프닝 + 추가 - 기간의 오프닝 스냅샷에 대하여 현재. 없음 열기 스냅 샷 그것은 쓰레기 타임스탬프로 돌아와 스스로보고 측정으로 추측하는 것보다 바닥. 일생은 정확한 곳에입니다 제거 행 생존하고 그들이하지 않는 스냅 샷에서 축적; 모두 그들이 말하는, 그래서 UI도 할 수 있습니다. BillingPeriodResolver는 라이브 구독의 기간을 선호하고 돌아갑니다. org의 시간대에 달력 달. 그 fallback은 전체 기능입니다. 생산: 각 구독에는 NULL current period start를 나르고 current period end, 그래서 그 기간의 숫자는 모두 비어있을 것 존재하는 조직 - stub와 같은 버그의 클래스를 대체합니다. StorageSnapshotSweep은 매일 org의 역사가 달려 있습니다. 까지 잡기 14 놓은 일 및 질의에서 첫번째 스냅샷 일생 그래서 추적은 0에서 재시작하지 않습니다. platform endpoint 보고서는 물리적으로 저장된 바이트에 대해 청구됩니다. 회사 소개 기록 당 청구됩니다. img dats는 해시 당 하나의 사본을 보유하지만 많은 orgs가 있습니다. 그 파일 및 엄밀 및 변환 비용 바이트 아무도 청구됩니다. 둘 다 격차는 Kamo의 경제이므로 @PlatformAdminOnly에 앉아 있습니다. 21 새로운 테스트, 113 총, 모든 전달.

  11. · InitializerService

    Org storage snapshots에 대한 Schema 주자

    거울 OrgStorageSnapshot 으로 명시된 DDL, 당 집 스타일 — ddl-auto 테이블을 먼저 만듭니다. 그래서 CREATE는 가을이며 SET DEFAULTs는 실제로 일반 SQL (Hibernate는 열 기본값을 방출하지 않습니다. Java에서 엔티티티티가 채워집니다. 또한 (ORG ID, DATE CREATED) 및 (ORG ID, DATE TRASHED)에 imgs를 색인합니다. 제품 정보 집계는 모든 요약 요청과 기존 인덱스 모두에 모두 읽습니다. assoc 및 폴더 모양. 생산에 대한 실행 2026-08; org storage snapshot 모든 16로 확인 열과 그 고유의 제약은 공유lib 엔티티티가 푸시되기 전에.

  12. · kamo-shared-library

    Per-organization 저장 사용법 모형

    아무것도 조직 당 정상 저장이 있습니다. 6개의 entities는 바이트를 나릅니다 파일당 계산, 그리고 그 중 어떤 코드를 집계, 이는 왜 계정 stats 탭은 "이 기간 동안 사용할 수없는 사용 데이터 없음"을 매 org. 집계가 필요한 공유 모델 추가: - StorageDomain - 5개의 org-attributable 저장 지역, 각 declaring 제거된 기록이 살아있을지 여부. 문서 및 KB 미디어 soft-delete 등 일생 합계는 똑바른 조회입니다; mailboxes, 기록 및 disclosures hard-delete, 그래서 그들은 단지 앞으로 축적 할 수 있습니다. - OrgStorageSnapshot - (org, 일, 도메인) 당 한 행. 그것은 3에 존재 사실 후에 발견되지 않는 그림: 일생 합계를 위한 hard-deleting 도메인, 기간 제거가되는 오프닝 위치 차이 (표 타임스탬프는 deactivation - EmbRecordState의 DATE UPDATED는 insertable=false이고 결코 새로 고침하지 않습니다), 그리고 기간 닫힙니다 종료된 기간에 고정된 번호. - OrgStorageAggregator - 한 클래스의 각 per-domain 집계. 총 합계 레코드에 요약, 저장 된 개체에 결코: img dats는 하나의 물리적 유지 hash 당 복사 그러나 많은 orgs 파일 보유, 그리고 그 저장은 Kamo의. 집계 deliberately는 고정식이 없습니다. 모든 서비스 실행 @ComponentScan("com.kamo"), 그래서 모든 ~40에서 생성 할 수 없습니다 그들에게; BillingService는 bean을 선언합니다. 또한 검색-index 쿼리를 추가 이메일 크기 backfill needs — size bytes 인덱스가 생성되었기 때문에 hardcoded 0으로 작성되었습니다. 그 행이 수리 될 때까지 0 바이트 플랫폼으로 읽습니다. 이 착륙하기 전에 생산에서 검증 된 Schema : org storage snapshots가 존재합니다. KamoInitializer 실행 후 모든 16 열.

  13. · InitializerService

    *********** 앱 분할

    백필은 이제 누락 된 계획 줄을 채웠습니다. - deliberately, 그래서 그것은 조용히 할 수 없었다 tier 를 이동 — 어느 왼쪽 앱은 결코 가격이 책정되지 않았다. 판매 지점 그리고 마케팅 도구는 무료에 종료, 어떤 무료 판매되지 않습니다. 각 계획이 이미 가격 페이지에 약속되는지, 그래서 매트릭스 및 마케팅 복사 drift: 무료 평가 (CRM, 채팅, 문서, 메모, KB, 계산기); 스타터는 앱을 추가 비즈니스 거래 (지원, 상거래, 마케팅); Business adds premium set plus telephony, 재고 및 클럽하우스; 기업은 법률을 추가합니다. 이메일 호스팅 및 두 가지 기본 시스템 to no tier - 이메일은 어떤 계획에 좌석 당 가격이 책정되며, 기원 시스템은 대출 당 협상됩니다. 이 reconciles와는 달리, 갭을 채우기 보다는 오히려, 의 근원인 점은 진실: 계층 변화는 여기에 속한다, 검토에서, UI는 다음 실행을 편집하지 않습니다. prod에 적용하는: 11의 줄은 바뀝니다. 무료 POS 및 마케팅, 4 개의 공개 앱 제공 그들은 그들이 배를 때 땅에 착륙한다, 그래서 게시 하나는 데이터 변경보다 오히려 무대 플립이다. 두 번째 실행 보고서 0 변경.

  14. · kamo-internal

    분할 응용 프로그램 및 기능 사용 가능 / 사용 불가 / Deprecated

    하나의 플랫 목록 혼합 앱 플랫폼은 하나와 함께 제공하지 않습니다. 은퇴했다, 그래서 연산자는 모든 칩을 읽을 수 있었다 그들에게 출발. 물통은 독점적이고 deprecation는 첫번째 시험됩니다: 은퇴한 app는 입니다 어떤 가용성 플래그가 여전히 말한다, 그래서 그것은 단지 아래에 표시 관련 기사 즉, "Deprecated"칩과 디밍 redundant - 그 탭의 모든 행은 은퇴 - 그래서 둘 다 사라. 파티션을 읽는 서버 상태 오히려 초안보다, 그래서 deprecated를 ticking 스위치는 yanking 대신 토지를 저장 할 때까지 행을 나타냅니다. 편집에서.

  15. · SecurityService

    Branch Types를 위한 10가지 앱 카탈로그

    지점 유형 -> 허용된 앱은 /platform-config/app-catalog에서 앱 목록을 로딩하기 시작했습니다. 최고 수준의 org 소유자가 필요합니다. 해당 이용 후기에 달린 코멘트가 없습니다. GET 403'd : 편집기는 0 앱을 렌더링하고 저장 핸들러를 거부하여 저장 모든 보안 모델 — 그 이름, 연령대, 역할 및 상거래 유형 차단, 어떤 것 카탈로그를 포함한다. It failed for the KamoCRM admin without isOrganizationOwner 너무. ****************는 CONFIGURE SYSTEM의 동일한 해결 카탈로그를 제공합니다. deliberately 좁은 투사: 유형, 전시 이름, 묘사, 단계, 유효한, deprecated. 연산자 노트 없음, enum defaults 없음, entitlement Diagnostics — 그 설명하는 방법 the platform is 실행, 및 쓰기는 플랫폼 소유자 전용.

  16. · kamo-internal

    앱 및 기능 탭을 추가하고 허용 된 앱 목록을 수정하십시오

    새로운 탭, 조직의 권리에, 모든 조직을 제어 제안됩니다: 가용성, 발달 단계, 표시 이름, 묘사, 연산자 참고, 및 deprecation. Availability는 단계에서 더 이상 파생되지 않습니다, 그래서 앱은 여전히 테스트에서 또는 그 후 다시 개최 할 수 있습니다. 완료; 무대는 이제 배지와 바만 구동. overridden 분야는 입니다 표시하고 개별적으로 뒤집어, deprecation — 앱을 숨깁니다. 모든 tenant using it — 확인하기 위해 입력된 앱의 이름을 필요로 합니다. 보안 모델 편집기에서 허용된 앱은 Hand-maintained TypeScript였습니다. ServiceType.java의 복사본은 편집기를 요청하여 정렬합니다. 그것은 무서웠다, 보이지 않는: - MLOS는 완전히 누락되었다, 그래서 보안 모델은 모기지 부여 할 수 모든 것에 기원. - LOS는 "Mortgage Loan Origination System"을 라벨링했습니다. - 그것은 개인을 의미합니다. 2026-08 이름 이후 대출, 그래서 편집기는 개인 대출을 썼다 그들은 모기질을 부여 한 연산자에 대한 보조금. - POS와 ESIG는 그들이 발송한 후에 오래 PLANNING를 보여주었습니다. 해당 목록에 대한 가용성 표시를 추가하면 해당 목록에 해당됩니다. confidently wrong, 그래서 지금 같은 카탈로그 새로운 탭 쓰기 및 그것을 방해 할 수 없습니다. 저축은 카탈로그 짐까지 막습니다: 각 appConfigs builder iterates 그것, 그래서 빈 목록은 줄무늬가 있을 것입니다 모델의 보조금.

  17. · SecurityService

    앱 카탈로그를 시도하고 기능을 읽으십시오

    FeatureController는 "이 앱이 제공됨"을 4 단계로 평가했습니다. 별도의 장소, 그래서 대답은 중복으로 변경 될 수있다 플랫폼. 그들 각자는 이제 AppCatalogService를 읽고, 와 함께 표시 이름, 묘사 및 deprecation. 하나의 행동 미묘한은 root-org 문입니다. 그것은 "단계를 읽는 데 사용 COMPLETED, 그래서 아이 orgs는이를 활성화 할 수 없습니다 - 개 식품 경로. · 이제 "플랫폼은 현재 제공하지 않습니다." 더 이상 존재하지 않기 때문에 같은 문장이 존재합니다. 단계 == 완료. 연산자가 아직 앱을 게시하면 테스트, 새로운 양식 만 올바른 일을합니다 : 앱없이 모든 아이 org를 위해 조용히 차단 유지. PlatformAppCatalogController는 top-level-org 소유자에게 게이트가됩니다. neighbouring 플랫폼 탭으로 관객, 그리고 사용할 수 있는지 보고서 앱은 실제로 계획 매트릭스에서 - 앱은 아무 계획도 해결하지 않습니다. 어떤 연산자가 선택되었는지 아닌 실패 개방 설정.

  18. · kamo-shared-library

    앱 가용성 및 단계 편집 가능

    모든 속성 앱 설정 페이지 렌더링 - 표시 이름, 설명, 단계, deprecation - ServiceType enum에서 컴파일 시간 상수, 그리고 "Available"은 전혀 저장되지 않았습니다. 그것은 stage == COMPLETED로 파생되었습니다. UI 및 3개의 장소에서 서버 측. 어떤 것을 의미하지 않는 편집 공유 라이브러리 및 플랫폼에 충실. PLATFORM APP CATALOG는 각 오버라이드 열을 가진 앱당 한 줄을 보유 nullable 및 AppCatalogService는 과실을 해결합니까? 한국어 누락된 행 enum verbatim을 의미하므로이 변경 사항을 변경하지 않습니다. Availability는 그것의 자신의 가치, 이는 연약한 발사를 만드는 것 이다 (offered 여전히 TESTING) 또는 선명한 COMPLETED 앱을 사용할 수 있습니다. 그것의 fallback RESOLVED 단계는 enum보다 오히려 읽습니다. COMPLETED 앱은 스위치를 플립하지 않고 가용성을 얻습니다.

  19. · InitializerService

    앱당 제대로 분류 된 카탈로그 행, 모든 제목 루트

    Nine apps — POS, 마케팅 도구, 계산기, 클럽, 발명가, 법률, 게임 및 두 원산지 시스템 - 모든 카탈로그 표현이 없었다 : 가격 제한 없음, 범주 없음, 계층 없음. 다른 사람은 이미 마케팅 행에 의해 설명되었다, 그래서 그들을 바인딩하고 병렬을 추가 APP * 행은 1개의 ServiceType 2개의 줄을 주어지고 planFeatureIncluded는 위에 달려 있습니다 반복 순서. runner는 대신 카탈로그를 통합합니다. - 앱에 게시 된 마케팅 행을 결합하여 설명합니다 (VIDEO CONF는 만나고, MESSAGING는 채팅입니다), 코드를 유지, 이름, 카테고리 및 계층 값 그래서 출판 된 매트릭스는 이동하지 않습니다; - 앱의 행을 만들려면 카탈로그가 설명되지 않습니다., 실제 범주 — 새로운 포함 상업 및 원산지 범주; - 실제 정체성에 대한 이전 APP * placeholder를 홍보하고 평면 응용 프로그램을 삭제합니다. 한 번 빈 물통; - 같은 앱의 중복 행을 제거하고 마케팅 행을 선호합니다. APP fallback이 없습니다. 모든 앱에는 읽을 수 있는 코드와 앱이 게시된 카탈로그가 있습니다. 이미 이름은 정확한 코드가 그래서 자신의 행렬과 하나가없는 org를 재사용 동일하게 동일한 제품. 그건 중요 — sign.pink는 마케팅 매트릭스가 없으며 왼쪽 enum 상수 후에 지명되는 조차 줄. MLOS 및 개인 대출은 기업 협상이며, 음소거 가격, FLAT 가격 모델, CUSTOM-type 계획 (Enterprise)에서만 호환되며 계층에 묶습니다. 그들은 위에 창조된다 플랫폼 org 만 - 흰색 라벨 제품 org는 그들을 재판매하지 않으며, 두 개의 생성 된 sign.pink는 이전 패스로 비활성화됩니다. 실행 후 완료: 0 APP * 코드 왼쪽, 0 중복 service type 행, 21 앱 각 루트, 0 uncovered plan-by-app 조합, 그리고 재 실행은 no-op입니다.

  20. · kamo-internal

    Server-paginated 조직 콘솔

    하나의 요청에 각 조직을로드하고 각 카드를 렌더링, org 당 백엔드 Fanning을 사용하여 계정 당 다음 구독 당. Search, sort, filter and paging now run server-side against the 전체 재산, 그래서 페이지 비용은 얼마나 많은 조직이 존재하는지 평평하지 않습니다. 행은 이제 오른쪽 객체입니다. 구독은 계정으로 HELD입니다. TARGETS org, 그래서 오래된 카드 -- 홀더에 키 입력 -- 인쇄해야 배열된 테이블 내부의 대상 이름과 고객 orgs는 문자열로 나타났습니다. 다른 orgs의 행 안에 오히려 행. 지금 각 행은 제목을 나릅니다 (인바운드: 이 org의 통치자)와 빌링 개최 (아웃바운드: 청구서가 무엇인지 다른 사람) 분리되는 facets로. 디자인: 각 줄의 왼쪽 가장자리 및 비례적인 재산 막대기의 상태 가로장, 그래서 페이지는 단어 앞에 상업적인 건강의 색깔 histogram로 읽습니다 read; 0s muted를 가진 tabular numerals, 청구서에 대부분의 세포부터 0입니다. 표 상태는 URL에 살고 그래서 필터링 된 전망은 연결 가능 -- 쓰기 `tab`을 보존하는 복사본을 통해 ActiveTab을 게시하지 않고, tabSync에 속한다.

  21. · SecurityService

    앱에 실패가없는 계획

    Turns kamo.entitlement.fail-open now that AppEntitlementCatalogMigration has run against 제목 뿌리 모두에 prod 및 모든 활성 계획 (KamoCRM, Sign Pink)은 명시 적 모든 21 비핵 앱의 행 - 검증된 Zero uncovered plan-by-app 조합, 그래서 거기 unpriced app을 제외하고 잡기 위하여 deny-by-default를 위해 왼쪽 아무것도. 오늘 어떤 org를 사용할 수 있는지 변경하지 않습니다. 배송 앱은 명시적으로 포함되며 MLOS 그리고 개인 로안 앱은 이미 명시된 isIncluded=false 행에 의해 거부되었다. 이 깃발에 관계 없이. 그것은 닫는 앱은 결코 나타나지 않고 unpriced를 통해 계획의 행렬에서 모두. 새로운 entitlement 루트가 이전이 실행되기 전에 추가되는 경우 다시 손가락.

  22. · BillingService

    Org 디렉토리를 필터링, 정렬, paginated 페이지

    GET /orgs takes 페이지/size/q/sort/dir plus 7 필터 과 반환 집 ページを選択 GET /orgs/{orgId}는 전체 세부 정보를 제공합니다. 콘솔의 드릴 인 서랍의 경우, per-account fan-out이 미세하기 때문에 그것은 하나의 org에 바인딩됩니다. listAllOrgs()는 truncating delegate로 유지되는 것보다 오히려 대체됩니다. 정확히 하나의 콜러 (이 컨트롤러), 그리고 frontend's listOrgs() 정확히 하나의 (문자열이 있는 탭), 그래서 호환성 shim만 추가 그것에 따라 아무것도 침묵 위험.

  23. · BillingService

    일정한 쿼리 수에 Batched 페이지 수화

    학부모 제목, 기본 도메인, 제목 뒤에 계획 / 시장 구독 catalog 플래그는 전체 페이지에 각각 배치 된 (:ids), 그래서 100-row 페이지는 1-row 페이지와 동일한 6개의 문이 있습니다. 테스트 asserts that equality direct -- 이 구현은 점수를 점수 6 에 대하여 600. 거버넌스 구독은 EntitlementModeResolver, 같은 코드로 선택됩니다. 그 행의 모드를 결정, 그래서 계획은 항상 주에 속한다 이름 * 쿼리는 EntityManager를 통해 새로운 저장소 방법보다 오히려 kamo-shared-library, 모든 서비스는 변화하지 않습니다.

  24. · BillingService

    디렉토리 행/페이지 DTO 및 기본 쿼리 저장소

    PlatformOrgRow는 두 개의 페이스트를 별도로 운반합니다. 제목 (inbound subs) org를 대상으로 -- 어떤 통치자) 및 청구가 개최 (org가 소유합니다. -- 플랫폼 org 및 리셀러에만 비 zero. Aggregates 설명 전체 필터 세트, 페이지가 아닌, 그래서 KPI 스트립은 의미를 변경하지 않습니다 연산자 페이지. 모든 드라이버 값은 캐스트보다는 숫자/Boolean을 통해 coerced입니다: a Carbonesce(...,0)는 행이 동일한 열을 가진 Integer를 반환하지 않습니다. rows 반환 긴, 이는 dev에 전달하고 prod에 던져. 돈 횡단 소수 문자열로 와이어.

  25. · BillingService

    Org 디렉토리 SQL 와 per-facet CTEs

    계정, 인바운드 구독, 회원, 라이센스 및 어린이 각각 orgs에 합류하기 전에 자신의 CTE에 집계. 그들에 게 패스는 행을 곱하고 모든 SUM을 팽창합니다. 순수하고 단위 테스트 (26 테스트) : 없음 '::'캐스팅, 모든 값 경계, 정렬 키 OrgSort를 통해 화이트리스트. 두 가지 테스트 핀 때문에 그들은 쉽게 "tidy"는 버그로 -- ORDER BY 및 파생 된 predicates (mode rank, has stripe) `o`alias가 범위를 벗어날 수 있기 때문에 기본 CTE의 투영 열을 명명해야합니다. 외부 쿼리에; 그리고 PENDING 시험 보고서 아니 마감 보다 최근 만료됨 실제 클러스터에 대한 검증 : 두 문장 모두 실행, 카운트는 동의한다 행과 필터/합물이 적용됩니다. 인덱스 사용은 설명되지 않습니다 -- 12 orgs / 9 subs CockroachDB 전체에서 올바르게.

  26. · BillingService

    Validated, Clamped org 디렉토리 요청

    크기 [1,100]에 클램프와 인식되지 않은 분류는 제목으로 돌아갑니다, 그래서 손 편집 된 URL은 전체 재산을 요청하거나 SQL에 도달 할 수 없습니다 무료 텍스트. OrgSort의 백리스트입니다.

  27. · BillingService

    하나의 공유를 통해 Derive entitlement 모드, deterministic resolver

    TrialAdminService는 findFirst()를 통해 평가판 구독을 선택했습니다. 주문되지 않은 목록, 그래서 org는 두 권총을 들고 활성 재판은 할 수 로그인 곧 조직 디렉토리에는 정렬 및 필터가 있습니다. 이 상태, 그리고 쿼리는 불쾌한 규칙을 재현 할 수 없습니다. 지금의 선구자는 *********** 중 라이브 재판, 만료 된 승리를 통해 활성 승리, 및 활성 만료 보고서는 최신 것입니다. status()는 정확한 응답 모양을 유지합니다. 이 repo (11)에 있는 첫번째 시험.

  28. · InitializerService

    Backfill 앱은 플랫폼 플랜 카탈로그에 자막을 제공합니다

    Entitlement는 이제 typed service type 칼럼에 해결하지만 카탈로그 행이 수행되지 않습니다. 모든 계획은 여전히 실패 열려있는 기본을 통해 'everything 포함'에 해결. 이 씨앗 matrix 그래서 kamo.entitlement.fail-open은 결국 어둠의 앱없이 꺼집니다. - AppEntitlementCatalogMigration (@Order(51), platformOwnerPlanSeeder 후): idempotent 백필. 비핵 앱 당 한 BOOLEAN 행을 가진 'Applications' 기능 범주를 만듭니다. ServiceType에 바인딩, 코드를 가지고 있는 모든 사전 컴파일 행을 재 컴파일하지만, serviceType, 그리고 tier 당 누락된 계획에 앱 행을 삽입합니다. 인서트-if-missing 만 — 그것은 결코 삭제하지 않고 연산자의 isIncluded를 덮지 않는, 그래서 계층 편집 설정 UI는 재부팅을 살아남습니다. 또한 기존 VIDEO CONF / AI ASSISTANT / 재결합 HR SYSTEM / ESIGNATURES / EMAIL HOSTING 추가 기능, 아무것도 부여 한. - KamoCRMPricingLoader : 신선한 클러스터에 대한 동일한 매트릭스. 앱 행은 내부에 부과됩니다. upsertFeatures는 두 번째 패스로 작성된 것보다, upsertPlanFeatures는 삭제합니다. 삽입하기 전에 계획의 행 - 두 번째 호출은 조용히 마케팅 매트릭스를 닦을 것입니다. * 이름 이 로더는 비활성화 (다시 반환, 그리고 그 DataLoader 호출은 밖으로 언급), 이는 위의 마이그레이션은 생산 경로입니다.

  29. · SecurityService

    Gate mortgage and personal-loan Verticals on app 자막

    MORTGAGE 시장은 POS가 MLOS 앱과 상관없이 /commerce에 등장했습니다. /features/enable에는 모든 청구 확인이 없었다 — 설정 UI의 통제는 발표되었다 단지, 그래서 직접 POST는 unentitled 앱에 전환. - FeatureController: 403는 계획이 앱을 포함하지 않는 경우, serialize 'entitled'는 모두 기능[]와 available[]에 다루기 때문에 UI 통제 및 403은 동일한 서비스에 의해 계산하고 동의 할 수 없습니다. - CommerceMarketController: /allowed-types for the market-type picker (모델 허용 목록 제목과 교차); 시장 목록은 불완전한 수직을 떨어뜨립니다 - 숨겨진, 결코 archived, 그래서 계획은 그 데이터 intact로 다시 시장을 가져옵니다. - ****************는 모든 /{marketId}/... 하위 루트를 통해 가깝게 감시합니다. AppAvailability의 장점 Interceptor는 이것을 표현할 수 없습니다 — 그것의 접두사 지도는 1개의 접두사입니다 ServiceType 및 /commerce-markets는 POS에서 모든 7개의 수직을 제공합니다. - POSController : 구독 카탈로그의 대중 통화는 더 이상 앱에 행을 볼 수 없습니다. 그것은 COMPLETED에 도달하지 않았다, 그래서 COMPLETED에 ServiceType을 이동은 그것은에 게시하는 것 마케팅 사이트. 내부 통화는 여전히 모든 것을 볼 수 있습니다. - MortgageVerticalResolver : 읽음은 POS 만 측정하므로 MLOS를 여전히 샀다. 준비로 읽으십시오. 이제 MLOS를 'missing'으로 보고하십시오.

  30. · kamo-internal

    이름 LOS to MLOS, 추가 개인 대출 발행 시스템, 게이트 상거래 수직

    Apps 탭은 이제 'Commerce: Mortgage Loan Origination System'을 보여줍니다. backend enum, TS 미러가 아닌) 새로운 '상업 : 개인 대출 발행 시스템' 이용안내 MORTGAGE 및 PERSONAL LOANS 시장은 앱에 문을 닫습니다. - AppType/ServiceType 거울: MLOS(14) + 새로운 LOS(25); 또한 pre-existing drift를 고칠 거울은 Java enum으로 나뉩니다. - 조직 : isMlos 추가; isLos는 이제 개인 대출을 의미합니다. isLos는 Zero 소비자를 가지고 있습니다. - FeaturesManager: gating reads server-supplied 'entitled' 플래그. 그것은 rebuilt 클라이언트 측이었습니다 billingApi에서 getCurrentSubscription 던지기 및 getAvailablePlans 반환 [] (legacy stubs), 그래서 모든 앱은 조용히 'ungated'로 해결하고 이제까지 덧붙였다. - Market pickers: 둘 다 창조하고 편집 페이지는 그들의 자신의 hardcoded COMMERCE TYPES 배열을 붙였습니다; 그들은 이제 GET을 렌더링합니다. ****** 그래서 수직은 org가 샀다 선택할 수 없습니다. 편집 페이지는 또한 한-MORTGAGE-per-org 규칙을 건너 뛰었습니다. 그것은 유지 시장의 현재 유형 선택 가능하므로 lapsed org는 여전히 열리고 이름을 변경할 수 있습니다. - Mortgage 설정은 isPos 보다는 오히려 isMlos에 문.

당신의 우주는 기다리고 있습니다.

몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.

영원히 무료 - 신용 카드 필요 없음