Changelog
Ce qui est nouveau.
Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.
· kamo-internal
Adresse électronique par courrier électronique d'un membre de sa ligne
Ajout d'une action mail à côté de chat, d'appel et de profil sur une ligne de membre, en ouvrant le Outil de message avec le destinataire déjà renseigné. Il est caché à moins que l'orgif n'ait e-mail activé, le spectateur détient ACCESS-MAIL, et le membre a effectivement une adresse dans le dossier - une action qui ouvre un compositeur vide est pire que l'absence d'action. L'autorisation est résolue une fois dans NavTopPanel plutôt que par ligne: useeEmailAvailability() coûte une excursion OTK plus fournisseur et boîte aux lettres, et Ce panneau monte dans l'ensemble de l'application. Les destinataires passent par les données initiales : à l'adresse suivante : [courrier électronique. DraftMessage.to est un corde[-, donc un appartement - à: '. . . . . . . . . . . . . . . . . . . . . . . Le même piège HexHeadPover documents.
· MediaService
Accepter 3 pièces jointes GiB en les diffusant en continu au stockage
file.getBytes() ne peut pas représenter un téléchargement de ce grand tableau - un tableau Java s'arrête juste au-dessus de 2 GiB - donc chaque attachement passé qui est mort sur une OutOfMemoryError quoi qu'il en soit de tas, et un 1 GB dont on a besoin d'une allocation de 1 Go pour stocker un fichier Spring avait déjà boolé sur disque. Le MultipartFile va maintenant à l'imagerie en tant que source réouverte et est rebondi à travers. Limites relevées pour correspondre: multipart à 3GB par fichier (3100MB par demande, donc le le dossier le plus élevé autorisé n'est pas rejeté pour ses propres limites et en-têtes) et media.attachments.max-octets à 3 GiB. Bobines multipartes à un 24Gi vide de 24Gi plutôt que la couche écriture du récipient. Tomcat max-sallow-size est maintenant -1, donc a le téléchargement rejeté obtient sa 4xx délivrée au lieu d'une connexion de réinitialisation.
· kamo-shared-library
Stockage à l'adresse de contenu de flux afin qu'un objet puisse dépasser le tas
Les éléments de discussion sont mobiles à un plafond de 3 GiB. storeContentAddressed a pris une octet, qui ne peut pas tout à fait exprimer qu'un réseau Java s'arrête à Integer.MAX-VALUE - et MinIOStorageService.upload a mis en mémoire une seconde fois le tout pour qu'il puisse rétrécissez le put contre le nœud suivant. Ajoute un chemin de streaming à côté des deux: HashUtils.computeDigests dérive Blake3 et SHA3-256 à partir d'un seul passage, uploadStreaming rouvre un InputStreamSource par noeud la tentative au lieu de tenir les octets, et la nouvelle charge de charge sous forme de sous-marineContentAdure hachute, dédups et magasins sans jamais accumuler le contenu. La mémoire de crête est la Débit de la partie MITIO plutôt que la taille du fichier. Il n'est délibérément pas «transactionnel: le stockage des gigaoctets prend des minutes, et la ligne n'est publié (is Missing-faux) que lorsque l'objet est conservé de manière durable, donc un crash laisse le même état que le chemin tamponne quitte.
· kamo-internal
Titre du formulaire hypothécaire Pans Emprunteur(s)
Le formulaire de prêt/emprunteur/sujet sert chaque emprunteur sur le dossier, de sorte que Les titres des onglets et des volets proviennent désormais des traductions et des emprunteurs. Prêts et Les propriétés des sujets étaient en dur l'anglais et se résolvaient maintenant par next-intl aussi.
· kamo-internal
Déminer l'adresse From, derrière un interrupteur marche/arrêt
Le cueilleur de modèle dans le pied de page du compositeur a disparu. Quel modèle un message porte n'est pas un la décision séparée de l'adresse suivante: l'adresse principale du membre, telle qu'elle est, la boîte aux lettres du département la signe comme ce service avec les coordonnées du département, La boîte aux lettres de contact de l'organisation la signe comme l'organisation, et la boîte aux lettres d'un autre membre signe c'est en tant que membre. Tout ce qu'il reste à choisir, c'est s'il faut en utiliser un, ce qui est maintenant un commuter dans le même coin. Le désactiver envoie le corps exactement comme typé. L'éditeur a montré une signature dans cet état alors que le message envoyé n'en avait pas, parce qu'un modèle nul est retombé à DEFAULT-CONFIG pour le la prévisualisation seulement; il rend maintenant nu, donc ce qui est à l'écran est ce qui sort. Corrige également le titre du poste et le département n'apparaissant jamais dans une signature composée - ils traînent Membre de l'équipe et arriver en tant que titulaireTitre Officier/jeuTitre et départementTitre, pas jobTitre et et qui remplit la ligne mobile, l'utilisateurCellPhone basculant déjà fermé.
· kamo-internal
Offrir des billets d'attente à chaque agent disponible en même temps
· kamo-internal
Teal accept-request pop-up, visuellement distinct de l'alerte tête
· kamo-internal
Interrupter des boîtes aux lettres du même sélecteur consultable que le compositeur utilise
Le commutateur était la moitié plus faible de la paire: une sélection tenant chaque boîte aux lettres que le membre peut ouvrir, qui pour un accès à l'échelle de l'orgge est chaque boîte aux lettres l'orge. Il a également appelé/accessible, qui les construit tous sur chaque chargement de page - une requête par membre et une autre par boîte aux lettres. Maintenant un bouton montrant la boîte aux lettres ouverte, ouvrant MailboxPickerDialog contre /sendable. Rien ne charge la totalité de la liste, et l'interrupteur et le From un champ offre les mêmes boîtes aux lettres sous les mêmes rubriques parce qu'elles lisent le même critère d'évaluation. Les alias sont exclus par le biais d'un pseudonymes. Courrier envoyé sur une terre mailbox derrière elle, donc il n'y a rien à ouvrir; à OpenenableMailbox refuse en tant que deuxième ligne de défense. La restoration de la sélection est inchangée dans le comportement: la chaîne de requête porte l'id et l'adresse, de sorte que le bouton s'étiquette lui-même sans attendre une recherche et ne résout le nom de l'affichage que s'il est bon marché.
· EmailService
Laissons/sendable laisser tomber le groupe d'alias pour les appelants qui ouvrent les boîtes aux lettres
Le commutateur de boîte aux lettres /messages offre le même ensemble que le compositeur From champ, moins une chose: un alias ne peut pas être ouvert. Adressé par voie postale atterrit dans la boîte aux lettres derrière elle, donc il n'y a pas de dépliants et rien à montrer. Filtre exclu du serveur plutôt que filtré par l'appelant afin que les totaux restent honnêtes - un client laissant tomber des lignes d'une page rapporterait 24 de 41234' en rendant 21.
· kamo-internal
Machine de décision d'acceptation-popup pur et par membre snooze
· kamo-internal
Proxyner les critères d'évaluation du résumé et de l'allégation de réclamation
· kamo-internal
Télécharger le document exécuté et choisir un ordre de signature réel
L'expéditeur n'avait aucune voie pour le document final. EnveloppeRésumé Annonce d'un document signé intitulé "Pointant" qui pointe dans l'application kamo-signer propre BFF, authentifié par une session de signataires - donc la seule personne qui pouvait Ce qui est revenu a été le dernier signataire, pendant quatre heures. Ajout Route OTK proxy et action de téléchargement sur chaque enveloppe complète. Le dialogue a également envoyé l'ordonnance d'itinéraire 1, 2, 3..., qui a commandé et a été jamais imposé. ESigService le fait respecter maintenant, de sorte que le choix est explicite: Toute commande (toute personne invitée ensemble, comportement d'aujourd'hui et défaut) ou un à la fois. Les refus montrent maintenant leur raison au lieu de "l'action en échec" les déclare en paroles et ils sont jetés - et resend/vide sont cachés là où le service ne serait que 409.
· EmailService
Variables de prévisualisation des modèles de signature électronique
L'éditeur de modèle d'administration rend chaque espace réservé vierge pour une clé avec Pas d'échantillons Bras de variables, donc les sept modèles d'essign prévisualisés en tant que page de vides de vides, y compris les cinq nouveaux avis de cycle de vie. Un bras partagé pour le cycle de vie cinq, plus les bras pour l'invitation et le code de hausse.
· kamo-shared-library
Les cinq modèles d'e-mails enveloppe-cycle qui n'ont jamais été écrits
Une enveloppe de signature électronique avait exactement deux modèles: l'invitation et le code gradué. Rien n'existait pour quoi que ce soit qui arrive après un signataire Signes - c'est pourquoi l'application signataire promet "une copie signée sera envoyé par courrier électronique à toutes les parties" et aucun e-mail de ce type n'a jamais été envoyé. Ajout de l'accord esign.envelope-ach-complété (copie exécutée de chaque partie), esign.signer-decoderd, esign.envelope-empted et esign.envelope-expired, avec les CANONICAL-KEYS les entrées sans lesquelles chaque envoi est un permanent 404. Échappe également au texte libre dans les deux corps d'essign existants: TemplateRenderer les substituts sans échappatoire, et un nom de destinataire, le titre du document et Les messages de type personnel sont tous des textes libres. Les variantes simples restent fournies parce que les lignes par or sont insérées uniquement. EsignLifecycleTemplateEsstalle d'Essemance Trier et que chaque espace réservé est l'un des expéditeurs qui remplit en fait.
· MediaService
Décidons de la course à la demande de billet avec une mise à jour conditionnelle
· kamo-internal
Reconstruire les paramètres du marché hypothécaire en sept onglets cohérents
La page du marché MORTGAGE portait quinze onglets, dont 12 de la prise de fournisseur, et plusieurs ont répondu à la même question en deux endroits: la couverture a été activée sous Marchés des capitaux alors que sa tolérance vivait dans le cadre des politiques, les services Les conditions de modèle et d'entretien étaient des onglets séparés, l'étilabilité des produits était un la restriction des canaux pendant que les règles de canal sont autorisées et interdites, et La délégation s'est installée à trois endroits sans rien dire que l'on a gagné. Regroupé par la question à laquelle un opérateur répond en réalité: modèle d'entreprise, autorité de souscription, licence offre la mise au point d'activation des produits, les règles de canal, les overlays pour risques posture d'exécution des marchés de capitaux, politique des prix, politique des capitaux investisseurs investisseurs et leur délégation, superpositions, livraison, engagement Service d'entretiens et de politique de service Automatisation de l'autonomie de l'IA, murs de confiance à chaque étape Connexions de fournisseurs partenaires, annuaire des fournisseurs Là où un décor est réellement résolu à partir de plusieurs endroits, la page dit maintenant au lieu de laisser l'opérateur deviner: la section d'autorité indique le La préséance de la délégation, les indices de la règle de la chaîne indiquent qu'une règle de livraison des investisseurs bat et l'objectif de transfert de services est appelé par défaut d'orgge. Chaque section est construite à partir d'un nouveau configKit, remplaçant une centaine de lignes de plombiers/enregistrement/grumes/snack-bar par onglet avec une enveloppe de section, une table, une barre de sauvegarde et un toast par onglet. Licences, superpositions à risque et les connexions de fournisseur gagnent en ligne - l'API l'a toujours prise en charge, donc fixer une frappe utilisée pour supprimer la ligne. Les quatre sous-émetteurs d'investisseurs est devenu un élément à l'origine d'un contrôle segmenté, de sorte que l'ouverture d'un investissement coûte un investisseur une demande au lieu de quatre. Vue d'ensemble acquisition de profil de prêteur câblé à lenderProfile, LenderProfileValidation et changementLog : trois critères d'évaluation existaient depuis la surface a été construite et que rien n'avait jamais appelé, donc il n'y avait aucun moyen de voir si un profil a validé ou quels modules il s'est activé. Les liens contre les vieilles limaces sont remappés plutôt que d'atterrir silencieusement sur Vue d'ensemble, puisque SettingsView résout un indice inconnu à l'index 0.
· kamo-internal
Choisissez l'adresse From d'un dialogue consultable, pas une liste déroulante
Un sélection ne peut pas tenir cette liste. Tout ce que le commutateur/message offre est envoiable, et pour un membre avec ACCESS-ALL-MEMBER-MAILBOXES, c'est-à-dire pour un membre qui est boîte aux lettres dans l'orge - dizaines de milliers dans une grande. Le compositeur maintenant affichent l'expéditeur courant sous la forme d'un bouton et ouvre un cueilleur qui recherche et pages sur le serveur, donc rien ne charge l'ensemble de l'ensemble. La coque de cueillette est extraite de MemberPickerDialog, qui a déjà été résolu. pour l'annuaire de l'orge: débouclage, radiomessagerie, réponses hors- mandat, le défilement infini, la navigation au clavier, les en-têtes de groupe, et le vide, l'erreur et des écrans de chargement. SearchablePickerDialog possède maintenant tout et prend un fetcher plus un moteur de rendu de rangée. MemberPickerDialog est une enveloppe sur-le avec ses accessoires inchangés, donc le champ gestionnaire, le membre de discussion ajoute et la signature électronique La recherche n'est pas affectée; MailboxPickerDialog est la deuxième enveloppe. Les rubriques de groupe réutilisent les propres clés de traduction de l'interrupteur, de sorte que les mêmes La boîte aux lettres ne peut pas être nommée deux choses différentes à deux endroits. En tant qu'autre autre membre, il est toujours proposé d'ajouter les pseudonymes de ce membre: ils sont adresses sur une identité plutôt que sur des boîtes aux lettres, de sorte que le point d'extrémité - qui les réponses au membre connecté - ne peuvent pas les connaître. Le compositeur fusionne dans la première page à travers le crochet de fetcher du cueilleur.
· EmailService
Fin de recherche et de page pour les adresses qu'un membre peut envoyer à partir de
GET /api/email/mailboxes/réponses pouvant être envoyées la même question que/accessible chaque adresse que l'organe peut envoyer en tant que flux fusionné qui est recherchés et en ligne dans la base de données. / accessibles ne peuvent pas servir un cueilleur. Il présente tous les groupes dans leur intégralité, et pour un membre titulaire de l'établissement ACCESS-ALL-MEMBER-MAILBOXES, qui signifie marcher toutes les membre de l'organisation, puis émettre une requête par membre et un autre par groupe boîte aux lettres. Sur cinq chiffres de personnel, il s'agit de dizaines de milliers de questions et charge utile à correspondre, à chaque appel. Seule la queue privilégiée est page dans SQL; les boîtes aux lettres du membre, Les alias et les boîtes aux lettres partagées sont comptés en Java et trient toujours en premier, donc La recherche de votre propre adresse n'est jamais résolue à la page 40. Une boîte aux lettres joignable par le biais de plusieurs subventions est répertoriée une fois, sous le titre le plus étroit la même règle que le compositeur applique, donc aucune identité n'apparaît deux fois. Les rangées portent le groupe d'où ils viennent et, pour la boîte aux lettres d'un autre membre, propriétaire, de sorte que le client peut rendre les mêmes titres que le commutateur de boîte aux lettres. La résolution nominative exactement comme MemberDisplayName le fait; les deux doivent s'accordent ou la même personne lit différemment aux deux endroits.
· MediaService
Signaler la file d'attente des billets de l'appelant
· MediaService
GET /types/typeId/slots pour que l'éditeur de paramètres puisse répertorier les créneaux
Les paramètres UI ont toujours parcouru ce chemin, mais seuls POST/PUT/DELETE ont été mappé, donc l'onglet Availability Slots a obtenu un 405 et rendu vide. Contrairement à /slots/disponible ce retourne chaque fente actif sur le type sans filtrage par un avis de réservation préalable ou des restrictions à l'org enfant - un administrateur doit voir le Les créneaux horaires qu'ils ont configurés, y compris ceux que personne ne peut réserver actuellement. Restrictions se déplace dans l'enfant de chaque créneau de créneau remplace les /slots/restrictions lire l'interface utilisateur.
· MediaService
Posséder le prédicat de billet en un seul service
· kamo-internal
Affecter une boîte aux lettres à un département et à l'organisation
L'e-mail de contact du dialogue du département était un texte gratuit, de sorte qu'il pouvait désigner une adresse org ne possède pas. Il devient un sélecteur sur les vraies boîtes aux lettres de l'orge -- la même liste - offres, de sorte que "les boîtes aux lettres assignables" signifient: le même ensemble où qu'il soit offert. Facultatif, et "Nul" est à la fois la valeur par défaut et la manière dont vous ne les avez pas assignés, un bouton clair dans le champ le fait en un clic. Les informations de contact pour l'étiquetage du comportement conservent son champ de texte de courrier électronique exactement tels qu'ils étaient et prend le même cueilleur en dessous. Les deux sont indépendants: le champ texte est ce que le org publie, la boîte aux lettres nomme l'une des adresses propres. Un MailboxSelect sert les deux écrans afin qu'ils ne puissent pas dériver, sur une bagage mise en cache partagée Ainsi, la ligne de lecture de la ligne de contact et son sélecteur ne demandent pas chacune de la liste. Le les états sont laissés en évidence à dessein: un org sans boîte aux lettres, un backend par courrier qui est vers le bas, et une boîte aux lettres supprimée côté fournisseur serait autrement rendue en tant que vide champ. Le dernier montre comme "ne plus disponible" plutôt que comme n'ayant pas l'air non attribué, parce qu'un pointeur tiède doit être visible pour quiconque le fixe. Le Département sauvegarde l'adresse résolue à côté du pointeur. Un service de sécurité construit avant l'existence de mailboxId l'ignore et lit-il des e-mails, donc sans que ce changement effacerait l'adresse de chaque département la première fois que l'on a été sauvé Construit actuellement. Le service reconstruit ignore le champ; enlever le pont une fois que chaque environnement est passé par cette construction.
· InitializerService
Pointeurs de la boîte aux lettres pour les départements et les orges, et renouer les départements
DEPTS.MAILBOX-ID et ORGS.CONTACT-MAILBOX-ID, tous deux sans FK à e-mail-provider.boxes: synchronisation des boîtes aux lettres de fournisseurs externes et peut être supprimée côté fournisseur, et la boîte aux lettres supprimer le point d'extrémité ne sait rien des départements, donc a les vrais FK transformeraient ces deux échecs. DEPTS.EMAIL était un texte libre et tenait un mélange. Adresses qui sont vraiment l'une des org Les boîtes aux lettres sont reliées et réécrites au boîtier de la boîte aux lettres -- n'a jamais été la manière dont cette boîte aux lettres est traitée. Les adresses sans boîte aux lettres correspondante ne peuvent pas être exprimé par le sélecteur qui remplace le champ, de sorte qu'ils sont dégagés; c'est-à-dire Une déclaration destructrice et elle est délibérée, couvrant les ventes et les entreprises aujourd'hui. ORGS.CONTACT-EMAIL est laissé seul. Il conserve sa propre saisie du texte et la boîte aux lettres est assise. à côté de lui plutôt que de le remplacer.
· kamo-shared-library
Laisser un département et un org à l'une de leurs boîtes aux lettres
L'e-mail de contact d'un département était un texte gratuit, de sorte qu'il pouvait nommer une adresse. Ne s'appropriez pas -- deux des trois départements avec un ensemble aujourd'hui font exactement cela. C'est maintenant détient un indicateur vers l'une des boîtes aux lettres de l'organisation, et l'Organisation gagne la même pointer à côté de son contact existantEmail, qui n'est pas touché. L'affectation est un pointeur et rien de plus: il enregistre quelle boîte aux lettres le département ou org est atteint et n'accorde à personne d'accès. Les deux colonnes sont volontaires UUID sans FK à l'adresse e-mail.provider.mailboxes, délibérément. Les boîtes aux lettres se synchronisent auprès de fournisseurs externes et peuvent être supprimées du côté du fournisseur, et Le point d'extrémité de la boîte aux lettres supprimer ne sait rien des départements -- un vrai FK tournerait les deux de ceux-ci en échecs. Un pointeur rassis est le coût accepté et l'interface utilisateur le surface. Department.email reste, en maintenant l'adresse à laquelle la boîte aux lettres attribuée est affectée. Les consommateurs veulent une adresse, pas un identifiant, et les adresses de boîte aux lettres sont immuables (updateMailbox n'accepte qu'un nom d'affichage et un mot de passe), de sorte que la copie ne peut pas dériver. L'assignation écrit les deux; la compensation des nuls les deux. Une boîte aux lettres d'une autre organisation est Refusé -- le cueilleur n'offre que cet org, mais la demande peut être faite sans elle, et un pointeur de renvoi mettrait l'adresse d'un org sur le courrier sortant d'un autre.
· kamo-internal
Un champ de gestion sur Position, et un cueilleur pour l'ensemble de l'application
Le gestionnaire de la carte de position, optionnel. C'est une recherche, pas une liste déroulante: un org peut tenir Des milliers de noms, et la seule chose qu'un choix avec tous les garanties est un rouleau. Un gestionnaire rejeté - une boucle de rapport, disons - surface la raison du serveur plutôt qu'une défaillance générique sur laquelle le membre ne peut pas agir. MemberPickerDialog est le cueilleur. La recherche s'exécute sur le serveur, les résultats arrivent à une page à un Le temps, et le défilement demande le prochain, donc rien ici ne tient un annuaire. Il se lit comme suit: une palette de commandes parce que c'est la voie la plus rapide pour quelqu'un qui connaît le nom, tandis que la navigation fonctionne toujours pour quelqu'un qui ne bouge pas: flèches bouger, Enter picks, Escape fermer, Et le pied de page le dit. Les rangées portent le titre, le département, le courrier électronique et le nombre de rapports, ce qui est suffisant pour Dis à deux personnes avec le même nom à part. Quelqu'un qui ne peut pas être cueilli reste visible avec la raison jointe; un nom qui n'est pas silencieusement dans la liste se lit comme un bogue. Deux cueilleurs existaient déjà et ni l'un ni l'autre ne pouvait survivre à une grande mine. Le signataire de l'e-sign dialog et add-members de chat, les membres de l'ajout de chats popover à la fois chaque membre et filtrés dans le navigateur. Les deux rendent maintenant ce dialogue, en gardant leurs propres sources - un signataire peut être n'importe quel membre, l'annuaire du chat n'est pas seulement le personnel - et obtenant la même recherche, le clavier la manipulation et l'apparence. Le popover devient AddChatMembersDialog, puisqu'il n'est plus un popover.
· SecurityService
Définir un gestionnaire, et rechercher dans le répertoire une page à la fois
GET répond à une page du répertoire de l'ordonnance de session. La recherche, l'ordre et la prise de -page se produisent dans la base de données; une taille hostile est plafonnée. Les mots sont Les métacaractères ont échappé aux métacaractères, donc un e-mail collé avec un soulignement réduit le rechercher au lieu de l'élargir. L'utilisateur du système de la plate-forme n'apparaît jamais. La sécurité des membres lit et écrit maintenant le gestionnaire. Trois rejets, dans l'ordre un appelant ne les frappe pas: pas un membre de cette équipe, lui-même, ou quelqu'un qui rend déjà compte par l'intermédiaire de ce membre - le dernier fermerait la ligne de reportage en une boucle pas de requête marchant il pourrait s'arrêter, c'est pourquoi il ne peut pas vivre dans le schéma. Le gestionnaire est résolu AVANT que tout soit écrit. L'épargne est une transaction à travers rôles, droits, temporisation et position; le retour d'un 400 d'entre eux resterait à engager tout écrit jusqu'à ce point, donc la réponse rapporterait un gestionnaire rejeté tandis que les rôles ont changé de silence. MemberAvatarUrlService est le lieu de construction d'URL d'avatar dans un nouveau code. Plusieurs Les contrôleurs transportent des copies privées qui ont dérivé - AccountController's choisit toujours le extension photo avec instanceof, qui est faux pour un mandataire d'Hibernate et dessert un .png URL pour un JPEG.
· kamo-shared-library
Un gestionnaire, et une recherche d'annuaire qui survit à un gros org
L'équipe Membre acquiert une auto-référence facultative pour savoir à qui il rend compte. columnDefinition is épinglé à INT8 afin qu'Hibernate ne puisse pas copier Member.ID's DEFAULT single-rowid() sur la jonction colonne et renflouer chaque ligne avec un gestionnaire qui n'existe pas. TeamMemberRepo gagne en flèche Répertoire: une page du répertoire de l'orge, filtré, ordonnée et fenêtrés dans la base de données. Il est écrit pour les orges avec cinq chiffres du personnel, de sorte que l'appelant ne détient jamais plus d'une page - le sélecteur qu'il soutient sur chaque touche. Les termes sont ANDed contre une botte de foin concaténée, ce qui permet à "ana prêt" de trouver l'Ana dans le prêt; une chaîne de LIKE OUed ne peut pas, car LIKE ne correspond qu'à jointures texte. Chaque association est associée à une gauche explicite: une voie implicite de jonction est INNER en JPQL et laisser tomberait tout le monde sans département. Les cycles ne peuvent pas être exprimés dans le schéma, donc findManagerIdOf laisse l'écrivain marcher a la chaîne de rapporter un maillon à la fois avant d'accepter un gestionnaire.
· InitializerService
Donner un entraîneur à un membre de l'équipe
Ajout MANAGER-ID à Member-team-member-member-member, une auto-référence annulable pour le rapport ligne. Rien n'est remboursé: aucun manager n'est une réponse complète, les deux en haut de la et pour quiconque n'est tout simplement pas affecté. Le DROP DEFAULT est l'instruction portante, pas l'AJOUTER COLONNE et ddl-auto: mise à jour crée d'abord la colonne. Une colonne d'adhésion à un membre, dont l'id est INT8 DEFAULT single-rowid(), hérie de ce défaut à moins que l'entité pins columnDefinition, qui estamperait chaque ligne existante avec un identifiant de gestionnaire aléatoire. L'orphelin et l'auto-référence balaye les ids clairs qu'une colonne par défaut aurait déjà écrit.
· InitializerService
Ajouter DEPTS.PARENT-DEPT-ID pour les départements emboîtés
Nullable sans recharge -- null signifie niveau supérieur, ce que chaque existe Le département était et la plupart resteront. Déclaré UUID clair avec un DEFAULT DE FAULT explicite. Les départements sont au service de la clém UUID DEFAULT gen'random'uuid(), et une colonne FK qui hérite de ce qui obtient par défaut estampillés avec un parent aléatoire sur chaque rangé existant, orphelin tous et à défaut de la contrainte qui suit.
· SecurityService
Filer le département de tutelle en créant et en actualisant
DepartmentService prend maintenant sa demande DTO au lieu de huit arguments de position, de sorte que le parent rejoigne la charge utile plutôt que de devenir un neuvième d'une rangée de même type cordes. Le cadrage de l'orge sur les critères de mutation est inchangé ; la durée de la narisation du parent vérifier les vies dans le service aux côtés du garde-cycle.

Votre univers vous attend.
Commencez gratuitement en quelques minutes. Ajoutez des produits quand vous êtes prêt. Pas de migration, pas de nouvelles connexions.
Gratuit pour toujours — aucune carte de crédit requise