Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· kamo-internal
Umbenennen Sie LOS zu MLOS, fügen Personal Loan Origination System, Gate Commerce vertikalen
Apps Registerkarte zeigt jetzt 'Commerce: Hypothekendarlehen Origination System' (der Titel wird von der serviert backend enum, nicht der TS-Spiegel) und ein neues 'Commerce: Personal Loan Origination System' unter Nicht verfügbar. MORTGAGE und PERSONAL_LOANS Märkte sind auf ihre App gated. - AppType/ServiceType Spiegel: MLOS(14) + neu LOS(25); behebt auch die bereits bestehende Drift die Spiegel mit dem Java enum nicht einverstanden. - Organisation: istMlos hinzugefügt; isLos bedeutet jetzt persönliche Darlehen. isLos hatte null Verbraucher. - FeaturesManager: gating liest das vom Server gelieferte 'titled' Flag. Es wurde Client-Seite umgebaut von billingApi, dessen getCurrentAbonnement wirft und getAvailablePlans zurückkehrt [] (Vermächtnis stubs), so dass jede App still gelöst, um "unget" und kein Vorhängeschloss jemals gerendert. - Marktsammler: Sowohl die erstellen als auch die bearbeitenden Seiten hielten ihr eigenes Hardcoded COMMERCE_TYPES-Array; sie machen jetzt GET **************** so eine vertikale, die die Org nicht gekauft hat, ist nicht wählbar. Die Bearbeitungsseite hatte auch die Ein-MORTGAGE-per-org-Regel übersprungen. Es hält der aktuelle Typ des Marktes wählbar, so dass eine hindeutete Org noch öffnen und umbenennen kann. - Hypotheken-Einstellungen Oberflächen Tor auf isMlos statt isPos.
· kamo-shared-library
App-Resolve-App-Reitanspruch durch ServiceType; LOS in MLOS umbenennen
Anspruch gelöst ServiceType.name() gegen ************ Die Codes des Katalogs sind Marketingcodes (USERS, VIDEO_CONF, HR_SYSTEM, ...) und nie abgestimmt, so planFeatureIncluded's missing-Reihe Standard gewährt jede App auf jedem Plan - die Abrechnung-zu-app Link war inert. Katalogzeilen tragen jetzt einen getippten nullbaren service_type und Auflösung geht durch es, so kann eine App umbenannt werden, ohne Verschieben Anspruch. - ************ typd service_type column (als id verzerrt). - ************ Entschlossenheit von ServiceType; add-ons über die bisher ungelesen ************ jsonb; Fehlreihenverhalten hinter kamo.entitlement.fail-open (Standard wahr, bis die Katalogmatrix ausgesät ist). - AbonnementService: carry serviceType durch create/update/DTOs und Ableiten von Feature_code aus dem Namen, wenn weggelassen - die Einstellungen Dialog nie gesendet ein, so dass jede erstellen aus der UI trifft die NOT NULL Einschränkung. - CommerceType: binden Sie jede Vertikale an die erforderliche App (MORTGAGE-MLOS, PERSONAL_LOANS-LUND). - AppliedModelEnforcementService: getAllowedCommerceTypes schneidet das Sicherheitsmodell allow-list mit Anspruch; assertCommerceTypeAlowed deckt bereits erstellt und bearbeiten. - ServiceType: LOS -" MLOS halten id 14 (ORG_FEATURES beharrt auf der ID, nicht auf dem Namen, also nein Datenmigration); neuer LOS(25) für persönliche Darlehen - id 25, weil die Wiederverwendung von 14 umverteilt würde jede bestehende Hypothekenreihe. - RoleRightType: MLOS_* Rebound, IDs 139-144 unverändert; persönliches Darlehen LOS_* bei 190-195 hinzugefügt. - PhiModule.PLOS hinzugefügt: die Umbenennung links der persönlichen Darlehen App auf die Hypothek PHI abgebildet Modul und Hypothek ungemapped, die sauber kompiliert.
· kamo-internal
E-Mail an ein Mitglied aus ihrer Reihe
Fügt eine Mail-Aktion neben Chat, Anruf und Profil auf einer Mitgliedsreihe hinzu, die Nachrichten-Tool mit dem Empfänger bereits ausgefüllt. Es ist versteckt, es sei denn, die Org hat E-Mail aktiviert, der Betrachter hält ACCESS_MAIL, und das Mitglied hat tatsächlich eine Adresse auf Datei - eine Aktion, die einen leeren Komponisten öffnet, ist schlimmer als keine Aktion. Die Erlaubnis wird einmal in NavTopPanel und nicht pro Zeile gelöst: desto tiefer verwendenEmailAvailability() Sonbe kostet einen OTK plus Provider und Mailbox Round-Trips, und Dieses Panel montiert app-weit. Die Empfänger gehen durch als { initialData: { to: [email] . DraftMessage.to ist ein string[], so dass eine flache { zu: '...' - still fallen gelassen wird und der Komponist ohne Empfänger - die gleiche Falle HexHeadPopover Dokumente.
· MediaService
3 GiB-Anhänge akzeptieren, indem Sie sie in den Speicher streamen
file.getBytes() kann einen so großen Upload nicht darstellen. Ein Java-Array stoppt nur oberhalb 2 GiB - so jeder Anhang Vergangenheit, die auf einem OutOfMemoryErr starb unabhängig davon von Haufen, und ein 1 GB man benötigt eine 1 GB Zuordnung, um eine Datei zu speichern, die Spring bereits hatte auf Diskette gespult. Die MultipartFile geht nun zur Bildgebung als wiedereröffnete Quelle und wird gerade durchgestreamt. Die auf Übereinstimmung angehobene Grenzen: mehrteilig bis 3GB pro Datei (3100MB pro Anfrage), also Größte erlaubte Datei wird nicht für ihre eigene Grenze und Kopfzeilen abgelehnt) und media.attachments.max-Bytes auf 3 GiB. Multipart Spulen zu einem expliziten 24Gi emptyDir anstatt der beschreibbaren Schicht des Containers. Tomcat max-swallow-size ist jetzt -1, so ein abgelehnt Upload bekommt seine 4xx statt einer Reset-Verbindung geliefert.
· kamo-shared-library
Streamen Sie inhaltsgespeicherten Speicher, so dass ein Objekt den Haufen überschreiten kann
Chat-Aufhänge sind zu einem 3 GiB Decke bewegen. storeContentAddressed nahm ein Byte[], die das überhaupt nicht ausdrücken können - ein Java-Array stoppt bei Integer.MAX_VALUE . MinIOStorageService.upload dann gepuffert das ganze Objekt ein zweites Mal, so dass es könnte Versuchen Sie die Put gegen den nächsten Knoten. Fügt einen Streaming-Pfad neben beiden: HashUtils.computeDigests leitet Blake3 und SHA3-256 von einem Pass, Upload öffnet eine InputStreamSource pro Knoten wieder Versuch statt die Bytes zu halten, und der neue storeContentAddressed Überlastung Hashes, dedups und speichert, ohne jemals den Inhalt zu akkumulieren. Peak Memory ist die MinIO-Teilpuffer statt der Dateigröße. Es ist absichtlich nicht @Transactional: Die Speicherung von Gigabyte dauert Minuten, und die Reihe wird erst veröffentlicht (isMissing=false), sobald das Objekt ordnungsgemäß gespeichert ist, so dass ein Absturz lässt den gleichen Zustand der gepufferten Pfad hinterlässt.
· kamo-internal
Titel der Hypothek Form panes Borrower(s)
Das Darlehen/Borrower/Subjekt Eigentumsformular dient jedem Kreditnehmer auf der Datei, so dass die Tab- und Pane-Titel kommen nun aus Übersetzungen und lesen Sie Borrower(s). Darlehen und Thema Eigentum war hart codiert Englisch und jetzt durch Next-int zu lösen.
· kamo-internal
Fahren Sie die E-Mail-Vorlage von der Adresse ab, hinter einem Ein-/Ausschalter
Der Vorlagenpflücker in der Komponisten-Fußzeile ist weg. Welche Vorlage eine Botschaft trägt, ist kein separate Entscheidung von wem es gesendet wird als: die eigene primäre Adresse des Mitglieds Zeichen es als sie, ein Abteilung Mailbox Zeichen es als diese Abteilung mit den Kontaktdaten der Abteilung, die Organisationskontakt-Mailbox signiert es als die Organisation, und die Mailbox eines anderen Mitglieds unterschreibt es als dieses Mitglied. Es bleibt nur noch zu entscheiden, ob man überhaupt eine verwendet, die jetzt eine ist in der gleichen Ecke umschalten. Das Ausschalten sendet den Körper genau so typed. Der Redakteur zeigte eine Unterschrift in diesem Zustand während die gesendete Nachricht keine hatte, weil eine Nullvorlage auf DEFAULT_CONFIG für die Nur Vorschau; es macht jetzt nackt, so was auf dem Bildschirm ist, was ausgeht. Behebt auch die Berufsbezeichnung und Abteilung nie in einer komponierten Unterschrift erscheinen - sie hängen ab Teammitglied und kommen als jobTitleOfficial/jobTitleTitle und AbteilungTitel, nicht jobTitel und Abteilung - und bestückt die mobile Linie der BenutzerCellPhone toggle bereits gated.
· kamo-internal
Angebot Wartetickets für jeden verfügbaren Agenten auf einmal
· kamo-internal
Teal akzeptieren-Antreichung Popup, optisch von der Blei-Alarm
· kamo-internal
Wechseln Sie Postfächer aus dem gleichen durchsuchbaren Picker, den der Komponist benutzt
Der Switcher war die schwächere Hälfte des Paares: ein Select, der jeden hält Mailbox, die das Mitglied öffnen kann, die für org-weiten Zugriff ist jede Mailbox in die Org. Es auch genannt /accessible, die baut alle von ihnen auf jedem Seitenlast - eine Abfrage pro Mitglied und eine weitere pro Mailbox. Jetzt ein Button, der die geöffnete Mailbox zeigt, Öffnen MailboxPickerDialog gegen /sendbar. Nichts lädt die ganze Liste, und der Switcher und der From Feld bieten die gleichen Mailboxen unter den gleichen Überschriften, weil sie lesen der gleiche Endpunkt. Aliasen sind über aliases=false ausgeschlossen. Post an einen landet in der Mailbox dahinter, so gibt es nichts zu öffnen; zuOpenableMailbox weigert sich Sie als zweite Verteidigungslinie. Selektionsrestaur ist im Verhalten unverändert: der Abfragestring bereits trägt die ID und Adresse, so dass der Button beschriftet sich ohne Warten auf eine Nachschau und löst den Displaynamen nur, wenn es billig ist.
· EmailService
Lassen Sie /Endable Drop der Alias-Gruppe für Anrufer, die Mailboxen öffnen
Der /messages mailbox Switcher bietet das gleiche Set wie From des Komponisten Feld, abzüglich einer Sache: Ein Alias kann nicht geöffnet werden. Post an sie adressiert landet in der Mailbox dahinter, so dass es keine Ordner und nichts zu zeigen hat. Ausgeschlossene Server-Seite anstatt vom Anrufer gefiltert, so dass die Summen bleiben ehrlich - ein Kunde Dropping Zeilen von einer Seite würde berichten "zeigt 24 von 41234' während Rendering 21.
· kamo-internal
Reine Akzept-Popup-Entscheidermaschine und pro-Mitglied-Snooze
· kamo-internal
Proxy die Warteschlangen- und Forderungs-Endpunkte
· kamo-internal
Laden Sie das ausgeführte Dokument herunter und wählen Sie eine echte Unterzeichnungsbestellung
Der Absender hatte überhaupt keine Route zum fertigen Dokument. EnvelopeSummary beworben ein signiertesDocumentUrl zeigt innerhalb der kamo-signer App eigenen BFF, authentifiziert durch eine Signer-Sitzung - also die einzige Person, die jemals holen, was kam zurück war der letzte Unterzeichner, für vier Stunden. Fügt die OTK Proxy-Route und eine Download-Aktion auf jedem fertigen Umschlag. Der Dialog schickte auch RoutingOrder 1, 2, 3..., die LOOKED bestellt und war nie durchgesetzt. ESigService setzt es jetzt durch, so dass die Wahl ausdrücklich ist: Jede Bestellung (alle zusammen eingeladen, das heutige Verhalten und die Standardeinstellung) oder Eins zu einer Zeit. Verweigerungen zeigen nun ihren Grund statt "Aktion gescheitert" . ESigService erklärt sie in Worten und sie wurden weggeworfen - und zurücksetzen/leugnet sind versteckt, wo der Dienst würde immer nur 409.
· EmailService
Vorschau-Variablen für die E-Snaturvorlagen
Der Admin-Template-Editor gibt jeden Platzhalter leer für einen Schlüssel mit kein SampleVariables Arm, so dass die sieben esign Vorlagen als Seite in der Vorschau der leeren Lücken - einschließlich der fünf neuen Lebenszyklushinweise. Ein gemeinsamer Arm für den Lebenszyklus fünf, plus Arme für die Einladung und den Step-up-Code.
· kamo-shared-library
Die fünf Briefumschläge-Lebenszyklus-E-Mail-Vorlagen, die nie geschrieben wurden
Ein E-Signatur-Umschlag hatte genau zwei Vorlagen: die Einladung und die Step-up-Code. Nichts existierte für alles, was NACH einem Unterzeichner passiert Zeichen - weshalb die Signer-App verspricht "eine signierte Kopie wird E-Mail an alle Parteien" und keine solche E-Mail wurde jemals gesendet. Fügt esign.envelope_completed hinzu (jede Partei ausgeführte Kopie), ************ esign.signer_decoderd, esign.envelope_voided und esign.envelope_expired, mit dem CANONICAL_KEYS Einträge ohne die jeder Senden ist eine permanente 404. Auch entgeht freier Text in den beiden bestehenden esign Körper: TemplateRenderer Ersatz ohne Entweichen, und ein Empfänger-Name, Dokumententitel und Mitarbeiter-typed Nachricht sind alle frei Text. Die einfachen Varianten bleiben geliefert weil die Zeilen pro-Orig-Reihe nur einfügen-. EsignLifecycleTemplateTest pinnt die Konstante -- dotted-key -- sent-key triple und dass jeder Platzhalter einer ist, den der Absender tatsächlich ausfüllt.
· MediaService
Entscheiden Sie das Ticket Anspruch Rennen mit einem bedingten Update
· kamo-internal
Rebuild der Hypothekenmarkt-Einstellungen in sieben kohärente Registerkarten
Die MORTGAGE Marktseite trug fünfzehn Tabs, zwölf von ihnen Kreditgeber config, und mehrere beantworteten die gleiche Frage an zwei Stellen: Hedging wurde eingeschaltet unter Kapitalmärkten, während seine Toleranz unter der Politik lebte, die Wartung Modell und die Service-Bedingungen waren separate Registerkarten, Produkt-Enablement durchgeführt Kanalbeschränkung, während Kanalregeln erlaubt und verbotene Kanäle, und Die Delegation wurde an drei Orten festgelegt, ohne zu sagen, welche gewonnen hat. Gruppiert durch die Frage, die ein Betreiber tatsächlich beantwortet: Institut Geschäftsmodell, Underwriting-Behörde, Lizenzierung bietet Produktbelement, Kanalregeln, Risikoüberlagerungen Kapitalmärkte Ausführung Haltung, Preispolitik, Kapitalpolitik Investoren und ihre Delegation, Overlays, Lieferung, Engagement Wartungshaltung, Service-Politik Automatisierung KI-Autonomie, pro Stufe Vertrauen Wände Partner Anbieter Verbindungen, Anbieterverzeichnis Wo eine Einstellung wirklich von mehreren Stellen gelöst wird, sagt die Seite jetzt so anstatt den Betreiber zu raten: Die Behörde gibt die Delegation Vorrang, Channel-Regel Hinweise sagen, dass eine Anleger-Lieferung Regel schlägt Sie, und das Service-Überweisungsziel wird als Standard der Org bezeichnet. Jeder Abschnitt wird aus einem neuen Konfigurationssatz gebaut, das etwa hundert Zeilen von dupliziertes load/save/error/snackbar Sanitär pro Tab mit einer Sektionsschale, eine Tabelle, eine Bar speichern und ein Toast pro Tab. Lizenzen, Risikoüberlagerungen und Provider-Verbindungen gewinnen Inline-Bearbeitung - die API immer unterstützt, so Die Korrektur eines Tippfehlers bedeutete, dass die Zeile gestrichen wird. Die vier Investoren Unterredakteure wurde eine Komponente hinter einer segmentierten Steuerung, so dass die Eröffnung eines Investors Kosten eine Anfrage statt vier. Übersicht gewinnt ein Kreditgeber-Profil auslesen, das mit KreditgeberProfile verdrahtet wird, KreditgeberProfileValidation und changeLog: drei Endpunkte, die seit die Oberfläche wurde gebaut und dass nichts jemals gerufen hatte, so gab es keine Möglichkeit, sehen, ob ein Profil validiert ist oder welche Module es eingeschaltet hat. Links, die gegen die alten Schnecken geprägt sind, werden eher neumapped als still landen Übersicht, da SettingsView ein unbekanntes ?tab= auf Index 0 auflöst.
· kamo-internal
Wählen Sie die Adresse aus einem durchsuchbaren Dialog, nicht ein Dropdown
Eine Auswahl kann diese Liste nicht führen. Alles, was der /messages Switcher bietet sendfähig, und für ein Mitglied mit ACCESS_ALL_MEMBER_MAILBOXES, das ist jeder Postfach in der Org - Zehntausende in einem großen. Der Komponist jetzt zeigt den aktuellen Absender als Button an und öffnet einen Picker, der sucht und Seiten auf dem Server, so dass nichts lädt die ganze Menge. Die Picker-Shell wird von MemberPickerDialog extrahiert, das bereits gelöst ist dies für das Org-Verzeichnis: Debouncing, paging, Out-of-Order-Antworten, unendliches Scrollen, Tastatur-Navigation, Gruppenüberschriften und der Leerfehler und Ladeschirme. SearchablePickerDialog besitzt jetzt alles und nimmt eine Abetcher plus einen Zeilenerverder. MemberPickerDialog ist ein Wrapper darüber mit seine Requisiten unverändert, so dass das Manager-Feld, Chat-Mitglied hinzufügen und e-sign Suche bleibt unberührt; MailboxPickerDialog ist der zweite Wrapper. Gruppenüberschriften verwenden die eigenen Übersetzungsschlüssel des Switchers wieder, also die gleichen Mailbox kann nicht am Ende zwei verschiedene Dinge in zwei Orten genannt. Komponieren als anderes Mitglied bietet immer noch die Aliasnamen dieser Mitglieder: sie sind Adressen auf eine Identität statt Mailboxen, so dass der Endpunkt Antworten für das angemeldete Mitglied - kann sie nicht wissen. Der Komponist verschmilzt sie in die erste Seite durch den Picker-Kicker Haken.
· EmailService
Durchsuchbarer, gepageder Endpunkt für die Adressen, die ein Mitglied senden kann
GET /api/email/mailboxes/sendable beantwortet die gleiche Frage wie /accessible jede Adresse, die das Mitglied senden kann, aber als ein zusammengeführter Strom, der gesucht und in der Datenbank geblättert. /zugänglich kann nicht einen Picker servieren. Es materialisiert jede Gruppe in vollem Umfang, und für ein Mitglied mit ACCESS_ALL_MEMBER_MAILBOXES, das bedeutet, zu Fuß Mitglied in der Org und dann die Erteilung einer Anfrage pro Mitglied und eine andere pro Mailbox. Bei fünfstelligen Mitarbeitern sind es Zehntausende von Anfragen und ein Nutzlast zu entsprechen, auf jedem Anruf. Nur der privilegierte Schwanz ist in SQL gegliedert; die eigenen Mailboxen des Mitglieds, Aliasen und gemeinsame Mailboxen werden in Java gezählt und sortieren immer zuerst, so Die Suche nach Ihrer eigenen Adresse wird auf Seite 40 nie beantwortet. Ein Briefkasten erreichbar durch mehrere Stipendien ist einmal aufgeführt, unter dem schmalsten die gleiche Regel gilt der Komponist, so dass keine Identität erscheint zweimal. Reihen tragen die Gruppe, aus der sie kamen, und, für den Briefkasten eines anderen Mitglieds, Besitzer, damit der Kunde die gleichen Überschriften machen kann, die der Mailbox-Switcher verwendet. Namensauflösung verschlechtert sich genau wie MemberDisplayName; die beiden müssen stimmen zu oder die gleiche Person liest unterschiedlich in den beiden Orten.
· MediaService
Melden Sie die ans Klägerin Warteschlange
· MediaService
GET /types/{typeId'/slots, damit der Einstellungseditor Slots auflisten kann
Die Einstellungen UI hat immer diesen Pfad geholt, aber nur POST/PUT/DELETE waren mapd, so dass die Registerkarte Verfügbarkeits-Slots eine 405 und leer gemacht. Im Gegensatz zu /lots/verfügbar gibt dies jeden aktiven Slot auf dem Typ zurück, ohne zu filtern durch Vorankündigung oder Einschränkungen bei Kind-Org - ein Administrator muss die Slots, die sie konfiguriert haben, einschließlich solcher, die derzeit niemand buchen kann. Einschränkungen fahren entlang in jedem Slot ChildOrgRestrictions, so dass auch die ersetzt die /slots/restrictions lesen die UI versucht hat.
· MediaService
Besitzen Sie das Anspruchsvor-Ticket-Vordiz in einem Dienst
· kamo-internal
Zuweisen Sie einer Abteilung und der Organisation eine Mailbox
Die Kontakt-E-Mail des Abteilungsdialogs war freier Text, so dass er eine Adresse benennen konnte org besitzt nicht. Es wird ein Picker über die echten Mailboxen der Org -- die gleiche Liste ************ bietet, also "die zuweisenden Briefkästen" bedeutet das gleiche Set, wo immer es angeboten wird. Optional, und "None" ist sowohl die Standardeinstellung und wie Sie unzulässig; ein klarer Knopf im Feld tut es mit einem Klick. Verhaltenskennzeichnung Kontaktinformationen hält sein E-Mail-Textfeld genau so, wie es war und Gewinnt den gleichen Picker darunter. Die beiden sind unabhängig: das Textfeld ist, was die org veröffentlicht, die Mailbox benennt einen der eigenen der org. Eine MailboxSelect bedient beide Bildschirme, so dass sie nicht driften können, über eine gemeinsam zwischengespeicherte holen also die Lesezeile von Contact Information und der Picker fordern nicht jede die Liste an. Die Zustände werden absichtlich unterschieden: ein Org ohne Briefkästen, ein Mail-Hedirnis, das nach unten, und ein Mailbox entfernt Anbieter-Seite würde sonst alle als leer machen Feld. Die letzte zeigt sich als "nicht mehr verfügbar", anstatt ungewiss auszusehen, weil ein abgestandener Zeiger für jeden sichtbar sein muss, der ihn behebt. Abteilung spart senden Sie die gelöste Adresse neben dem Zeiger. Ein SecurityService gebaut, bevor mailboxId existiert ignoriert es und liest E-Mail, so dass ohne dass diese Änderung würde die Adresse jeder Abteilung das erste Mal, wenn man gegen die gespeichert wurde löschen derzeit eingesetzt bauen. Der umgebaute Service ignoriert das Feld; entfernen Sie die Brücke sobald jede Umgebung vorbei ist, die gebaut.
· InitializerService
Mailbox-Bedien für Abteilungen und Orgs, und füllen Sie die Abteilungen
DEPTS.MAILBOX_ID und ORGS.CONTACT_MAILBOX_ID, beides einfache UUID ohne FK email_provider.mailboxes: Mailboxen synchronisieren sich von externen Anbietern und können entfernt werden Anbieter-Seite, und die Mailbox löschen Endpunkt weiß nichts über Abteilungen, so dass ein reale FK würde beides in Misserfolge verwandeln. DEPTS.EMAIL war freier Text und hält einen Mix. Adressen, die wirklich eine der Org's sind Mailboxen werden verlinkt und in das eigene E-Mail-Kästchen umgeschrieben -- Support@KamoCRM.com war nie so, wie diese Mailbox adressiert ist. Adressen ohne passende Mailbox können nicht von dem Picker ausgedrückt, der das Feld ersetzt, so dass sie geräumt werden; das ist die destruktive Erklärung und sie ist absichtlich, die Sales@ und Corporate@ heute abdeckt. ORGS.CONTACT_EMAIL wird in Ruhe gelassen. Es behält seine eigene Text-Eingabe und die Mailbox sitzt daneben, anstatt sie zu ersetzen.
· kamo-shared-library
Lassen Sie eine Abteilung und ein Org auf eine ihrer Briefkästen zeigen
Die Kontakt-E-Mail einer Abteilung war freier Text, so dass sie eine Adresse nennen konnte, die die org tut nicht besitzen -- zwei der drei Abteilungen mit einem Satz heute tun genau das. Es jetzt hält einen Hinweis auf eine der Mailboxen der Org, und Organisation gewinnt das gleiche pointer neben dem bestehenden KontaktEmail, der unberührt ist. Zuordnung ist ein Hinweisgeber und nichts mehr: Sie notiert, welche Mailbox die Abteilung oder org ist erreichbar und gewährt niemandem Zugang zu ihr. Beide Spalten sind einfach UUID ohne FK zu email_provider.mailboxes, absichtlich. Mailboxes synchronisieren von externen Anbietern und können Anbieter-Seite entfernt werden, und die Mailbox-Elöschend-Endpunkt weiß nichts über Abteilungen -- ein echtes FK würde beides drehen von denen in Misserfolge. Ein abgestandener Hinweis ist die akzeptierte Kosten und die UI Oberflächen es. Department.email bleibt, hält die Adresse, die die zugewiesene Mailbox auflöst. Verbraucher wollen eine Adresse, keine ID, und Postanschriften sind unveränderlich (updateMailbox akzeptiert nur einen Anzeigenamen und ein Passwort), so dass die Kopie nicht driften kann. Zuweisen schreibt beides; Nullen löschen beides. Eine Mailbox von einer anderen Organisation ist abgelehnt -- der Picker bietet nur diese org's an, aber die Anfrage kann ohne sie gestellt werden, und ein Querverweis-Zeiger würde die Adresse einer org auf die ausgehende Post eines anderen setzen.
· kamo-internal
Ein Manager-Feld auf Position, und ein Leute Picker für die ganze App
Die Positionskarte erhält Manager, optional. Es ist eine Suche, kein Dropdown: ein Org kann halten Tausende von Namen, und das einzige, was ein Auswahl mit allen von ihnen garantiert ist eine Schriftrolle. Ein abgelehnter Manager - eine Reporting-Schleife, sagen wir - Oberflächen der Server-Begrund eher als ein allgemeines Versagen, auf das das Mitglied nicht reagieren kann. MemberPickerDialog ist der Picker. Suche läuft auf dem Server, Ergebnisse kommen eine Seite an Zeit, und Scrollen fragt nach dem nächsten, so dass nichts hier ein Verzeichnis enthält. Es liest sich wie eine Befehlspalette, weil das die schnellste Route für jemanden ist, der den Namen kennt, während Surfen funktioniert immer noch für jemanden, der nicht: Pfeile bewegen, Enter Picks, Escape schließt, und die Fußstütze sagt es. Reihen tragen Titel, Abteilung, E-Mail und Bericht zählen zwei Personen mit dem gleichen Namen auseinander zu halten. Jemand, der nicht ausgewählt werden kann, bleibt sichtbar mit der Grund; ein Name, der stillschweigend nicht in der Liste steht, liest sich als Fehler. Zwei Picker existierten bereits und keiner konnte eine große Org überleben. Der E-Sign-Unterzeichner Dialog und Chat-Add-Members popover sowohl geholt jedes Mitglied und gefiltert in der Browser. Beide geben nun diesen Dialog wieder her, indem sie ihre eigenen Quellen behalten - ein Unterzeichner kann jeder sein Mitglied, Chat-Verzeichnis ist nicht nur Mitarbeiter - und gewinnt die gleiche Suche, Tastatur Handhabung und Blick. Der popover wird AddChatMembersDialog, da es nicht mehr ein popover.
· SecurityService
Setzen Sie einen Manager und durchsuchen Sie das Verzeichnis eine Seite zu einer Zeit
GET ************ beantwortet eine Seite des Verzeichnisses der Sitzung org. Suchen, Bestellen und Bearbeiten in der Datenbank passieren; eine feindliche ?size= ist gedeckelt. Worte sind ANDE und LIKE Metazeichen entkamen, so dass eine aufgeklebte E-Mail mit einem Unterstrich verengt die Suche statt es zu erweitern. Die Plattform System User erscheint nie. Mitglied-Sicherheit liest und schreibt jetzt den Manager. Drei Ablehnungen, in der Reihenfolge ein Anrufer trifft sie: kein Teammitglied dieser Org, sich selbst, oder jemand, der sich bereits meldet durch dieses Mitglied - das letzte würde die Meldelinie in eine Schleife schließen, keine Abfrage zu gehen es könnte enden, weshalb es nicht im Schema leben kann. Der Manager ist gelöst, VOR alles geschrieben ist. Das Speichern ist eine Transaktion über Rollen, Rechte, Timeout und Position; eine Rückkehr von 400 Teilzeit würde sich immer noch verpflichten alles geschrieben bis zu diesem Punkt, so dass die Antwort würde eine abgelehnte Manager berichten, während die Rollen leise verändert. MemberAvatarUrlService ist das Zuhause für Avatar URL Konstruktion in neuem Code. Mehrere Controller tragen private Kopien, die gedriftet haben. Fotoerweiterung mit Instanz, die für einen Hibernate-Proxy falsch ist und eine .png serviert URL für ein JPEG.
· kamo-shared-library
Ein Manager und eine Verzeichnissuche, die eine große Org überlebt
Teammitglied erhält eine optionale Selbstreferenz dafür, an wen es berichtet. Anheftet auf INT8, so dass Hibernate nicht kopieren kann Member.ID's DEFAULT unique_rowid() auf den Join Spalte und Verfülle jede Zeile mit einem Manager, der nicht existiert. TeamMemberRepo gewinnt searchDirectory: eine Seite des org-Verzeichnisses, gefiltert, bestellt und in der Datenbank eingedrungen. Es ist für orgs mit fünf Zahlen des Personals geschrieben, so dass die Caller hält nie mehr als eine Seite - der Picker, den er zurückführt, läuft bei jedem Tastenanschlag. Begriffe sind UND gegen einen verketteten Heuhaufen, der das ist, was "ana leihen" finden lässt die Ana in Lending; eine Kette von ORed LIKEs nicht, weil LIKE nur angrenzend passt Text. Jedem Verein schließt sich eine explizite Schlussfolgerung an: Ein impliziter Weg ist INNER in JPQL und würde still fallen alle ohne eine Abteilung. Zyklen können nicht in dem Schema ausgedrückt werden, so findManagerIdOf lässt den Schriftsteller gehen Berichterstattung Kette ein Glied nach dem anderen, bevor Sie einen Manager akzeptieren.
· InitializerService
Geben Sie einem Teammitglied einen Manager
Fügt MANAGER_ID zu member_team_member hinzu, eine annchbare Selbstreferenz für die Berichterstattung Linie. Nichts ist verfüllt: kein Manager ist eine vollständige Antwort, sowohl an der Spitze der Diagramm und für alle, die einfach nicht zugeordnet sind. Der DROP DEFAULT ist die tragende Anweisung, nicht der ADD COLUMN . ddl-auto: update erstellt die Spalte zuerst. Eine Kolumne zu Member, dessen ID INT8 DEFAULT ist unique_rowid(), erbt diese Standardeinstellung, es sei denn, die Entität pins columnDefinition, die würde jede vorhandene Zeile mit einer zufälligen Manager-ID abstempeln. Das Waisenkind und die Selbstreferenz fegt klare IDs, die eine säumige Spalte bereits geschrieben hätte.

Euer Universum wartet.
Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.
Für immer kostenlos – keine Kreditkarte erforderlich