Przejdź do treści
KAMOUniverse

Changelog

Co nowego.

Każde ulepszenie platformy, jak to wysyła.

  1. · SecurityService

    Wąt wskazów dział macierzysty poprzez tworzenie i aktualizowanie

    Departament obsługiwa teraz wniosek DTO zamiast ośmiu argumentów pozycjonalnych, Tak więc rodzic dołącza do ładunku, zamiast stać się dziewiątym z rzędu tego samego typu Ciągi. Org scoping na mutujących punktach końcowych pozostaje niezmieniony; własna dzierżawa rodzica Sprawdzanie życia w służbie obok strażnika rowerowego.

  2. · kamo-internal

    Rysuj działy jako wykres org z wyborem rodziców

    Zakładka działów była płaską listą, więc org z Operacjami > Sukces klienta > Onboarding nie miał jak to powiedzieć i nie miał sposobu, aby to zobaczyć. Dodawanie/edycja otrzymuje wybrany dział rodzica, umieszczony z nazwą, ponieważ pochodzenie jest Strukturalna, a nie operacjonalna. Oferuje drzewo w porządku i wyłącza Sam dział plus wszystko pod nim - to są dokładnie te opcje Serwer odrzuca, a oferowanie wyboru, który zawsze zawodzi, jest gorsze niż jego nie oferowanie. Lista staje się org-chartowym kręgosłupem. Po jednej kolumnie szyny na poziom, każda dokładnie jedna ikona Chip szeroki, więc łokieć w rzędzie ląduje na środku chipa rodzica zamiast blisko To; szyna ostatniego dziecka zatrzymuje się na rogu, a nie biegnie dalej, co jest tym, co Ukajenie końca gałęzi jest widoczne bez liczenia wcięć. Komórki nie przenoszą się w pionie Wyściółka - szyny muszą osiągnąć obie krawędzie lub linia pęka w każdym rzędzie. Głębokość odczytuje przez odcień i wagę typu, a nie rozmiar chipa, ponieważ jednolite żetony są tym, co to jest Spraw, aby geometria szyny była dokładna. Nagłówki kolumn stają się etykietami operatora na matowym barze, Zastąpienie zakodowanego niebieskiego 50-50/indigo-50/gray-900, który zignorował token marki. Budowanie drzew mieszka w departamencieTree.ts, więc niezręczne przypadki mają gdzie być Przetestowany: rodzic usunięty z pod dzieckiem renderuje na najwyższym poziomie, a nie Znika, a cykl, który dotarł do tabeli renderuje zamiast wieszać stronę. Nieudane zapisy teraz zgłaszają własne wyjaśnienie serwera. Ciało 4xx zostało porzucone na rzecz linii statusu, która odwróciłaby się od „departament nie może być jego własnym. Rodzic" w "Zły wniosek".

  3. · kamo-shared-library

    Pozwól departamentu usiąść pod wydziałem macierzystym

    Działy były zbiorczą listą, więc wykres org z operacjami > Sukces klienta > Onboarding nie miał jak tego powiedzieć. Departament zyskuje opcjonalne samoodesłanie Rodzic; null nadal oznacza najwyższy poziom, który jest tym, co pozostaje każdy istniejący rząd. FK kolumnowe piny kolumnoweDefinicja "UUID". Lewy, Hibernate kopiuje Odwołano się do definicji klucza pierwotnego -- UUID DEFAULT gen_random_uuid() -- na FK, więc ddl-auto biegnie przez zaludnione znaczniki DEPTS w każdym rzędzie z przypadkowym rodzicem Nie dopasowywanie żadnego działu i ADD CONSTRAINT, który następuje, nie działa. Przydział rodzica jest zatwierdzany w serwisie, a nie tylko zbieracz: samorodzic, Cykle (chodzenie z proponowanego rodzica nie może dotrzeć do działu będącego Poruszony), rodzic w innej organizacji i nieznany identyfikator są odrzucani. Usuwanie działu promuje swoje dzieci dla własnego rodzica, a nie Usuwanie ich za zwisającym punktem. Teraz weź ich prośbę DTO zamiast ośmiu Argumenty pozycyjne, które sprawiły, że dodanie dziewiątego warto było unikać.

  4. · kamo-internal

    Rozwijaj pola To/Cc/Bcc do trzech rzędów, a następnie przewiń

    Pole odbiorców w oknie narzędzia komponowanego było pojedynczym rzędem terazrapa, który musiał być Przeciągany na boki do czytania, a okno ma szerokość 360px i nie można go ponownie ustawić, więc trzeci Adres był już poza zasięgiem wzroku. Teraz owijają: pole rośnie w rzędzie na raz jako żetony Wypełnij szerokość, zatrzymuje się na trzech rzędach i przewija się pionowo obok tego ze smukłym Szlug przewijak. Dodanie chipa następuje po wejściu w dół, aby pielęgnacja pozostała widoczna. Nasadka w rzędzie jest pikselą maksymalną wysokością, obliczyła się na podstawie mierzonej wysokości chipa, więc zawsze Cięcie na granicy rzędu - zmaksymalizowany kompozytor i skalowana czcionka przeglądarki przesuwają ją. Etykieta i przypinaj przycisk styków do pierwszego rzędu, zamiast pływać w środku Z bloku w trzech rzędach. Porzuca obecnie bezsensowny rekwis i poziomy przeciąganie, dla którego istniał.

  5. · kamo-internal

    Spraw, aby tworzenie org jest możliwe do przetrwania i zaoferuj każdą opcję brandingu z góry

    Kreator może zawieść klienta w sposób, w jaki nic nie wyjaśniono na ekranie, i poprosił o Ułamek tego, co Ustawienia - Behavior & Labeling eksponuje. Niezawodność tworzenia: - Logo i przesłane w tle trafiły do /api/imaging/upload z assocType "ORG_LOGO" - nie ImageAssocType stałe, na punkcie końcowym, którego assocType jest numerycznym ordynalnym. Parser Połknął awarię i złożył je jako MY_DOCS, więc branding po cichu nigdy nie istniał. Teraz one Korzystaj z prawdziwych punktów końcowych marki org, jednego połączenia na gniazdo logo. - Telefon / e-mail twórcy PUT może być tylko 403: ten punkt końcowy wymaga sesji-org do równego Org członka, a sesja jest nadal na rodzicu. Przeniesiono na ładowność tworzenia. - Ostrzeżenia post-create zostały zebrane, przekazane do /setup/dns jako param zapytania, i przeczytane przez Nic. /setup/dns teraz je renderuje. - Prześlij nigdy nie został ponownie walidowany, więc wyczyszczenie nazwy po osiągnięciu Review stworzył org z Tytuł i alias NULL. - wyzyskConfigType odczytuje przedziały wiekowe typu ALLOWED typu branch zamiast wybranego, Tłkowanie KIDS_CLUB w firmach dla dorosłych - które wyłączają e-mail i odzyskiwanie konta telefonicznego. - Nie uzyskano wariantów kolorystycznych, wejścia telefoniczne były nierozwiązane z VARCHAR(20), nieświeżą Przedział wiekowy 403'd po przesłaniu, a domena wyłożona jest nagim 500. Repartyzowanie behavior & Labeling — wszystko z wyjątkiem dwóch identyfikatorów hipotecznych: Strona internetowa, e-mail kontaktowy z firmą, tożsamość z białymi etykietami, wszystkie siedem profili społecznościowych, ósemka Niestandardowe etykiety z ich flagami od rodziców, domyślnym językiem i walutą, prywatnie-org Widoczność, oznakowanie wodne, trzy selektory pochodzenia marki i wszystkie cztery gniazda logo. Dwa nowe kroki (etykiety, preferencje); strefa czasowa przechodzi do preferencji obok swojego rodzeństwa. Wszystko to jeździ na ładowności create, a nie połączenia follow-up: PATCH /org/Aid-/branch-titles ma Ten sam sprawdzian sesji-org, który zepsuł aktualizację członka, a jedna transakcja oznacza odpowiedzi Albo cała ziemia, albo nikt tego nie robi. Wytyczne i chybialność: Każdy wkład pomaga tekstowi ugruntowanemu w tym, co faktycznie działa wartość. Przenoszenie tylko Typu i Podstawy Wymagane pola, a to jest teraz określone na nagłówku schodowym, w stepperze, na pasku nawy, i Na pasku bocznym — z "Skip na teraz" na każdym opcjonalnym kroku. Również: ustawienia nie niszczą już rozszerzeń telefonów org na save, /api/generate-background to nie Dłużej nieuwierzytelniony pełnomocnik rozliczeniowy, a pełnomocnik org-by-id przestaje uszkadzać id int64.

  6. · kamo-internal

    Wyślij przycisk z tyłu edytora, skąd pochodzi członek

    Redaktor tapet był ślepym zaułkiem – nie ma wyjścia poza szyną nawigacyjną. Oba wejścia Punkty (domowy chip górnegobaru i skrót od profilu członowego) teraz pieczęć ich pochodzenie na href, a redaktor rozwiązuje to w pigułkę wsteczną w Rząd brwi: dom wraca do deski rozdzielczej, profil wraca do członka Czyja to była strona, używająca pieczęci, zamiast zakładać, że jest to Właściciel tapety. Nagi adres URL bez stempla spada z powrotem do profilu tego członka. ZId jest sprawdzany pod kątem kształtu nieprzezroczystłego, więc skręcony adres URL nie może obrócić Przycisk do arbitralnego przekierowania. Czytanie go wymaga użyciaSearchParams, więc strona Zyskuje granicę zasycła, której wymaga router aplikacji.

  7. · kamo-internal

    Pokaż podstawową skrzynkę pocztową pod nazwą profilu jej członka

    Skrzynka pocztowa przechowywana jako czyjś pierwotna jest adres tej osoby, więc sugerując to jako "Sales Desk" - cokolwiek to się stało, że zostało oznaczone, gdy zostało zaopatrzone - Nazwiska skrzynka zamiast osoby. Autouzupełniony wiersz i odbiorca Zarówno karta, jak i ta dziedzina, więc obie były złe razem. Katalog zajmuje teraz głównyMemberName przed wyświetlaczem skrzynki pocztowejName, I przydzielonoMemberName do osobistej skrzynki pocztowej, której pojedynczym cesjonariuszem jest jej Właściciel. Aliasa i wspólne skrzynki pocztowe nie należą do nikogo w szczególności i nie należą do jednego Jego własne imię. Preferencją jest lista naródło, więc backend, który nie ma Jeszcze nie wysłane pole po prostu wraca do displayName.

  8. · EmailService

    Nazwij główną skrzynkę pocztową po tym, jak członek, który ją posiada

    Skrzynka pocztowa, którą ktoś trzyma jako swoją główną, jest adres tej osoby, więc Przedstawienie go w ramach jakiejkolwiek skrzynki pocztowej oznaczono w czasie świadczenia usług – "Sales Desk" na pudełko, które jest po prostu Jane Doe - nienawidzi osoby w Komponować autouzupełnianie i na karcie odbiorcy. ListMailboxes teraz przewożony dla członka Przypisanie podstawowe, które preferuje katalog adresów orgowych Własny wyświetlacz skrzynki pocztoweName. Liczy się tylko główny posiadacz: skrzynka pocztowa, którą ktoś Po prostu ma dostęp do nich nie jest ich i zachowuje swoją nazwę oraz ustawienia Stół nadal renderuje wyświetlaczName tak czy inaczej. Rozdzielczość nazwy przenosi się z AccessibleMailboxService do wspólnego pomocnika Tak więc te dwie powierzchnie nie mogą się nie zgadzać co do tego, jak nazywa się członek.

  9. · kamo-internal

    Zarejestruj strony prowizji w ustawieniach nav i landing page

    Zakładki istniały, ale nic z nimi nie było powiązane. Przykład ostrzegawczy już w tym repo: prawdziwa strona bez karty, bez karty, bez zakładki i Brak wpisu nav, osiągalny tylko przez wpisanie adresu URL. Rachunkowość i finanse to jego własna sekcja i własny temat nav, a nie o dwa więcej wpisy w zakładce Moje konto. Podwarianty nie noszą własnej bramy, więc składają te Wymuszyłby otwartą bramę konta dla posiadaczy środków finansowych i pokazywała im 4 linki, których nie mogą używać – to samo rozumowanie, które utrzymuje niezgodność z phi z dala od Temat bezpieczeństwa. Z zakładkami finansowymi w ich własnej sekcji, Moje konto Brama wraca do samego CONFIGURE_SYSTEM. Karta osobistych prowizji jest uzależniona od tego, czy widz jest członkiem zespołu, Odzwierciedlanie własnej bramy zakładki. Karta, która otwiera zakładkę, która nie będzie renderować, jest Gorzej niż bez karty.

  10. · kamo-internal

    Zakładka Komisji Członkowskich i dwie karty konta finansowego

    Zakładka (tylko dla siebie, tylko członkowie zespołu): równowaga + księgowość, zlecony Możliwości, konfiguracja wypłat i wypłaty. Ustawienia konta zyskują organizację Pasek i procesowanie komisji. Zakładka elementów jest zamknięta na Sejmie i członek TYPE, nigdy po prawej stronie. czekRight powraca true za wszystko w trybie aktywnego boga, a strona Czy możnaViewInMemberAccount OR w niezwiązanych z nimi prawach, w tym - więc brama oparta na prawo tutaj pokazałaby jedną Saldo i dane bankowe członków dla każdego z nich posiadającego którykolwiek z nich. 'Moje wypłaty', a nie 'Mój bank'. Członkowie prawie nigdy nie mają konta Stripe i nie mogą Załączaj jeden, jeśli to zrobią: OAuth read_write odrzuca konta kontrolowane przez inną Platforma. Platforma ich pracodawcy tworzy konto odbiorcy tylko wypłaty oraz Weryfikują swoją tożsamość. Panel określa to, co zbiera Stripe, że Stripe ma Brak relacji wsparcia z nimi, a te pieniądze zajmują około 6-8 dni kalendarzowych Do przybycia - nic z nich nie powinno ich później odkryć. Organizacja Stripe to z przewodnikiem, a nie formularz, ponieważ Stripe nie ma API Za to, że stajesz się platformą Connect. Krok 6 ma pełne ostrzeżenie, a nie wskazówkę: orgi, którego saldo Stripe wypłaca się automatycznie, traci promuzynę Zanim uruchomi się praca w zwolnionym zakresie, a każdy transfer następnie kończy się niewystarczającą ilością funduszy Bez imprezy Stripe, aby to wyjaśnić. Pieniądze są dziesiętnym STRING end to end to end to end i nigdy nie są Number()-ed, z wyjątkiem wyboru Kolor. Ujemne kwoty są realne - unieważniona prowizja staje się remisem - i Codebase nie miał konwencji o jej pokazywaniu, więc renderują w błędnym tonie z Wyraźny minus i chip rysunkowy. Sub-tabs syndować do ?sub'; SettingsView jest właścicielem ?tab i przepisuje go na każdej zmianie karty. Trasa BFF istnieje, ponieważ CommissionService jest tylko ClusterIP - bez niej Cała cecha 404s, podczas gdy każda usługa jest zdrowa, a każda budowa jest zielona.

  11. · kamo-internal

    Foldery, na podstawie którą możesz działać, poczta, którą możesz wybrać

    Kliknij prawym przyciskiem myszy dowolny folder dla jego działań. Nagłówek menu nie jest chromowany — Nazwanego folderu i pokazuje jego na żywo nieprzeczytaną / całkowitą, więc Mark wszystko czyta i Pusty folder można ocenić przed kliknięciem, a nie po nim. Działania, które nie mogą mieć zastosowania, są wykazywane jako niepełnosprawne z powodu (nic nie nieprzeczytane, foldery puste, wbudowane foldery zachowają swoje nazwy) zamiast być Puste i Usuń trasę poprzez potwierdzenie zbudowane dla chromu pocztowego. Szeroka aplikacja MUI ConfirmationDialog wymaga wpisowego słowa challenge każdego Czas; wyzwanie w zakresie rekonwalescencji tylko zmusza ludzi do pisania Za pomocą ostrzeżeń. Więc brama jest zarezerwowana dla dwóch, którzy niszczą pocztę Wyraźnie — usunięcie folderu i opróżnianie kosza — i obaj nazywają Dokładnie konsekwencja: wszystko inne przenosi się do Trash i tak mówi. Foldery ponownie porządkują przez przeciąganie, na członka, przechowywane we wspólnych pionkach ui Stół, więc układ podąża za nimi na różnych urządzeniach. Zamówienie jest jednym płaska lista nazw folderów: rodzeństwo jest porównywane tylko ze sobą, Tak więc lista zamawia każdy poziom, a folder, który zostanie przemianowany lub przeniesiony Odpada do swojej naturalnej pozycji zamiast korumpować drzewo. Krople Na różnych poziomach są ignorowane - to byłoby reparentem na serwerze pocztowym, Nie jest to jakiś rodzaj. Wybór poczty działa teraz tak, jak selekcja działa wszędzie indziej: kliknij przycisk zmiany dla zakresu od kotwicy, cmd / cliknięcia, aby wybrać jeden, Awatar zamienia się w pole kontrolne na uniesie, zamiast opodatkować każdy rząd Z stałą kolumną pola wyboru. Akcja jazdy w barze, który pływa Nad listą i liście z wyborem, zamiast paska zaklinowanego Do chromu, który wepchnął listę w dół na każdym kleszczu. Również: stopka Manage Folders zniknęła - przycisk obok folderów Kierownik już tworzy foldery - a przycisk odświeżania jest na końcu kwadratowy. CSS nie mógł tego zrobić samodzielnie: w flex rowu główne determinacje rozmiaru Przed wyrównaniem siebie:stretch daje elementowi jego wysokość, więc aspekt-kwadrat miał Brak wysokości, z której można by uzyskać szerokość. Zamiast tego mierzy wątek w rzędzie.

  12. · EmailService

    Działaj na całym folderze, a nie tylko na stronie przewijanej

    Zaznacz wszystkie odczytywane i puste foldery są operacjami w całym folderze, w którym klient Nie może wyrazić, doładowując uids: to tylko strona, którą ma Przewinięty, więc folder z 4000 nieprzeczytanych odbywałby 80 podróży w obie strony i Nadal tęskni za wszystkim, czego nigdy nie naładował. FolderManager zyskuje setFolderSeen i emptyFolder. Ścieżka IMAP się odwraca Flagi w jednym połączeniu po stronie serwera i dotykają tylko wiadomości, które faktycznie Nie zgadzam się ze stanem docelowym – zestaw Fagłas przepisuje flagę Serwer ma już i sprawia, że każdy podłączony klient resynchuje za nic. Graph nie ma luzu odpowiednika, więc chodzi po folderze i PATCHes; Filtr kurczy się w miarę upływu czasu, więc ponownie odczytuje pierwszą stronę zamiast Pokonanie $skip, który przekroczyłby przedmioty poprzedniej partii tylko Wywrócił się z zestawu wyników. Jego sufit jest rejestrowany, nigdy cichy. Emptying utrzymuje, że śmieci są wyjątkowe: Śmieci są wymazywane na prawdziwe, wszystkie inne Folder przenosi swoją zawartość do śmieci i pozostaje do odzyskania. Grafy do wyboru Już się zachowuje w ten sposób, więc nie ma tam nazwy folderu. Oba Punkty końcowe zwracają liczbę wiadomości, więc UI może powiedzieć "oznaczone 240 Odczyt" z "nic do zrobienia" i opublikuj tylko zdarzenie zmiany, gdy Coś się zmieniło.

  13. · SecurityService

    Przekaźnik skierowany do przeglądarki dla funkcji prowizji

    Rozwiązuje sesję, autoryzuje i przekazuje do CommissionService z orgi i Członek ostemplowany z tej sesji – nigdy z niczego, co wysłał rozmówca. To jest Sprawdzane są jedyne prawa do miejsca: SecurityService uruchamia dowolną czekową(). Z ręcznie walcowanym na ręcznym auth, więc punkt końcowy, który zapomina o jego kontrolach, nie powiod się otwiera Jest to możliwe dzięki publicznej przekaźnikowi API. Trzy prawa, a nie jedno, więc podział obowiązków jest wyraźny: z jednym Dotacja, niezależnie od tego, kto wyda prowizję, może również zwolnić wypłatę i anulować Pojmuje, że istnieje, aby ich złapać. Pozyskiwanie pieniędzy i działania na rzecz wypłaty-przeznaczenie w trudnej sytuacji pod jej sprawą. Podszywa się na pełną sesję jako arbitralny członek, więc bez tej odmowy Boski admin może wejść jako ktoś, wskazywać wypłaty we własnym banku, wycofywać się, i Odwołaj trzymanie. Właściciel organizacji jest ukrytym posiadaczem. Nowe prawo jest przyznawane Nikt w dniu, w którym się rozmieści – w tym do każdego, kto mógłby włączyć funkcję – Tak więc bez oddziału właściciela znajdują się statki uśpione i nieosiągalne. /me/oproporcjonalności jest tu obsługiwany, a nie przekazywany, ponieważ SecurityService jest właścicielem Model możliwości; rejestracja tych repozytoriów również w CommissionService Dałoby jeden model wspólnego biblioteki dwóch pisarzy. To związki zawodowe członków dzielone rzędy Z zastrzeżeniami, w których są głównym agentem, ponieważ agent jest właścicielem Prowizja nie generuje podziału wiersza, a zapytanie sprawdza tylko jedną stronę cicho ukrywa się Połowa zarobków członka.

  14. · kamo-shared-library

    Znajdź podziały komisji członkowzysty dla własnego poglądu komisji

    Org-scoped zamiast klawiszować na samym członku: ORG_ID jest powielany na tym Stół, więc wiersz nigdy nie może być odczytywane przez id, i odkrywca, który go zignorował Po cichu to cofnie. Tylko połowa "może zarabiać" - prowizja na poziomie rezerwacyjnym należy Do głównego agenta i nie produkuje w ogóle podzielonego rzędu, więc dzwonią muszą związywać to Z własnymi zastrzeżeniami agenta. Udokumentowane na podstawie metody, tak następny rozmówca Nie wysyła poglądu, który po cichu ukrywa pół zarobków członka.

  15. · kamo-internal

    Spraw, aby powierzchnia członka to prawdziwa sieć danych kamo

    Pakiety członka były listą kart bez ruchu, co nie jest tym, jak reszta Spojrzenie kamo. To jest teraz dom AG Grid: oczekujące i kompletne pod-taby Zsynchronizowane do „sub”, paging po stronie serwera na końcu (strona/rozmiar/stat dociera DocsService zamiast kroić czapkę o 200-rzędowej), wypełniając tafkę zamiast dosize do jej rzędów, I brak tytułu - zakładka ustawień już ją nazywa. Status czyta się na pierwszy rzut oka, a nie jako szary chip: termin duetu niesie ze sobą Niepokój, a oczekiwania na innych i zmiany treści są czytelnymi państwami, a nie Ukryte. Ruch jest powściągliwy i ogrodzony w useReducedMotion.

  16. · kamo-internal

    Pokaż nazwę członka bez prefiksu "Cześć",

  17. · DocsService

    Słowanie po stronie serwera dla listy przydziału członka

    Powierzchnia członka poprosiła o MAX_SIZE bezwarunkowo i pocięła wynik w Przeglądarka, więc siatka, która pokazała, że strona już pobrała całość Historia zatrudnienia, aby ją zbudować. Obydwaj czytelnicy członków biorą teraz stronę/rozmiar i Wymienianie stron w bazie danych. Spec.status (one enum) staje się Spec.statuses (a Set) i pozostaje parametr drutu "Status", teraz akceptując CSV. O to chodzi: sieć członkowska prosi o BUCKET — trzy OTWARTE, które nadal są winne pracy, lub cztery terminale — Filtr jednowartościowy nie może wyrazić ani to bez trzech podróży w obie strony, na Strona. Jeden token analizuje zestaw jednoelementowy, więc sieć HR istnieje Status-EXECUTED jest byte-identical na przewodzie i nie wymagał zmiany klienta. An (u) pon (piłka po/) Nieznany token na liście to 400 nazewnic, nigdy po cichu upuszczony Filtr: sieć zgodności, która twierdzi, że jest filtrowana podczas pokazywania wszystkiego To najgorszy dostępny wynik. clampPage/clampSize są narażeni, więc czytelnicy członków zaciskają się za pomocą reguły SAME Jako sieć HR zamiast przepuszczać MAX_SIZE dosłownie, co jest jak "paged" Punkt końcowy po cichu staje się nieograniczona. ListMining do przoduje bez Ponowne przyjęcie, więc zacisk istnieje raz. Autoryzacja jest nietknięta, a testy przypinają: punkty końcowe członków pozostają na CzłonekGuarded() + LegalAssignOwnership, punkty końcowe HR pozostają na strzeżeniu() LegalPackageDokwaty i trzy nowe „RequestParams” są śledzone z nazwy Dokładnie status/strona/rozmiar – cały powód, dla którego ta powierzchnia jest bezpieczna, jest to, że nic Na nim nazywasz osobę. Żadnego schematu. Nie ma nowego podmiotu. mvn -o test: 391 testów, 0 awarii, 0 błędów (było 379).

  18. · kamo-internal

    Osobista karta powiadomień e-mail zastępuje zakładkę Powiadomienia

    Oba przełączniki przechodzą na Mój profil w tym samym kształcie co karta hasła: jedna karta, ikona I pomóc w tekście w jednym wierszu, a także zabarwiony wstawce, który pojawia się tylko wtedy, gdy są włączone ciche godziny. Bez nagłówka Edytuj Przycisk — przełączniki zapisują się, odrzuciły, dokładnie tak, jak zrobiła to zakładka. Karta prowadzi z miejscem, w którym idzie poczta, ponieważ jest to część, którą członkowie mylą: powiadomienia są Wysłano na adres na ich koncie UŻYTKOWNIKA, którego nazwa karty, a nigdy do skrzynki pocztowej Organizacja przydzieliła im – skrzynka pocztowa, którą musieliby zalogować się, aby czytać, co jest właśnie tym. Zawiadomienie mówi im, żeby to zrobili. SecurityService zwraca ten adres tylko do członka Należy do niego, więc notatka wraca do nienazwanej postaci, jeśli jest nieobecna. Tylko TeamMembers: powiadamiacz obsługuje wewnętrzne bilety na czat i wsparcie, co robi zwykły członek Nie działaj. Tylko poza tym, ponieważ trasa preferencji jest me-scoped i na czyjeśj formie Profil tych przełączników edytuje własne ciche godziny administratora.

  19. · SecurityService

    Wyeksponuj wiadomość e-mail użytkownika na swoim profilu członkowskim

    Osobisty adres e-mail Karta powiadomień o profilu musi nazwać adres powiadomienia o przesłaniu wiadomości W rzeczywistości zasięg, a ten adres jest to konto użytkownika – a nie pole „e-mail” obok niego, które jest Skrzynka pocztowa, którą organizacja wyznaczyła członkiem. Zwrot tylko wtedy, gdy sesja jest odczytywanie własnego wiersza członkowskiego. Adres osobisty nie jest czymś administrator powinien zbierać profil kolegi, a żaden inny rozmówca nie ma powodu, aby go chcieć.

  20. · kamo-internal

    Grupa uprawnień do księgowości i finansów i dostęp do praw do ustawień konta

    Grupy Access Security and Administration istniały tylko w SecurityRoleManager. Jak wymienia listę nazw inline, tak JobTitleManager, DepartmentManager i RolesPermissionsTab Zmarnował każdą usługęType-less prawo do generała. Zamiast dodać czwartą kopię, Definicje grupowe przenoszą się do uprawnieńGroups.ts i wszyscy czterej redaktorzy je czytają. isGeneralPermission jest powodem, który ma znaczenie: filtrowanie na !serviceType sam Wykonałby wyrzeźbiony prosto dwa razy, raz w ogóle i raz we własnym. Sekcja, dając jeden ustawienie dwóch niezależnych przełączników. CzłonkostwoStadivingsTab jest celowo nietknięty - jego ogólna lista uprawnień Jest to zakodowany odczyt/zapis/usuń/admin makieta, a nie prawdziwe dane o prawach. /settings/konto i jego sekcja lądowania również przyjmują teraz również prawa finansowe. Kontroler posiadający tylko MANAGE_ORG_FINANCES zostałby przekierowany Od razu do /settings; poszerzenie tylko jednego z nich opuściłoby stronę Dostępna przez URL, ale niewidoczna w nav.

  21. · InitializerService

    Migracja dla księgi prowizowej i stołów wypłat Stripe

    Mirrors com.kamo.z.shared.commission. ddl-auto stworzyłby je z firmy I tak adnotacje; wyraźna DDL jest konwencją domową i jest tym, co tworzy Kształt jest sprawdzany w jednym miejscu, a nie na kilkunastu klasach jednostki. COMMISION_STRIPE_WEBHOOK_EVENT jest włączony (ORG_ID, STRIPE_EVENT_ID), a nie włączony Wydarzenie jest w sam. Każda organizacja prowadzi własną platformę Stripe Connect, więc Ids wydarzenia muszą być unikalne tylko w ramach jednego konta - LOAN_STRIPE_WEBHOOK_EVENTS klawisze na gołym id i są bezpieczne tylko dlatego, że Funkcja ma jedno konto Stripe. Stosowany przeciwko prod; wszystkie dziewięć stołów i każda wyjątkowa straż zweryfikowana.

  22. · SecurityService

    Zobacz prawa finansowe do szablonu ADMINISTRATORA każdego modelu oddziału

    Brama trzech praw do prowizji jest cechą, która wcześniej nie istniała, więc NEW_RIGHT_SEEDS celowo nie mówi o nich nic - ten mechanizm niesie ze sobą Istniejąca dotacja do przodu, więc wdrożenie nigdy po cichu nie usuwa dostępu i korzystania z niego Tutaj przekazywali władzę migracją pieniędzy ludziom, którzy nigdy jej nie mieli. Zamiast tego potrzebują domyślnego typu roli, który nie istniał. Dwie części: - templateSeedSttingFor zyskuje przeciążenie DefaultRoleType, przyznając finansowanie Prawa do szablonów ADMINISTRATORA. GRANTED, a nie FORCE_GRANTED: org must Możliwość cofnięcia pieniędzy od jednego administratora na członka Profil i FORCE_GRANTED nadpisują każdą późniejszą warstwę wodospadu. - zapewnienieRoleTypeTemplates tworzy wiersz ADMINISTRATORA dla modeli, których brakuje. Domyślne rzędy są leniwe, tworzone tylko wtedy, gdy ktoś zapisze domyślne ustawienia modelu, I syncSecurityModelRoleRights itetras ta, która rości sobie tę tabelę - tak bez tego niewykonaniemyślne dotyczyłoby każdego modelu gałęzi, z wyjątkiem nigdy niestandardowych, Po cichu, a te są najbardziej prawdopodobne, że będą polegać na as-is.

  23. · kamo-shared-library

    Zespołowa członka prowizyjowa i domena wypłat Stripe

    Dodaje com.kamo.z.shared.commission: kiełownik dołączony wyłącznie dołączony, a na członka Wiersz równowagi, który istnieje wyłącznie w celu serializacji równoczesnych wypłat, Model wsadowy/wyjściowy procesora Komisji oraz per-org Stripe Connect Podmioty wypłacające. Trzy decyzje warte dotrzymania: - Kedża jest dołączona tylko do urządzenia i wymusza ją w Javie (PreUpdate/PreRemove) Rzuć). Kolumna (upzasadowalna ?false) sprawia, że Hibernate pomiń kolumnę z AKTUALIZACJA nie sprawia, że pisanie zawodzi, więc nieaktualna korekta będzie wyglądać Jakby się udało. Korekty to odwracanie rzędów. - Dostępne vs oczekujące jest zapytanie przez EFFECTIVE_AT, a nie maszynę państwową. A A Komisja wydana dzisiaj wraz z nadchodzącymi ruchami zapadalności w przyszłym miesiącu, aby być dostępnym na jej temat Własny, więc nie ma zamiatania, które mogłyby zawieść, a pieniądze z nieważności. - KOMISJA_MEMBER_BALANCE jest zbędna wraz z czeszą w wyniku budowy. To się dzieje. Istnieje, ponieważ saldo jest agregat, a SELECT FOR UPDATE nie może zablokować agregowane; bez jednego rzędu do podjęcia PESSIMISTIC_WRITE, dwa jednocześnie Wypłaty, które przechodzą własną kontrolę wystarczalności. Pieniądze są NUMERIC (19,4) w całym, org ids są gładkimi kolumnami INT8, a nie Stowarzyszenia więc rejestry finansowe przewyższają lirod członka, a ORG_ID jest duplikowane Na dziecięce rzędy, więc żaden pojedynczy popiół nie może odczytać cross-tenant. Dodaje również trzy prawa (187-189) dla powierzchni finansowej. Są one podzielone, więc Rozdzielenie obowiązków jest wyraźne: z jednym prawem osoba, która wydaje Prowizja może również zwolnić wypłatę i anulować wstrzymanie, które istnieje, aby Zapisz ich. ServiceType jest celowo null - nowy ServiceType by pogrupował Imponują automatycznie, ale nie renderuj ich w ogóle, ponieważ tylko sekcje aplikacji Pojawiają się, gdy org ma włączoną aplikację. Schemat stosowany za pośrednictwem KamoInitializer; wszystkie dziewięć tabel zweryfikowanych obecnych w prod Z WSZYSTKIE uprawnieniami dla użytkownika aplikacji kamo.

  24. · kamo-internal

    Złóż MFA do karty hasła i upuść zakładkę Zabezpieczenia logowania

    Dwa miejsca zadane jedno pytanie – jak zdobyć to konto – więc drugi czynnik żyje teraz Oprócz hasła na moim profilu, w karcie przemianowanej "Password & Multi Factor Authentication". Przepływ rejestrowania przenosi się z zakładki do ? bezchromu, więc renderuje jako wiersz, a nie strona: pigułka statusowa, numerowana QR / tajna i kodowa kroki w jednym wstawce, I to samo nierozbrajalne okno dialogowe o odzyskiwaniu icode. Nagłówek karty nie nosi przycisku Edytuj teraz, gdy jest posiada dwie niezależne akcje – wiersz haseł ma własne „Zmień hasło”, wiersz MSZ własny "Zawróć się". MFA pozostaje samodzielny z tego powodu, że zakładka brzmiała: punkty końcowe SecurityService MFA rozwiązania użytkownika Z sesji rozmówcy i nie weź żadnego parametru użytkownika, więc administrator na profilu kogoś innego Zapisuj swój własny uwierzytelniacz. Zmiana hasła jest szersza (MANAGE_MEMBER_SECURITY, bóg), więc Ten wiersz sam w sobie tam renderuje. Hasło stan przenosi się do PasswordSecurityCard, który naprawia martwą gałąź w drodze: stara karta Porównano hasło „przetłumaczone” Zwolnienie z angielskimi literami, więc „Obecne hasło jest nieprawidłowe” Nigdy nie dotarł do pola, do którego należała. Błąd przenosi teraz swoje pole.

  25. · kamo-internal

    Zaproponuje własne skrzynki pocztowe org, aliasy i udostępnione skrzynki pocztowe

    Autouzupełnianie odbiorcy znał tylko kontakty i adresy zeskrobane zeskromuchnięte z Wysłane foldery, więc adresy organizacji – wszystko zarządzane - trzeba było wpisać z pamięci. Nowy GET /api/e-mail/ukierunkowani fani do czterech źródeł EmailService za To strona i zwraca jedną listę adresów deduped. Zagregowany po stronie serwera, ponieważ Każdy z tych połączeń zużywa swój własny jednorazowy klucz; z przeglądarki Cztery rejsy OTK w obie strony za każdym razem, gdy otwiera się kompozytor. Każde źródło degraduje się na swoim Własny, więc org, którego dostawca nie ma rezerwy, nadal otrzymuje swoje aliasy. Lista jest bujna w pamięci i dopasowana lokalnie - orgs mają ich dziesiątki, a nie Tysiące i parametr zapytania na naciśnięcie klawisza postawiłyby pojazd sieci w obie strony Przedni sugesti, na które przeglądarka może już odpowiedzieć. Org pasuje więc do farby Natychmiast, gdy zasięg kontaktowy i wyszukiwania typu Senter są nadal w locie, oraz Prowadzą one osuwisko: jest to mały dokładny zestaw i adres wewnętrzny, który Również w książce kontaktowej należy przeczytać jako skrzynkę pocztową, a nie kartę kontaktową. Edycja skrzynek pocztowych w Ustawieniach upuszcza pamięć podręczną, więc nowy adres jest do podejmowania Bez przeładunku. EmailService z bazą-URL i pomocnicy do przodu wyjdą z trasy catch-all, więc Nowa trasa miota OTK w ten sam sposób, zamiast zachować drugą kopię.

  26. · kamo-internal

    Jeden widok skrzynki pocztowej i kolumna, która jest na całej liście

    Przełącznik konwersacyjny / klasyczny zniknął, a każdy członek otrzymuje Klasyczna lista. Widok konwersacji zawierał własną listę, własny wątek Panel i własna powierzchnia API dla drugiego sposobu czytania tego samego Poczta — wszystko to usunięto wraz z trybem localStorage Pamiętny według przeglądarki. Nagłówek kolumny listy poszedł z nim. Nazwa folderu, jego ikona, Opis pod nim i przycisk odświeżania to sześć remów chromu Na liście, która chciała mieć wysokość, a drzewo folderu już mówi Który folder jest otwarty. Wyszukiwanie i panel filtra przesuń się do folderu Pasek boczny, nad etykietą Folders, więc kolumna listy to nic innego jak Lista. Przycisk odświeżający powraca obok przełącznika skrzynki pocztowej jako Kwadrat: elementy-rozciągnięcie w rzędzie i aspekt-kwadrat na przycisku make jego wysokość śledzi przełącznik, a jego szerokość ściemnia jego wysokość. Siedzi. Poza kartą jednoskrzycową również, więc członek bez rozwijania Nie traci odświeżenia. Filtry spadają do jednej kolumny — dwa wybrane obok siebie nie pasują do a Szkło boczne 320px. Dostawca tylko SMTP nie ma paska bocznego folderu, więc tam jest Panel wyszukiwania pozostaje nad listą, a nie znika. Struny dla usuniętych powierzchni są szorowane ze wszystkich 22 miejsc w kamo-translation-dictionary (61fdfcf, napchany pierwszy). threadOpis Od/do/cc/content stay — zakładka komunikacji ołowiowej je renderuje.

  27. · SecurityService

    Ekspsystry kontaktowy e-mail w składzie by-department

    The Interaction Center potrzebuje adresu członka, aby wypełnić kompozytora, oraz Jedynym punktem końcowym, który niósł jeden, był jednoosobowy opis - jeden Wniosek w widocznym rzędzie. EmbEmail jest osadzona w wierszu członka składu Już ładuje, więc serwowanie go tutaj nic nie kosztuje i usuwa N + 1.

  28. · kamo-internal

    Wyślij e-maila do członka prosto z ich wiersza

    Dok akcji rzędu może rozmawiać, spotykać się, wybierać i otwierać profil — ten Rzeczą, której nie mógł zrobić, to uruchomić e-mail, więc dotarcie do kolegi pocztą Oznaczało opuszczenie panelu, otwarcie kompozytora i wytypowanie jego adresu. Dodaje przycisk poczty obok innych, który otwiera okno narzędzia kompozytora Z członkiem już w polu Do. Adres porusza się w Opłata za część departamentu (EmbEmail jest w wierszu członkowskim, więc nie kosztuje więcej Zapytanie) zamiast pobierania szczegółów na rzut, a moduł / brama prawa to Ustanowiono raz w NavTopPanel zamiast w rzędzie.

  29. · DaemonService

    Codzienne przypomnienie o pakiety prawne

    DaemonService jest właścicielem kleszcza, ponieważ DocsService nie może. DaemonService jest Strategia: Odtwórz — stara kapsuła zniknęła przed rozpoczęciem nowego, więc wdrożenie Okno nie może podwójnie ogień. DocsService jest RollingUpdate maxSurge:1, więc a Scaled tam łatwo może: przez długość każdego rolloutu są dwa kapsuły Obydwoje uważają, że jest 13:00. Za pracę, której produkcja jest poczta do każdego spóźnionego Pracownik na platformie, "zwykle raz" nie jest własnością. To również daje nam DisallowConcurrentExecution, ręczny wyzwalacz JobTriggerController i cron Dostrajalny bez przesunięcia DocsService. Wzorowane na LeadEmailSweepJob, w tym część, która jest nośna, raczej To stylistyczne: domyślny RestTemplate czeka FOREVER, więc zaklinowany DocsService Przypiąłby ten nitk i – pod ’DisallowcurrentExecution – zatrzymać zamiatanie Dopóki kapsuła nie zostanie ponownie uruchomiona, cicho i w nieskończoność, wygląda dokładnie jak "nie" Przypomnienia były należne”. Przepływy są wyraźne. Znaczki wewnętrzne.auth.secret (public-chat), wartość DocsInternalAuthFilter Waliduje - NIE tajemnicę wewnętrzną MLOS, która jest inną wartością i 403s Każde połączenie, korekta StewardNotifier i VoipGlobalSyncJob potrzebowały obu. Codzienny, nie godzinowy: wiadro jest funkcją dnia, więc kleszcz godzinowy wynosi 24x Skanowanie krzyżowe w celu uzyskania co najwyżej jednego dodatkowego send i 24x promienia wybuchu. Nie Zmiana konfigmapy — podstawowy adres URL doków i cron mają domyślne działanie.

  30. · DocsService

    Drabina przypomnienia w pojedynkę i wyrwana, tylko zamiatanie

    Wiadro jest czystą funkcją (dueDate, dziś) i nigdy "kiedy będziemy trwać Wysłane": UPCOMING_D'n dla skonfigurowanych offsetów, DUE_TODAY, następnie PAST_DUE_P-floor(dobsOverdue / interwał) . Prowadzenie zamiatania pięć razy w dniu 9 W związku z tym daje jedno wiadro, a roszczenie księgi jest tym, co je deduplicuje – nie Państwo jest pamiętane wszędzie. Przesunięcia są danymi; nic w klasie nie wie liczba 3. terminowe terminy domyślne do 0 oznacza NIEZYWNIONY, ponieważ Decyzja nr 4 mówi, że przypomnienia z przeszłości powtarzają się, a cicha czapka wygląda dokładnie tak, jak Pracowica podczas porzucenia członka najbardziej potrzebuje pościgu. Odcięcie jest dziś + max(upcomingDays) + 1, nie teraz(): repozytor wspowiedź Jest to należne PRZED, więc teraz() odcięcie znajdzie tylko zaległe rzędy i całe Nadchodząca połowa drabiny nigdy nie wybuchnie. Jedna krótka transakcja tylko do odczytu na Slice, w pełni zmaterializująca każdą partię Rzadkie zapisy — Organizacja i Członek są LAZY, więc fqdn, etykieta, Nazwa i adres są rozwiązywane w środku - a transakcja jest zamknięta Przed pierwszym wysłaniem. EmailService wysyłanie jest blokowanie HTTP do blokowania SMTP, I partia trzymała otwarte piny połączenia Hikari dla długości każdej podróży w obie strony W nim, w serwisie obsługująjącym również WOPI. Przechwyt wykonuje ZERO pisze. Nie może serializować-represja, nie może impasu Na czarodzieja, a paging jest stabilne, ponieważ nie mutuje rzędów Przepływa. SuchyUruchuje i nie liczy i twierdzi nic - suchy bieg, który Twierdził, że spali każde wiadro, które skontrolował i po cichu tłumiłoby prawdziwy bieg. Rejestrator zyskuje wysyłkęAllCounted obok niezmienionej wysyłkiAll, ponieważ LegalReminderSweepResultDto już przewozi i nie powiodło się, a jeden wysłany Liczb nie może ich wypełnić: na ponownym uruchomieniu "odebrane 0 z 400" jest poprawne, zdrowe Odpowiedź i "odebrane 400, wysłane 0" to awaria, a dziennik demona musi być w stanie Żeby je rozróżnić.

Twój wszechświat czeka.

Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.

Bezpłatne na zawsze — nie wymaga karty kredytowej