변경 로그
무슨 일이야?
플랫폼에 대한 모든 개선 사항, 그것이 선적.
· InitializerService
팀 구성원에게 관리자에게
MANAGER ID 를 member team member 에 추가합니다. 라인. 아무것도 backfilled: 매니저는 완전한 대답, 둘 다의 정상에 차트와 누군가는 단순히 할당되지 않습니다. DROP DEFAULT는 ADD COLUMN - ddl-auto가 아닌 로드 베어링 문입니다. 업데이트 열을 먼저 만듭니다. id가 INT8 DEFAULT인 멤버에 참여한 컬럼 unique rowid(), 엔티티티 핀이 columnDefinition인 경우 기본적으로 상속합니다. 임의 관리자 ID로 모든 기존 행을 스탬프합니다. orphan 및 자기 설정 기본적으로 열이 이미 작성된 것을 맑게 합니다.
· InitializerService
배열 부서에 대한 DEPTS.PARENT DEPT ID 추가
다시 채우지 않고 Nullable -- null은 모든 존재가 최고 수준의 것을 의미합니다. 부서는 대부분 숙박합니다. 명시된 DROP DEFAULT와 일반 UUID 선언. 부서 키 오프 UUID DEFAULT gen random uuid(), 그리고 FK 열을 상속하는 것은 기본적으로 얻은 모든 기존 행에 임의의 부모와 함께 스탬프, 그들 모두를 고아 다음과 같은 제약을 실패.
· SecurityService
생성 및 업데이트를 통해 부모 부서를 스레드
DepartmentService는 현재 8개의 위치 인수 대신 DTO를 요청합니다. 그래서 부모는 같은 유형의 행에 ninth가되는 것보다 payload에 가입 문자열. Org scoping on the mutating endpoints is unchanged; 부모의 자신의 열렬한 사이클 가드를 따라 서비스에서 생명을 확인합니다.
· kamo-internal
Draw 부서는 org 차트로 부모 픽업
부서 탭은 평평한 목록이었다, 그래서 운영과 함께 org > 고객 성공 > 내장은 이렇게 말하고 그것을 볼 수있는 방법이 없었다. add/edit 을 얻 부모 부서 선택, 부모가되기 때문에 이름을 배치 가동 보다는 오히려 구조. 그것은 렌더링 순서와 disables에 나무를 제공합니다 부서 자체와 그 밑에 모든 것 -- 그 정확하게 선택 서버 거부, 항상 실패가 제공되지 않는 것보다 더 악화되는 선택을 제공합니다. 목록은 org-chart 척추가됩니다. 수평 당 1개의 가로장 란, 각 정확하게 1개의 아이콘 칩 넓게, 그래서 그것의 부모의 칩의 센터에 줄의 팔꿈치 땅은 가까운의 대신에 그것; 마지막 아이의 가로장은 구석에 달리기 보다는 멈추고, 무엇인 indents를 계산하지 않고 보이는 지점의 끝을 만듭니다. 셀은 수직이 없다 패딩 -- 레일은 가장자리 또는 라인이 각 행에 도달해야합니다. 깊이는 주석과 유형 무게를 통해 읽습니다, 획일한 칩 때문에 크기, 아닙니다 가로장 기하학을 정확한 만드십시오. Column headers는 서리 모양의 바에 연산자 라벨이, 상표 토큰을 무시하는 hardcoded blue-50/indigo-50/gray-900를 대체하십시오. 트리 빌딩은 부서에 살고있다Tree.ts 그래서 awkward 케이스는 어딘가에 테스트: 부모는 아이 밑에서 삭제됩니다. 페이지를 거는 대신 테이블 렌더링에 도달 한 사이클. 실패는 이제 서버의 자신의 설명을보고. 4xx 몸이 떨어졌다 "부가 스스로 할 수없는 상태 선의 영광 "Bad Request"에 부모".
· kamo-shared-library
부서는 부모 부서에 앉아
부서는 평평한 목록이었다, 그래서 운영과 org 차트 > 고객 성공 > 내장은 이렇게 말하지 않는 방법이 없었다. 부서는 선택적 자기 철자 부모; null은 여전히 최고 수준의 의미, 이는 모든 기존의 행이 머무는지. FK 칼럼 핀 칼럼 정의 = "UUID". 왼쪽, Hibernate 사본 기본 키 정의 참조 -- UUID DEFAULT gen random uuid() --에 FK, 그래서 ddl-auto는 임의 부모와 함께 모든 행을 포화 DEPTS 스탬프를 실행 해당 부서와 ADD CONSTRAINT를 일치하여 실패합니다. 부모 할당은 서비스에서 유효합니다, 뿐만 아니라 피커: 자부, 주기 ( 제안된 부모에게서 위로 걷는 것은 부서를 도달하지 않아야 합니다 이동), 다른 조직의 부모, 그리고 알 수없는 ID는 모두 거부됩니다. 부서는 아이들이 자신의 부모에게 오히려 dangling 포인터 뒤에 그(것)들을 좌초시키기. **************** 이제는 8 대신 DTO를 요청합니다. positional 인수, 이는 피의 ninth를 추가 한 것입니다.
· kamo-internal
To/Cc/Bcc 필드를 세 줄로 늘리면 스크롤
작곡 도구 창의 수신 필드는 단일 nowrap 행이었습니다. 읽는 편도를 끌고, 창은 360px 넓고 resizable, 그래서 세 번째 주소는 이미 보자마자. 그들은 이제 포장 : 필드는 칩으로 한 번에 행을 성장 폭을 채우고, 3개의 줄에 멈추고, 슬리퍼로 수직으로 스크롤합니다. 스크롤 바. 칩을 추가하는 것은 입력을 아래로 따르기 때문에 주의를 기울입니다. 행 캡은 측정 된 칩 높이에서 계산 된 픽셀 최대 높이입니다. 행 경계에 잘라 - 최대 작곡가 및 확장 브라우저 글꼴 모두 이동. 상표와 접촉 단추 핀은 중간에 뜨기 보다는 첫번째 줄에 오히려 핀 3 줄 블록의. 이제-meaningless `mode` prop과 수평 드래그-to-scroll을 해제하면 존재합니다.
· kamo-internal
Make org creation survivable, and offer every branding option up front
The wizard could fail a customer in ways nothing on screen explained, and it asked for a fraction of what Settings → Behavior & Labeling exposes. Creation reliability: - Logo and background uploads went to /api/imaging/upload with assocType "ORG_LOGO" — not an ImageAssocType constant, on an endpoint whose assocType is a numeric ordinal. The parser swallowed the failure and filed them as MY_DOCS, so branding silently never existed. They now use the real org branding endpoints, one call per logo slot. - The creator's phone/email PUT could only ever 403: that endpoint requires session-org to equal the member's org, and the session is still on the parent. Moved onto the create payload. - Post-create warnings were collected, passed to /setup/dns as a query param, and read by nothing. /setup/dns now renders them. - Submit was never re-validated, so clearing the name after reaching Review created an org with a NULL title and alias. - deriveConfigType read the branch type's ALLOWED age ranges instead of the selected one, stamping KIDS_CLUB on adult businesses — which disables email and phone account recovery. - Colour variants were never derived, phone inputs were unbounded against VARCHAR(20), a stale age range 403'd on submit, and a taken domain surfaced as a bare 500. Behavior & Labeling parity — everything except the two mortgage identifiers: website, company contact email, white-label identity, all seven social profiles, the eight custom labels with their inherit-from-parent flags, default language and currency, private-org visibility, background watermark, the three brand-source selectors, and all four logo slots. Two new steps (Labels, Preferences); timezone moves to Preferences beside its siblings. All of it rides on the create payload, not follow-up calls: PATCH /org/{id}/branch-titles has the same session-org check that broke the member update, and one transaction means the answers either all land or none do. Guidance and skippability: Every input has help text grounded in what the value actually does. Only Type and Basics carry required fields, and that is now stated on the step header, in the stepper, on the nav bar, and in the sidebar — with "Skip for now" on every optional step. Also: settings no longer destroys org phone extensions on save, /api/generate-background is no longer an unauthenticated billable proxy, and the org-by-id proxy stops corrupting int64 ids.
· kamo-internal
회원이 왔을 때 편집자의 뒷면 버튼을 보내십시오
벽지 편집기는 죽은 끝이었다 — 아니 방법 밖으로 하지만 nav 철도. 두 항목 포인트 (홈 탑 바 칩 및 회원 프로필 헤더 단축키) 이제 우표 그들의 기원은 href, 그리고 편집기는 백 알약에 그것을 해결 eyebrow 행: 홈 대시보드에 반환, 프로필에 반환 회원 그 페이지는 스탬프 id를 사용하여 assuming 그것보다 벽지의 소유자. 우표가없는 베어 URL은이 회원 프로필로 돌아갑니다. fromId는 opaque-id 모양에 대해 확인하여 만들어진 URL을 설정할 수 없습니다. arbitrary 리디렉션으로 버튼. useSearchParams를 읽고, 그래서 페이지 Suspense boundary 앱 라우터가 필요합니다.
· kamo-internal
회원 프로필 이름 아래 1차 우편함 표시
누군가의 일차로 열린 사서함은 사람의 주소이므로 제안 as "Sales Desk"- 그것이 제공 될 때 라벨이 될 일이 무엇이든 — 대신 mailbox를 이름을 붙입니다. autocomplete 행 및 수신자 모두 같은 필드를 읽었다, 그래서 둘 다 함께 잘못되었다. 디렉토리는 mailbox의 displayName을 앞두고 있습니다. 그리고 개인 mailbox에 대한 할당 된MemberName, 그의 단일 할당자는 이름 * Aliases 및 공유 우편함은 특정하지 않으며 유지하지 않습니다. 그들의 이름. 선호도는 per-source list이므로, 백엔드가 없습니다. 아직 필드는 단순히 displayName로 돌아갑니다.
· EmailService
회원 가입 후 1 차 우편함
Mailbox 누군가는 그들의 1 차로서 그 사람의 주소이므로 mailbox가 프로비저닝 시간에 라벨을 붙였습니다. — "Sales Desk"는 단순히 Jane Doe's 인 박스에 대한 - 사람의 이름을 autocomplete 및 수신자 카드에 compose. listMailboxes 지금 운반 **************** 회원에게 org 주소 디렉토리가 선호하는 기본 할당 mailbox의 자신의 displayName. 기본 홀더 수만: mailbox 누군가 해당 이용 후기에 달린 코멘트가 없습니다. 테이블은 여전히 displayName를 렌더링합니다. name resolution은 AccessibleMailboxService에서 공유 헬퍼로 이동 그래서 두 개의 표면은 회원이 호출되는 것에 대해 동의 할 수 없습니다.
· kamo-internal
설정 nav 및 랜딩 페이지의 커미션 페이지를 등록
탭이 존재하지만 아무것도 그들과 연결. ****** ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** · cautionary 예제는 이미이 저장소에서 : 카드없이 실제 페이지, 탭 및 URL을 입력하면 nav 항목이 없습니다. 회계 및 재무는 자체 섹션이며 자체 nav 주제는 2 개 이상의 내 계정의 항목. Sub-options는 그들의 자신의 문이 아니고, 그래서 이 접히는 계정 게이트가 금융 전용 소지자에게 열려있을 것입니다. 그들이 사용할 수없는 4 개의 링크 - phi-compliance를 유지하는 동일한 이유 보안 주제. 자신의 섹션에서 금융 탭으로, 내 계정 문은 CONFIGURE SYSTEM 혼자 돌아갑니다. 개인위원회 카드는 팀 구성원 인 시청자에 따라 조절됩니다. 탭의 자신의 문을 미러링. 렌더링되지 않는 탭을 열 수있는 카드 카드가 없습니다.
· kamo-internal
멤버 커미션 탭과 두 개의 금융 계정 탭
회원 탭 (각자 전용, 팀 멤버 만) : 균형 + 원장, 커미션 기회, 지급 설정 및 인출. 계정 설정은 조직을 얻습니다 스트립 및 커미션 프로세서. 회원 탭은 isSelf와 회원 유형에 문질러 오른쪽에 결코. checkRight는 활성 신 모드의 모든 것에 대한 진실을 반환, 페이지의 canViewOtherMemberAccount ORs 관련 권리 **************** — 그래서 오른쪽에 근거한 문은 여기에서 1개를 보여줄 것입니다 회원의 잔고 및 은행은 누구에게도 그 어떤 것을 들고 있습니다. 'My Payouts', 아니 '내 은행'. 회원은 거의 줄무늬 계정이 없으며 할 수 없습니다. 그들이 할 경우 하나를 첨부: OAuth read write 다른 사람이 제어 계정 거부 플랫폼. 그들의 고용주의 플랫폼은 payout-only 수신자 계정을 만들고 그들은 그들의 정체성을 확인합니다. 패널은 Stripe가 수집한 것을 말합니다. Stripe는 그들과의 지원 관계 없음, 그리고 그 돈은 대략 6-8 달력 일을 가지고 갑니다 도착 - 그들이 나중에 발견해야한다는 것은 아무도. Organization Stripe는 Stripe가 API가 없기 때문에 가이드 된 체크리스트입니다. 연결 플랫폼이 되려면. 단계 6는 hint 보다는 오히려 가득 차있는 경고를 나릅니다: Stripe Balance가 자동으로 커미션 플로트를 잃는 org 릴리스 작업이 실행되기 전에 모든 전송은 충분한 자금에 실패 아무 Stripe 이벤트도 설명하지 않습니다. 돈은 끝낼 수 있는 소수의 STRING 끝이고 결코 수 없습니다 () - 색깔. 부정적 인 금액은 실제입니다 - 공명 된 수수료는 그립니다 - 그리고 codebase는 아무도 보여주기위한 협약이 없었다, 그래서 그들은 오류 톤에 렌더링 명시된 마이너스 및 끌기 칩. Sub-tabs sync to ?sub=; SettingsView는 ?tab=를 소유하고 각 탭 변경에 다시 쓰기. BFF 경로는 CommissionService가 ClusterIP-only이기 때문에 존재합니다. 모든 서비스는 건강하고 모든 빌드는 녹색입니다.
· kamo-internal
당신이 행동 할 수있는 폴더, 당신이 선택할 수있는 메일
작업을 위해 폴더를 마우스 오른쪽 버튼으로 클릭. 메뉴 헤더는 크롬이 아닙니다. — 폴더를 이름을 지정하고 라이브 읽지 않은 / 총을 보여줍니다. 그래서 모든 읽기를 표시하고 빈 폴더는 다음과 같이 클릭하기 전에 판단 될 수 있습니다. 적용할 수 없는 행동은 이유(nothing) 읽지 않은, 폴더 빈, 내장 폴더는 대신 자신의 이름을 유지) 메일 크롬에 내장 된 확인을 통해 빈 및 삭제 경로. app-wide MUI ConfirmationDialog는 모든 유형의 도전 단어를 요구합니다 시간; 재 회복 가능한 행동에 도전은 사람을 입력 경고를 통해. 그래서 문은 메일을 파괴하는 두 대의 예약 outright — 폴더를 삭제하고 Trash를 비우기 — 모두 이름 결과 정확히 : 다른 모든 것이 쓰레기로 이동하고 말한다. Folders reorder by drag, 회원 당, 공유 ui-preferences에 저장 테이블 그래서 배열은 장치를 통해 그(것)들을 따릅니다. 순서는 1입니다 폴더 이름의 플랫 목록 : siblings는 서로 비교, 그래서 하나의 목록은 모든 레벨을 주문하고, 이름을 바꾸거나 이동 한 폴더 나무를 손상시키는 대신 자연 위치로 돌아갑니다. 기타 제품 레벨이 무시됩니다 — 그것은 메일 서버에서 잔혹한 것, 분류되지 않음 지금 메일을 선택하면 다른 곳에서 선택 작업 할 수 있습니다. 앵커, cmd/ctrl-click에서 범위를 클릭 한 후, 그리고 avatar는 각 행을 세금이 아닌 hover에 체크 박스로 전환 영원한 checkbox 란으로. 부유 한 바에 행동 목록과 선택으로 잎, 대신 스트립 쐐기 모든 진드기에 목록이 내려진 크롬으로. 또한: Folders Footer 관리는 사라진다 — 폴더 옆에 버튼 이미 폴더를 생성하고 새로 고침 버튼을 마지막으로 사각형입니다. CSS는 자체에 대해 할 수 없습니다 : 플렉스 행의 주요 크기는 해결 정렬하기 전에 : 스트레칭은 그 높이를 제공합니다, 그래서 측면 스퀘어가 있었다 폭을 derive에 높이가 없습니다. 대신 행을 측정합니다.
· EmailService
전체 폴더의 행위, 그냥 당신이 스크롤 한 페이지
Mark all read and 빈 폴더는 폴더 전체 작업 클라이언트 일괄 처리에 의해 표현할 수 없습니다: 그것은 단지 그 페이지만 가지고 있습니다 스크롤, 그래서 폴더 4,000 읽지 않은 80 왕복을 가지고 아직도 모든 것을 결코 로드하지. FolderManager는 setFolderSeen과 빈폴더를 얻습니다. IMAP 경로 플립 1개의 서버 측 전화에 있는 깃발은 실제로 메시지를 만납니다 대상 상태에서 disagree — 담요 setFlags는 플래그를 다시 씁니다 서버는 이미 가지고 있으며 모든 연결된 클라이언트가 아무것도 동기화합니다. 그래프는 벌크 상응이 없습니다. 그래서 폴더와 PATCHes를 걸었다. 필터 수축으로 이동, 그래서 그것은 대신 첫 번째 페이지를 다시 Paging with $skip, 이는 항목에 단계 이전 배치 그냥 결과 설정에서 붓는다. 그것의 청소 천장은, 결코 침묵하지 않습니다. 비우는 Trash 스페셜을 지킵니다: 쓰레기는 진짜, 다른 사람을 위해 expunged 폴더는 쓰레기에 내용을 이동하고 복구 할 수 있습니다. 그래프의 DELETE 이미 그 방법을 행동, 그래서 폴더 이름 특별 캐싱이 없다. 둘 다 endpoints는 얼마나 많은 메시지가 이동되었는지 반환합니다, 그래서 UI는 "marked 240 read" from "nothing to do", 그리고 단지 변경 이벤트를 게시 할 때 뭔가 실제로 변경.
· SecurityService
커미션 기능에 대한 Browser-facing Relay
Org와 CommissionService에 세션, 승인 및 릴레이를 해결 회원은 해당 세션에서 우표로 보내지 않습니다. 이것은 유일한 장소 권한은 다음과 같습니다. SecurityService는 anyRequest().permitAll()를 실행합니다. 손전등 per-handler auth로, 그래서 그 체크가 열릴 끝점 공개 API 릴레이를 통해 도달 가능합니다. 3개의 권리는 오히려 하나 보다는, 그래서 의무의 별거는 표현할 수 있습니다: 단 하나로 교부금, 누구든지 수수료도 지급을 해제하고 취소 할 수 있었다 그 존재를 잡아라. 돈-moving 및 payout-destination 행위는 impersonation의 밑에 열심히 재사용합니다. Impersonation는 arbitrary 일원으로 가득 차있는 회의를, 그래서 그 refusal 없이 mints 신 관리자는 누군가로 입력 할 수 있습니다, 자신의 은행에서 지불 포인트, 인출, 및 자주 묻는 질문 조직 소유자는 implicit 홀더입니다. 새로운 권리가 부여됩니다 그날에 아무도가 배포합니다. — 그래서 소유자 지점없이 기능 선박 기숙사 및 허용. /me/opportunities는 SecurityService가 소유하기 때문에 릴레이보다는 여기에 제공됩니다. 기회 모델; CommissionService에서 해당 저장소 등록 하나의 공유-library 모델 두 작가를 줄 것입니다. 그것은 회원의 분할 행을 조합 대리인이 소유하기 때문에 1 차적인 대리인이 있는 예약으로 커미션은 스플릿 행을 생성하지 않고, 한쪽만 침묵하게 숨기는 쿼리 반 회원의 수입.
· kamo-shared-library
회원의 커미션 분할을 자신의 커미션 보기
Org-scoped 오히려 회원 혼자에 키워 : ORG ID는이에 복제됩니다 테이블 그래서 행은 id에 의해 크로스 텐트를 읽을 수 없습니다, 그리고 그것을 무시한 finder 은밀히 불행히도 만 절반의 "내가 적립"- 예약 레벨 커미션은 1 차적인 대리인에 그리고 균열 줄을 전혀 일으키기 위하여, 그래서 외침은 이것을 이어야 합니다 그 대리인의 예약으로. 다음 콜러에 문서화 침묵하게 회원의 수입 반을 숨길 수없는 전망.
· kamo-internal
회원 표면 실제 kamo 데이터 그리드
회원의 패키지는 아무런 동작이 없는 카드 목록이었습니다. 카모의 모습. 이것은 이제 집 AG 그리드 : 보류 및 완성 된 하위 태그 ?sub=, server-side paging end to end (page/size/status reach DocsService)에 동기화 200row 모자를 slicing 보다는 오히려), 그것의 행에 sizing 대신 팬을 채우기, and no title — 설정 탭은 이미 이름을 지정합니다. 상태는 회색 칩 보다는 오히려 한 눈에 읽습니다: due date는 그것의 자신의 것을 나릅니다 촉감, 기다림-others and content-changed are legible states 대신에 숨겨진 것들. 동작은 useReducedMotion에 구속되고 문질러집니다.
· kamo-internal
"Hi," prefix없이 회원의 이름을 표시합니다
· DocsService
Server-side paging for the member 할당 목록
회원 표면은 MAX SIZE unconditionally에 대해 물었다. 브라우저, 그래서 페이지가 이미 전체를 다운로드 한 그리드 그것을 건설하는 고용 역사. 회원 모두 이제 페이지 / 크기와 데이터베이스의 목록 페이지. Spec.status (1 enum)는 Spec.statuses (세트) 및 철사 모수 체재가 됩니다 `status`, 이제 CSV를 허용한다. 그 점은: 회원 그리드는 요청 BUCKET — 3개의 OPEN STATES는 아직도 owe 일, 또는 4개의 맨끝 그들 - 단 하나 평가된 필터는 당 3개의 둥근 여행 없이 하나 표현할 수 없습니다 사이트 맵 1개의 토큰은 한 줄 세트로 나뉩니다. 그래서 HR 그리드의 기존 status=EXECUTED는 철사에 바이트 IDentical이고 클라이언트가 변화하지 않아. 이름 * 목록의 알 수없는 토큰은 400 토큰을 남는 것은 결코 침묵하지 않습니다. 필터: 모든 것을 보여주는 동안 필터링해야 하는 준수 그리드 최악의 사용 가능한 결과. ClampPage/clampSize는 SAME 규칙을 통해 회원 리더 클램프가 노출됩니다. MAX SIZE를 통과하는 대신 HR 그리드로 "paged"하는 방법 조용한 끝점은 언바운드 한 것입니다. listMine는 없이 그것의 paging를 전달합니다 re-deriving 그것, 그래서 죔쇠는 한 번 존재합니다. 인증은 비접촉 및 테스트 핀입니다. 회원 엔드포인트는 memberGuarded() + LegalAssignOwnership, HR endpoints는 가드에 머물기() + LegalPackageAccess 및 세 가지 새로운 @RequestParams는 이름에 의해 asserted 정확히 상태/페이지/크기 — 전체적인 이유 이 표면은 안전은 아무것도 아니다 그 이름에. 스키마 변경 없음. 새로운 법인 없음. mvn -o 테스트: 391 테스트, 0 실패, 0 오류 (was 379).
· kamo-internal
개인 이메일 알림 카드는 알림 탭을 대체합니다
두 스위치는 암호 카드와 동일한 모양에 있는 나의 단면도에 움직입니다: 1개의 카드, 아이콘 도와 그리고 행당 텍스트를 돕고, 조용한 시간을 할 때만 나타나는 주석 인셋. 헤더 편집 단추 - 스위치는 스스로 저장하고, 탭으로 정확하게 debounced. 이 카드는 메일이 간다, 그 부분 회원이 잘못되기 때문에: 통지는 자신의 USER 계정에 주소를 보내, 카드 이름, 그리고 이 메일 박스에 절대 조직은 그(것)들을 할당했습니다 — mailbox는 읽기 위하여 서명해야 할 것입니다, 이는 아주 일입니다 주의사항은 그(것)들을 말합니다. SecurityService는 회원에게만 주소를 반환합니다. 에 속한, 그래서 메모는 통일되지 않은 형태로 돌아갑니다. TeamMembers 만: 정류기는 일반 회원이되는 내부 채팅 및 지원 티켓을 제공합니다. 하지 않습니다. 자가 밖에서, 기본 경로가 저경과 다른 사람에 이 스위치는 admin의 자신의 조용한 시간을 편집 할 것입니다.
· SecurityService
회원 프로필에 사용자 계정 이메일 노출
프로필의 개인 이메일 알림 카드는 주소 missed-message notices를 명함 실제로 도달하고 해당 주소는 user account's — not the `email` field외 it, 이는 mailbox 이 조직은 회원을 할당했습니다. 세션이 자신의 회원 행을 읽을 때만 반환됩니다. 자주 묻는 질문 관리자는 동료의 프로필을 수집해야하며 다른 통화자가 원하는 이유가 없습니다.
· kamo-internal
계정 설정 및 금융 권한 그룹 및 금융 권리 접근
Access Security and Administration 그룹은 SecurityRoleManager에서만 존재했습니다. 인라인 이름 목록으로, 그래서 JobTitleManager, DepartmentManager 및 RolesPermissionsTab lumped 모든 serviceType-less 권리에 일반. 4개의 사본을 추가하는 것보다 Rather, 그룹 정의는 permissionGroups.ts와 모든 4 개의 편집기로 이동합니다. isGeneralPermission는 문제의 이유입니다. 필터링!serviceType 혼자 두 번 오른쪽에 새겨진 아웃을 렌더링 할 것, 일반적으로 한 번에 한 번 자신의 단면도, 1개의 조정 2개의 독립적인 toggles를 주는. MembershipPermissionsTab은 deliberately untouched - 일반 권한 목록 hardcoded read/write/delete/admin mock, 실제 권한 데이터가 아닙니다. /settings/account 및 그 착륙 섹션은 이제 금융권을 인정합니다. MANAGE ORG FINANCES만 유지되는 컨트롤러는 그렇지 않으면 리디렉션됩니다. /settings로 곧 다시; 2 중 하나 밖에서 페이지를 떠날 것 URL에 의해 도달하지만 nav에 보이지 않는.
· InitializerService
커미션 ledger 및 Stripe payout 테이블에 대한 마이그레이션
거울 com.kamo.z.shared.commission. ddl-auto는 이러한 것을 만들 것입니다. anotations anyway; 명시된 DDL은 집의 관행이며, 어떤 것 12개의 엔티티티티 클래스에 비해 한 곳에서 검토할 수 있습니다. COMMISSION STRIPE WEBHOOK EVENT는 (ORG ID, STRIPE EVENT ID)에 속합니다. 이벤트 id 혼자. 모든 조직은 자체 Stripe Connect 플랫폼을 실행하므로 이벤트 에이즈는 하나의 계정 내에서 독특해야 - LOAN STRIPE WEBHOOK 이벤트 bare id의 키는 안전하기 때문에 기능은 단일 줄무늬 계정이 있습니다. prod에 대하여 적용하는; 모든 9개의 테이블 및 각 유일한 감시는 현재를 확인했습니다.
· SecurityService
모든 분지 모델의 ADMINISTRATOR 템플릿에 대한 금융권
이전에 존재하지 않은 기능을 갖춘 세 개의 수수료 권한 게이트 NEW RIGHT SEEDS deliberately는 그들에 대해 아무것도 말한다 - 그 메커니즘은 운반 기존의 보조금은 결코 침묵적으로 REMOVES 액세스, 그것을 사용 여기에는 돈 운동 힘이 결코 없었다. 대신 필요한 것은 역할 유형 기본적으로, 존재하지 않았다. 2개 부품: 템플릿SeedSetting DefaultRoleType 과부하를 얻기 위해 금융 ADMINISTRATOR 템플릿에 대한 권리. GRANTED는 FORCE GRANTED가 아닙니다. 한 명의 관리자에서 돈을 벌 수 있습니다. 프로파일 및 FORCE GRANTED는 폭포의 모든 나중에 층을 덮습니다. - keepRoleTypeTemplates는 모델에 대한 ADMINISTRATOR 행을 생성한다. Default-role rows 가 게으른, 누군가가 모델의 기본값을 저장할 때만 생성, 그리고 syncSecurityModelRoleRights iterates 그 테이블 - 그래서 없이 이 기본적으로는 절대로 주문을 받아서 만들어진 것을 제외하고 각 분지 모형에 적용합니다, 실로 그대는 그대가 아시니라.
· kamo-shared-library
Team-member 커미션 ledger 및 스트립 지불금 도메인
Com.kamo.z.shared.commission를 추가합니다. append-only 서명 ledger, per-member 연속되는 동시 인출에 순수하게 존재하는 균형 행, 커미션 프로세서 배치/라인-item 모델, per-org Stripe Connect 지불 entities. 유지의 세 가지 결정 : - 원장은 append-only이며 Java (@PreUpdate/@PreRemove)에서 시행합니다. 공유하기 @Column(updatable=false)는 Hibernate가 열을 올립니다. UPDATE, 그것은 쓰기 실패하지 않습니다, 그래서 stale 보정은 볼 것 그것은 성공했다. 수정은 행을 반전합니다. - 유효한 대 보류는 EFFECTIVE AT에 조회, 국가 기계 아닙니다. · 다음 달의 성숙으로 오늘 발행 된 커미션은 그에 사용 가능한 이동 자체, 그래서 청소가 실패하고 물가로 돈이 될 수 없다. - COMMISSION MEMBER BALANCE는 건축에 의해 원장과 중복됩니다. · 균형이 집계되기 때문에 존재하고 UPDATE에 대한 선택은 잠글 수 없습니다 집계; 한 줄없이 PESSIMISTIC WRITE에, 두 동시 모두는 자신의 sufficiency 검사를 통과합니다. 돈은 NUMERIC입니다(19,4) 전, org ids는 일반 INT8 열보다 오히려 협회 그래서 금융 기록 outlive 회원 churn, 및 ORG ID 복제 단 하나 줄 fetch가 Cross-tenant를 읽을 수 없습니다. 또한 재정면에 대한 3 권 (187-189)을 추가합니다. 그들은 너무 나쁘다 의무의 별거는 표현할 수 있습니다: 1개의 권리와 함께 커미션은 또한 지급을 해제하고 그 존재를 취소 할 수 그들을 잡아라. serviceType은 null deliberately - 새로운 ServiceType 그룹 그들은 자동으로하지만 모든 편집기에서 렌더링, 앱 섹션 이후 org가 앱을 사용할 때 나타납니다. KamoInitializer를 통해 적용되는 Schema; prod에 있는 모든 9개의 테이블 확인된 kamo 앱 사용자의 모든 특전으로.
· kamo-internal
Fold MFA는 비밀번호 카드로, Sign-in Security 탭을 드롭합니다
두 곳은 하나의 질문을 물었다 - 나는이 계정으로 얻는 방법 - 그래서 두 번째 요소는 지금 삶 내 프로필에 암호 옆에, 카드에 제목 "Password & Multi Factor Authentication" 등록 흐름은 탭에서 이동 *********** 크롬 자유로운 그래서 그것 페이지가 아닌 행으로 렌더링합니다. 상태 pill, 번호 QR/secret 및 코드 단계는 한 세트에 있습니다. 그리고 동일한 undismissable 회복 부호 대화 상자. 카드 헤더는 이제 편집 버튼을 수행하지 않습니다. 두 개의 독립적 인 행동을 소유합니다. 암호 행은 자신의 "Change password", MFA 행 자체가 있습니다. "회전" MFA는 보안서비스의 MFA 엔드포인트가 사용자를 해결하는 이유를 위해 각자만 유지한다. Caller의 세션에서 사용자 매개 변수가 없으므로 다른 사람의 프로필에 대한 관리자는 자신의 정통을 등록합니다. 비밀번호 변경은 더 넓습니다 (MANAGE MEMBER SECURITY, 신), 그래서 그 행을 혼자 렌더링. 비밀번호 상태는 PasswordSecurityCard로 이동하며, 그 길에 죽은 지점을 수정합니다. 오래된 카드 *translated* passwordError 에 대한 영어 리터럴, 그래서 "현재 암호는 잘못된" 해당 필드에 도달하지 않았습니다. 오류가 발생했습니다.
· kamo-internal
Org의 자신의 사서함, 별칭 및 공유 사서함 제안
수신자 autocomplete 만 알고 접촉 및 주소가 밖으로 긁어 센드 폴더, 그래서 조직의 자신의 주소 — 모든 관리 **************** — 메모리에서 입력되었습니다. 새로운 GET /api/email/directory 팬들은 뒤에 4개의 이메일서비스 소스에 그 페이지와 반환 한 deduped 주소 목록. Aggregated 서버 측 때문에 각 통화는 자신의 한 번 키를 소비합니다. 브라우저에서 그것은 될 것입니다 4 OTK 라운드 여행 때마다 작곡가가가가 열립니다. 그것의 각 근원 degrades 자체, 그래서 공급자는 여전히 그것의 별명을 얻지 못한 org. 이 목록은 메모리에 캐시되고 일치한 로컬 — orgs는 이러한 수십 가지가 없습니다. 수천, 키 입력 당 쿼리 매개 변수는 네트워크 라운드 여행을 넣어 브라우저가 이미 대답할 수 있는 제안의 앞에. Org는 그러므로 페인트 일치합니다 접촉과 Sent-folder lookups가 여전히 비행 중이며 그들은 드롭다운을 이끌 : 그것은 작은 정확한 세트이며 내부 주소는 또한 연락처 책에 앉아서는 메일 박스로 읽을 수 있으며 접촉 카드가 아닙니다. 설정에서 메일 박스를 편집하면 캐시를 떨어 뜨립니다. 그래서 새 주소는 제안할 수 있습니다. reload 없이. EmailService의 base-URL 및 forward helpers는 catch-all 노선에서 이동하므로 새로운 경로는 OTK를 두 번째 사본을 유지 대신 동일한 방법을 mints.
· kamo-internal
한 사서함보기, 모든 목록의 열
Conversational/Classic toggle는 사라지고 모든 회원은 클래식 목록. 대화 보기는 자신의 목록을 수행, 그것의 자신의 스레드 pane와 그것의 자신의 API 표면은 동일한 독서의 두번째 방법을 위해 mail - 모든 삭제, localStorage 모드와 함께 브라우저에서 기억. 목록 열의 헤더가 갔다. 폴더 이름, 아이콘, 그것의 밑에 묘사와 새로 고침 단추는 크롬의 6개의 rems였습니다 위의 목록은 높이를 원하고, 폴더 트리는 이미 말한다 어떤 폴더가 열립니다. 검색 및 필터 패널 폴더로 이동 sidebar, 폴더 라벨 위에, 그래서 목록 열은 아무것도 없다하지만 이름 * 새로 고침 버튼은 mailbox 스위처 옆에 반환합니다. 사각: 단추에 줄과 종횡비에 품목 결박은 만듭니다 그것의 고도는 스위처를 추적하고 그것의 폭은 그것의 고도를 추적합니다. 그것은 앉아 Single-mailbox 카드 외에도 dropdown없이 회원 새로 고침하지 마십시오. 한 열에 필터 드롭 - 두 개의 선택 측면은 적합하지 않습니다 320px 사이드바. SMTP 전용 공급자에는 폴더 사이드바가 없습니다, 그래서 거기 검색 패널은 사라지는 것보다 목록 위의 유지. 제거 된 표면의 문자열은 모든 22 로컬에서 제거됩니다. kamo-translation-dictionary (61fdfcf, 먼저 밀어). 스레드Detail from/to/cc/noContent stay - 리드 커뮤니케이션 탭이 렌더링됩니다.
· SecurityService
로스터의 연락처 이메일
상호 작용 센터는 작곡가를 미리 채우기 위한 회원 주소를 필요로 하고, 한 사람이 한 사람의 세부적인 fetch가 된 유일한 endpoint — one 눈에 보이는 줄 당 요구. EmbEmail은 회원 행에 삽입됩니다. 이미 로드, 그래서 서빙 그것은 여기에 아무것도 아무것도 그리고 N +를 제거.
· kamo-internal
그들의 행에서 회원을 곧 이메일로 보내십시오
행의 동작 도크는 대화, 만나고, 다이얼을 열고 프로필을 엽니다. — the one 이메일이 시작되지 않았으므로 메일로 동료에 도달 패널을 떠나면 작곡가를 열고 주소를 재 녹음하십시오. 작곡가 도구 창을 열 다른 사람들과 함께 메일 버튼을 추가 회원이 이미 현장에 있습니다. 이 주소는 by-department 페이로드 (EmbEmail은 회원 행에 있으므로 추가 비용이 없습니다. 질의) 오히려 per-row 세부사항 fetch 보다는, 및 module/right 문은 입니다 행당 대신 NavTopPanel에서 한 번 해결했습니다.

당신의 우주는 기다리고 있습니다.
몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.
영원히 무료 - 신용 카드 필요 없음