Aller au contenu
KAMOUniverse

Changelog

Ce qui est nouveau.

Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.

  1. · kamo-internal

    Montrez séparément chaque catégorie de stockage

    Enregistrements d'appels, messages vocaux, pièces jointes de discussion, ressources humaines et marketing chacun a une ligne propre au lieu de partager un "Documents et images" rangé avec tout ce qui se passe à vivre dans le même tableau. Deux conséquences pour les visuels. Quatorze catégories dépassent ce que Une palette catégorique peut encoder - au-delà d'environ huit, les teintes ajoutées cessent d'être séparable pour les lecteurs aveugles en couleur et devenir décoration - donc l'identité est porté par l'étiquette et la barre de partage utilise une teinte uniquement comme indice de grandeur. Et la tendance est maintenant une seule série totale plutôt qu'une pile de quatorze voies : la question à laquelle une tendance répond est "est mon stockage croissant", et quelle catégorie il Le travail de la table, ce que fait exactement le tableau.

  2. · kamo-shared-library

    Compter chaque type de fichier stocké dans sa propre catégorie

    Enregistrements d'appels, messages vocaux, pièces jointes de discussion, ressources humaines, marketing les documents, les enregistrements de réunions et tous les types de documents sont autant de lignes en imgs, distingué uniquement par ImageAssocType et tous partageant un seau, parce que L'association est des métadonnées plutôt qu'une limite de stockage. les signaler comme une une ligne unique était précise et inutile: pour une organisation de production, elle s'est cachée que 5,08 GB d'une empreinte de 5,09 GB étaient des pièces jointes au chat. Chaque association appartient maintenant à un domaine, de sorte qu'une organisation peut voir ce qui est consommer en fait son stockage plutôt qu'un total indifférencié. StorageDomainCoverageTest fait une omission une défaillance de construction: ImageAssocType doit être revendiqué par exactement un domaine - non revendiqué signifie téléchargements sont stockés et ne sont jamais facturés, réclamés deux fois, facturés deux fois. Vérifié par sonde: le retrait de HR-RESOURCE de son domaine échoue à la construction avec la raison, plutôt que de passer tranquillement. REUNIONS RÉUNIONS regroupe à la fois ses sources, la table des comptes rendus de réunion et la table d'enregistrement. Association de la réunion. MeetRecordingService n'écrit que le premier, donc ils ne se chevauchent pas.

  3. · EmailService

    Mesurer les propres boîtes aux lettres KamoMail de chaque org

    Walks chaque boîte aux lettres Kamo hôte et enregistre, par jour d'arrivée, le RFC822 octets tient des en-têtes, des éléments de base et des pièces jointes codées, à travers chaque dossier, y compris Trash and Junk, puisqu'un message dans Trash est toujours sur disque. Un aller-retour par Dossier: le fournisseur de Jakarta Mail IMAP élargit FetchProfile.Item.ENVELOPE à ENVELOPE INTERNALDATE RFC822. Ce qui compte est décidé si Dovecot a des références pour l'adresse, pas en lisant le réglage du fournisseur. La présence dans les utilisateurs virtuels est la définition de "Kamo stocke cette boîte aux lettres", alors qu'une colonne fournisseur peut être périmée, héritée d'un parent, ou d'une migration intermédiaire. Une boîte aux lettres hébergée par Microsoft ou Google produit pas d'accréditation et n'est abrégée, de sorte que son organisation n'est pas accusée. Qui cela compte vient de la propre boîte aux lettres. KamoMail n'est pas un seul Le locataire et la production ont 18 boîtes aux lettres relevant d'une organisation et 41 sous-un titre un autre, mélangés sur quatre domaines - sommant un domaine ou le maildir facturerait le courrier d'une organisation. Les adresses sont appariées en minuscules. Les chemins de la table des utilisateurs et de la maildir de Dovecot sont minuscules pendant que la table de la boîte aux lettres conserve le boîtier de la boîte aux lettres créé avec, et une inadéquation de cas ici a déjà été fractionné livraison et récupération dans deux maildirs différents. Protège également /api/interne dans son ensemble plutôt que par effet par effet d'évaluation. Le filtre nommé /api/interne/calendrier et /api/internal/lead-comms individuellement, donc le contrôleur suivant monté sous ce préfixe - celui-ci - aurait été atteignable sans secret, silencieusement et dans le sens de l'exposition. 6 nouveaux essais portant sur l'attribution, la manutention des cas et le cas non hébergé; 152 total, tous en train de passer.

  4. · InitializerService

    Schéma pour la mesure du stockage par boîte de courrier

    - cales, par boîte aux lettres et par jour d'arrivée, RFC822 octets que la boîte aux lettres tient. La comptabilité de stockage n'avait pas de source honnête pour les octets de boîte aux lettres: l'index de recherche ne couvre que les messages qui ont été indexés, et les couvre, quelle que soit la personne qui les stocke. L'ORG-ID est dénormalisé à partir de l'adresse e-mail.provider.mailboxes donc par organisation. l'agrégation est une somme indexée, et donc l'attribution reste par boîte aux lettres - plusieurs les organisations peuvent être sur KamoMail à la fois et le maildir d'un domaine peut contenir boîtes aux lettres appartenant à différentes organisations. Run contre la production 2026-08-08; tableau et index vérifiés.

  5. · kamo-shared-library

    Mesurer le courrier Kamo héberge effectivement, par boîte aux lettres

    EMAIL est à la base de l'adresse e-mail-metadata.search-index, ce qui était erroné dans les deux directions. Il a raté KamoMail entièrement - un og sur KAMO-MAIL a ses messages et les pièces jointes dans le Dovecot maildir du groupe, 62 MB de sa production, comptées comme nulles. Et il aurait facturé un organisme sur Microsoft 365 ou Google Espace de travail pour le courrier assis sur les disques de ce fournisseur, où Kamo ne contient rien mais un indice de recherche propre. - le remplace par boîte aux lettres, par jour d'arrivée, octets totaux de la RFC822 - en-têtes, corps et pièces jointes codées, qui est ce qui Occupe le maildir. Le seau de jour plutôt que par message garde la table proportionnel à jour avec courrier tout en laissant une fenêtre de facturation arbitraire être additionné exactement au lieu de mois arrondis à des mois entiers. L'attribution est par boîte aux lettres via son propre org-id, jamais par domaine et jamais par boîte maildir. KamoMail n'est pas un seul locataire: la production dispose déjà de 18 boîtes aux lettres sous un org et 41 sous un autre, en mélangeant entre quatre domaines dans un tableau. En résumé, ou le maildir dans son ensemble, facturerait un org pour un autre courrier. Schéma vérifié en production avant cet atterrissage: e-mail Il existe des jours de .mailbox-storage-days avec sa contrainte de caractère unique après une course KI.

  6. · kamo-internal

    Dites pourquoi le stockage de boîte aux lettres peut lire zéro

    Les octets de boîte aux lettres ne comptent que le courrier que Kamo héberge. Une organisation sur Microsoft 365 ou Google Workspace a ses messages sur les disques de ce fournisseur, donc sa ligne de boîtes aux lettres est légitimement 0 - ce qui, inexpliqué, se lit comme un casseur cassé nombre plutôt qu'un nombre correct.

  7. · BillingService

    Laissez un administrateur de plate-forme exécuter le balayage instantané à la demande

    Le balayage est ce qui fait des enlèvements de la période et des totaux de durée de vie pour le les domaines de suppression dure qui rendent compte du tout, donc les jours perdus à cause d'une panne sont perdus à l'initi longue, à moins que l'écart ne soit comblé. Attendre la prochaine course 04:20 n'est pas un le plan de reconstitution. Le balayage rattrape déjà 14 jours et est idempotent per (org, jour, domaine), Les appels répétés règlent plutôt que les deux nombres. Cela vient de l'exposer, derrière PlatformAdminOnly, et retourne le nombre de lignes afin que l'appelant puisse voir qu'il fonctionne.

  8. · kamo-internal

    Afficher l'utilisation du stockage sur l'onglet statistiques du compte

    L'onglet disait "Aucune donnée d'utilisation disponible pour cette période" pour chaque organisation. factingApi.getCurrentUsage() est un talon de retour et de compteurs: [, et UsageMeters rend son état vide à zéro compteur - donc le message signalait le stub, pas les données. StorageUsagePanel lit le critère réel de facturationService et affiche les deux chiffres faciles à confondre côte à côte: ce que l'organisation tient en ce moment, qui tombe lorsque les fichiers sont supprimés, et ce qu'il a ajouté sur son la durée de vie, ce qui ne le fait pas. À côté d'eux, ce qui a ému cette période, et un ventilation par domaine entre les documents, les boîtes aux lettres, les médias de la base de connaissances, la réunion enregistrements et divulgations. Lorsqu'un chiffre est un plancher plutôt qu'une mesure, il est dit - un retrait total sans instantané d'ouverture derrière lui, ou un total de durée de vie pour une zone de stockage qui durcit ses records. Une puce explique la base d'enregistrement: un organisme est a compté pour chaque fichier qu'il détient même si Kamo stocke un exemplaire par hachage. La tendance ne fait qu'exister deux jours d'histoire; un point n'est pas une tendance, et le dessiner impliquerait un historique qui n'a pas encore été recueilli. Les couleurs de la série sont l'ordre catférendaire validé - le pire CVD adjacent - E 9.1, la plus mauvaise vision normale adjacente -E 19.6 sur cette surface. Trois sit en dessous de 3:1 contraste, donc le tableau de dégradation n'est pas décoratif: c'est la lecture non colorée des mêmes données. Les rafles de sursententes de fin en bout (BillingService serialise Long via ToStringSerializer) et ne sont élargis que lorsque l'ampleur est prouvéement sûre.

  9. · BillingService

    Signaler ce qu'une organisation stocke

    L'onglet statistiques du compte a toujours dit "Aucune donnée d'utilisation disponible pour cette période", pour chaque organisation, parce que getCurrentUsage() en kimo-internal est un stub Rendement de zéro mètre et rien derrière lui n'a jamais agrégé le stockage. Sert de trois chiffres distincts par zone de stockage, plus un total: - ce que l'organisation détient en ce moment, qui tombe lorsque les fichiers sont supprimés; - ce qu'il a ajouté au cours de sa durée de vie, qui n'est pas - Ce qui a été proposé pendant la période de facturation actuelle L'enlèvement est dérivé - pas d'horodatage de table de stockage a désactivation, puisque EmbRecordState.DATE-UPDATED est in insertable - faux et ne se fomente jamais - comme ouverture - ajoutée - courant par rapport à l'instant pris d'ouverture de la période. Sans l'ouverture de l'instantané, il retombe aux ordures et se rapporte comme un au sol plutôt que de présenter une supposition en tant que mesure. La durée de vie est exacte où les rangées enlevées survivent et s'accumulent à partir d'instantanés où elles ne le font pas; qui sont lesquels, donc l'interface utilisateur peut aussi. BillingPeriodResolver préfère la période d'abonnement en direct et revient à le mois civil dans le fuseau horaire de l'organisation. Cette solution est l'ensemble de la caractéristique en production: chaque abonnement y transporte NULL current-perion-start et courant-période-fin, donc sans elle les chiffres de la période seraient vides pour chaque l'organisation qui existe - la même classe de bogue que le stub qu'elle remplace. StorageSnapshotSweep écrit la position quotidienne de l'histoire de chaque org dépend, en rattrapant jusqu'à 14 jours manqués et ensemencer un premier instantané de la requête durée de vie de sorte que le suivi ne redémarre pas à zéro. Le critère d'évaluation de la plateforme est facturé contre les octets physiquement stockés. Clients sont facturés par enregistrement; les img-dats sont en attente d'un exemplaire par hachage, mais nombre d'orgs ont Ce fichier, et les vignettes et les conversions coûtent des octets pour personne. Les deux Les lacunes sont l'économie de Kamo, donc ils sont à l'origine de la plateformeAdminOnlyse. 21 nouveaux essais, 113 au total, tous passant.

  10. · InitializerService

    Mouteur de schéma pour org-storage-snapshots

    Miroirs OrgStorageSnapshot comme DDL explicite, selon le style de la maison et ddl-auto crée le tableau en premier, donc le CREATE est un gouffre et les DAFULT SET sont ce qui le rend réellement utilisable à partir de SQL clair (Hibernate n'émet aucune colonne par défaut pour les valeurs que l'entité remplit en Java). Infime également les imgs sur (ORG-ID, DATE-CREATED) et (ORG-ID, DATE-TRASHED). Stockage l'agrégation se lit à la fois sur chaque demande sommaire et sur les indices existants. assoc- et pliage en forme de pliage. Courir contre la production 2026-08; org-storage-snapshots vérifiés avec les 16 les colonnes et sa contrainte de caractère unique avant que l'entité partage-lib n'ait été poussée.

  11. · kamo-shared-library

    Modèle d'utilisation du stockage par organisation

    Rien n'a jamais résumé le stockage par organisation. Six entités portent un octet compter par fichier, et aucun code agrégé aucun d'entre eux, c'est pourquoi le compte L'onglet stats rend "Aucune donnée d'utilisation disponible pour cette période" pour chaque organisme. Ajoute le modèle partagé dont l'agrégation a besoin: - StorageDomain - les cinq zones de stockage attribuées, chacune déclarante Sa disparition des enregistrements a-t-elle survécu? Documents et KB media soft-delete, donc a Durée de vie totale est une requête directe; boîtes aux lettres, enregistrements et divulgations la démission dure, afin que la leur ne puisse qu'accumuler en avant. OrgStorageSnapshot - une ligne par (org, jour, domaine). Il existe pour trois chiffres qui ne sont pas recouvrables après les faits: les domaines de suppression dure, la position d'ouverture selon laquelle les enlèvements de période sont Différence par rapport (pas de hoquet de table a désactivation - EmbRecordState's DATE-UPADE est insérable - faux et ne rafraîchit jamais), et une période proche nombre fixé à la fin de la période. - OrgStorageAgrégator - chaque agrégat per-domaine en une seule classe. Totals sont les suivants: additionné d'enregistrements, jamais sur des objets stockés: img'dats conserve un physique Copie par hachage, cependant, beaucoup d'orges maintiennent ce fichier, et cette sauvegarde est celle de Kamo. L'agrégateur ne porte délibérément aucun stéréotype. Tous les services fonctionnent ComponentScan("com.kamo"), donc annotant il le construireait dans tout le nombre de 40 dollars des États-Unis BillingService déclare le haricot. Ajout également les requêtes de l'index de recherche, la taille des besoins de remplissage de la taille de l'e-mail a été écrit en tant que 0 en dur depuis la création de l'index, donc le stockage de boîte aux lettres se lit comme zéro octets à l'échelle de la plate-forme jusqu'à ce que ces lignes soient réparées. Schéma vérifié en production avant cette terre: il existe des photos d'orgstorage. avec les 16 colonnes après un KamoInitializer.

  12. · InitializerService

    Déclarer la division de l'application

    Le remblai n'a jamais rempli qu'une ligne de plan qui manquait - délibérément, de sorte qu'il ne pouvait pas silencieusement déplacer un niveau - qui a laissé des applis qui n'avaient jamais été payées où qu'elles les aient mises pour la première fois. Point de vente et les outils de marketing ont fini sur Free ainsi, ce qui n'est pas ce que Free est vendu. Ancré à ce que chaque plan promet déjà sur la page des prix, donc la matrice et la copie marketing ne peut pas dériver: l'évaluation gratuite est une évaluation (CRM, chat, docs, notes, KB, calculatrice); Starter ajoute les applications a les transactions commerciales avec (soutien, commerce, commercial); Les entreprises ajoutent le lot de primes plus la téléphonie, l'inventaire et le clubhouse; Enterprise ajoute Legal. L'hébergement par courrier électronique et les deux systèmes d'origine appartiennent à à aucun niveau - le nombre de courriers électroniques est fixé par siège sur un plan, les systèmes d'origine sont négociés par prêteur. Contrairement au remblai, cela se réconcilie plutôt que de combler les lacunes, ce qui est l'intérêt d'être la source de vérité: un changement de niveau appartient ici, en revue, pas dans une édition UI, la prochaine course serait revenue. Appliqué à la prod: 11 rangées ont été changées. POS et marketing off Free, et les quatre applications inédites Ils atterrissent à niveau lorsqu'ils expédient, donc l'un d'entre eux est un flip- motion plutôt qu'un changement de données. Une deuxième série rapporte des changements nuls.

  13. · kamo-internal

    Split Apps et caractéristiques dans Disponible / Non disponible / Déprécié

    Une liste plate mixte apps propose la plate-forme avec celles qu'elle n'offre pas et qui il a pris sa retraite, l'opérateur a donc dû lire chaque puce pour les distinguer. Les seaux sont exclusifs et la dépréciation est d'abord testée: une application retirée est retraité quel que soit son drapeau de disponibilité dit encore, donc il n'apparaît que sous Déprécié. Cela fait aussi la puce "dépréciée" par rangée et la gradation redondante - chaque ligne de cet onglet est retirée - donc les deux ont disparu. Le cloisonnement lit l'état du serveur plutôt que le projet, donc le pointage déprécié changer de changement en place jusqu'à ce que les terres sauvegardées au lieu de la retirer à partir de l'édition.

  14. · SecurityService

    Catalogue d'applications lisibles par locataire pour les types de succursales

    Les applications autorisées ont commencé à charger leur liste d'applications à partir de / platform-config/app-catalog, qui nécessite un propriétaire d'organisation de haut niveau. La page hôte est fermée sur CONFIGURE-SYSTEME à la place, donc pour chaque locataire le GET 403'd: l'éditeur a rendu zéro application et le gestionnaire d'enregistrement a alors refusé d'épargner le modèle de sécurité - bloquant son nom, ses tranches d'âge, ses rôles et ses types de commerce, dont aucun impliquent le catalogue. Il a échoué pour un administrateur de KamoCRM sans est également OrganisationOwner. sert le même catalogue résolu sous CONFIGURE-SYSTEME, en tant que projection plus étroite: type, nom d'affichage, description, étape, disponible, déprécié. Pas de note d'opérateur, pas de défaut d'enum, pas de diagnostic de droit - ceux qui décrivent comment se trouve la plate-forme exécuter, et les écrits restent-propriétaires-propriétaires.

  15. · kamo-internal

    Ajouter un onglet Apps et Caractéristiques et corriger la liste des applications autorisées

    Le nouvel onglet, du droit des organisations, contrôle ce que chaque organisation est proposé: disponibilité, étape de développement, nom d'affichage, description, note de l'opérateur, et de la dépréciation. La disponibilité n'est plus dérivée de l'étape, de sorte qu'une application peut être publiée en cours de test ou bloquée après qu'elle est Finit; la scène ne conduit plus que l'insigne et la barre. Les champs dépassés sont les suivants: marqués et retournés individuellement, et la dépréciation - qui dissimule une application à chaque locataire qui l'utilise - a besoin du nom de l'application pour confirmer. Les applications autorisées dans l'éditeur de modèle de sécurité étaient un TypeScript entretenu à la main. copie de ServiceType.java, avec un commentaire demandant aux éditeurs de le garder aligné. Il avait dérivé, de manière invisible: - MLOS manquait entièrement, de sorte qu'aucun modèle de sécurité ne pouvait accorder de prêts hypothécaires. l'origine. - LOS a été étiqueté "Système d'origine de prêt de condensation" - signifie personnel prêts depuis le renommé 2026-08, donc l'éditeur a écrit un prêt personnel l'octroi d'une subvention pour un opérateur qui pensait qu'il accordait une hypothèque. - POS et ESIG ont montré la ponisation longtemps après leur expédition. L'ajout d'indicateurs de disponibilité à cette liste n'aurait fait qu'en faire confiance en toute confiance, donc il lit maintenant le même catalogue le nouveau tabulation écrit et ne peut être en désaccord avec elle. La sauvegarde est bloquée jusqu'à ce que le catalogue se charge: appConfigs builder iter le iter, donc une liste vide aurait dépouillé le les subventions du modèle.

  16. · SecurityService

    Servir le catalogue de l'application et lire les fonctionnalités à travers celui-ci

    FonctionsContrôleur dérivé "est cette application proposée" de la scène de l'enum dans quatre des lieux séparés, de sorte que la réponse ne pouvait être modifiée qu'en redéployant plate-forme. Chacun d'entre eux lit maintenant AppCatalogService, ainsi que le afficher le nom, la description et la dépréciation. La seule subtilité comportementale est la porte d'orge-racine. Il était utilisé pour lire "la scène est non COMPLÉTÉS, de sorte que les orgs pour enfants peuvent ne pas permettre cela" - le chemin de la nourriture pour chiens. Il C'est maintenant la lecture "la plate-forme n'offre pas ce qui est actuellement". Bien qu'il n'y ait pas d'annulation c'est la même phrase, parce que la disponibilité non réglée est résolue à Étape - COMPLÉTÉ. Une fois qu'un opérateur publie une application qui est encore en place TESTING, seul le nouveau formulaire fait la bonne chose: sans lui, l'application serait rester silencieusement bloqué pour chaque gig d'enfant. PlatformAppCatalogLe contrôleur est placé à l'égard des propriétaires de plus haut niveau, le même le public en tant que tabulations de la plate-forme voisine, et indique si une app est en fait dans la matrice de plans - une application sans que le plan mentionne la résolution par le réglage ouvert de défaillance plutôt que par le biais de tout ce que l'opérateur a choisi.

  17. · kamo-shared-library

    Rendre la disponibilité de l'application et la mise en scène modifiable au moment de l'exécution

    Chaque attribut que les attributs de la page des paramètres rendent le nom d'affichage, la description, stade, dépréciation - était une constante de temps de compilation dans le serviceType enum, et "Disponible" n'a pas été stocké du tout: il a été calculé comme un stade. dans l'interface utilisateur et en trois endroits côté serveur. Changer n'importe lequel de cela signifiait éditer la bibliothèque partagée et le redéploiement de la plate-forme. PLATFORM-APP-CATALOG tient une ligne par application avec chaque colonne d'annulation nullable, et AppCatalogService résout l'annulation ?? enum. Une ligne manquante signifie l'enum in extenso, donc installer cela change de comportement. La disponibilité devient sa propre valeur, ce qui rend un lancement en douceur (offert alors que toujours TESTING) ou une application COMPLETED non retenue expressible. Son repli lit l'étape RÉSOLEVÉe plutôt que celle de l'enum, de sorte qu'un opérateur ne bouge que une application à COMPLETED obtient la disponibilité sans également basculer le commutateur.

  18. · InitializerService

    Une ligne de catalogue correctement classée par application, sur chaque racine de droit

    Neuf applis - POS, outils de commercialisation, calculatrice, Club, Inventaire, Legal, Games et les deux les systèmes de création n'avaient aucune représentation du catalogue: pas de ligne de prix, pas de catégorie, pas de niveau. Douze autres ont déjà été décrits par une ligne de commercialisation, ce qui les lie et l'ajout d'un parallèle. La ligne APP aurait donné une ligne de type Service deux rangées et a fait un planFeatureInclused sur l'ordre des itérations. Le coureur converge maintenant le catalogue à la place: - lie une ligne de marketing publiée à l'application qu'elle décrit (VIDEO-CONF is Meet, MESSAGING is Chat), conserver ses valeurs de code, de nom, de catégorie et de niveau, de sorte que la matrice publiée ne bouge pas; - crée une ligne pour une application que le catalogue ne décrit pas, dans une catégorie réelle - y compris une nouvelle Commerce - Catégorie d'origine; - encourage toute appartenance antérieure à l'APPz à son identité réelle et supprime les applications plates seau une fois vide; - supprime les lignes dupliquées pour la même application, en préférant la ligne de commercialisation. Il n'y a plus de repli d'APP: chaque application a un code lisible, et les applications sont publiées. déjà nomme réutiliser ce code exact donc un og avec sa propre matrice et un sans décrire le identique. Ce signe important et nu. le rose n'a pas de matrice de commercialisation et a été laissé avec Onze rangées nommées d'après des constantes enum. MLOS et les prêts personnels sont négociés en entreprise, non par siège: prix nul, modèle de tarification FLAT, compatible uniquement avec les plans de type CUSTOM (Enterprise), regroupés en aucun niveau. Ils sont créés sur le og de plate-forme uniquement - un org de produit de marque blanche ne les revend pas, et les deux produits créés sur le signe.en rose par un passage antérieur est désactivé. Vérifié contre prod après l'exécution: 0 codes APP- restant, 0 ligne de type service-type, 21 applications sur chaque racine, 0 combinaisons plan par application non couverte, et une reprise est une non-op.

  19. · kamo-internal

    Console des organisations à serveur

    L'onglet chargeait chaque organisation en une seule demande et rendait une carte chacune, avec le dosseur ventilateur par org, puis par compte, puis par abonnement. La recherche, le tri, le filtrage et la radiomessagerie font maintenant voler côté serveur contre l'ensemble de la succession, Le coût de la page est donc plat, quel que soit le nombre d'organisations. La ligne est aussi l'objet droit maintenant. Un abonnement est HELD par un compte et CIBLES une org, donc l'ancienne carte -- à clé sur le support -- a dû imprimer le le nom de la cible à l'intérieur d'une table imbriquée, et les organisations clientes sont apparues sous forme de chaînes à l'intérieur des rangées d'autres orgs plutôt qu'en rangs. Chaque ligne a désormais droit au droit (inbound: ce qui régit cet org) et la facturation tenue (outbound: ce qu'il facture pour d'autres) sous forme de facettes séparées. Conception: un rail de statut le long du bord gauche de chaque rangée et une barre de succession proportionnelle, donc une page se lit comme un histogramme de couleur de la santé commerciale avant qu'un mot ne soit lire; chiffres tabulaires avec zéros atténués, puisque la plupart des cellules sur un lot de facturation sont nuls. L'état de la table vit dans l'URL donc une vue filtrée est linkable -- écrit par le biais d'une copie qui préserve « tab », et sans publication activeTab, qui appartient à la tabSync.

  20. · SecurityService

    Échec fermé sur les applis qu'un plan ne mentionne jamais

    Rend kamo.entitlement.fail-open off now que l'AppEntitlementCatalogMigration s'est arrêté Prod et tout plan actif sur les racines des deux droits (KamoCRM, Sign Pink) sont explicites ligne pour les 21 applications non-core et les combinaisons de plan par appli non couvertes vérifiées, donc il y a Il ne reste plus rien pour un déni par défaut d'attraper, à l'exception d'une application vraiment non-évaluée. Cela ne change rien à ce que n'importe quelle org peut utiliser aujourd'hui: les applications expédiées sont explicitement incluses, et MLOS et l'application de prêt personnel ont déjà été refusées par explicite estInclused-false rows, qui se lient indépendamment de ce drapeau. Ce qu'il ferme, c'est une application glissant à travers non-évaluée par l'absence d'apparition dans la matrice d'un plan. Retournez à vrai si une nouvelle racine de droit est ajoutée avant que la migration ne s'y soit présentée.

  21. · BillingService

    Servir le répertoire de l'orge sous la forme d'une page filtrée, triée, paginée

    GET /orgs prend page/size/q/sort/dir plus sept filtres et retourne la maison enveloppe de page avec des agrégats à l'échelle du domaine. GET/orgs/-orgId- sert des services de détail pour le tiroir de perçage de la console, où le ventilateur percompte est très bien parce que il est lié à un org. listAllOrgs() est remplacé plutôt que gardé en tant que délégué trompé: il avait exactement un appelant (ce contrôleur), et la liste de l'avant-gardeOrgs() avait exactement un (l'onglet étant réécrit), donc une calité de compatibilité n'aurait seulement ajouté un risque de truncation silencieux avec rien en fonction.

  22. · BillingService

    Hydroisation de page battue à un nombre constant de requêtes

    Titres de parents, domaine principal, plan/marché à l'origine du droit et le drapeau de catalogue d'abonnement sont chacun d'entre eux (:ids) groupés sur toute la page, donc une page de 100 rangs coûte les mêmes six déclarations qu'une page à 1 rangée. L'essai affirme que l'égalité directement - la mise en œuvre qui remplacerait la notation 6 contre 600. L'abonnement directeur est choisi par EntitlementModeResolver, le même code qui a décidé du mode ligne, donc le plan indiqué appartient toujours à l'état montrés. Les requêtes passent par EntityManager plutôt que par de nouvelles méthodes de dépôt. la bibliothèque kamo-shared, dont tout service dépend, n'a pas à changer.

  23. · BillingService

    DTO de ligne/page de répertoires et dépôt de requêtes natives

    PlatformOrgRow porte les deux facettes séparément: droit (sous-sorités entrants le ciblage de l'ordonnance - ce qui le régit) et la facturation détenue (comptes que l'organisation est propriétaire -- non-zéro uniquement pour l'og de plate-forme et les revendeurs). Les agrégats décrivent le ensemble filtrés, pas la page, donc la bande KPI ne change pas de sens comme les pages de l'opérateur. Chaque valeur de conducteur est mise sous l'empressement du numéro/Boolean plutôt que de le faire: a coalesce(...,0) qui ne correspond à aucune ligne renvoie entier où la même colonne avec Les rangées reviennent Long, qui passerait en dev et lancerait en prod. L'argent traverse le fil en tant que cordon décimale.

  24. · BillingService

    Org Directory SQL avec des ETC par facette

    Comptes détenus, abonnements entrants, membres, preneurs de licence et enfants chacun agrégez-vous dans leur propre CTE avant d'être unis à des questions d'ordre. Les rejoindre en un seul 10s passer multiplierait les lignes et gonflerait chaque SUM. Épreints purs et soumis à l'unité (26 tests): non ':' mous, chaque valeur liée, clés de tri sur liste blanche par OrgSort. Deux choses, les tests s'enclenchent parce qu'ils sont faciles à "tidy" en bugs -- ORDER BY et les prédicats dérivés (mode-rank, has-tripe) doit nommer les colonnes projetées du CCE de base, étant donné que l'alias "o" est hors de portée dans la requête extérieure; et un essai de PENDING ne fait état d'aucune date limite plutôt que de la dernier a expiré. Vérifié par rapport au groupe vivant: les deux instructions exécutent, le compte convient avec les lignes, et les filtres/agrégats s'appliquent. L'utilisation de l'index n'est PAS démontrée. à 12 orgs / 9 sous-s) CockroachDB full-scanne, indépendamment, correctement.

  25. · BillingService

    Demande d'annuaire d'orgage validée et serrée

    Les pinces de taille à [1,100) et un tri non reconnu retombent au titre, donc a URL édité à la main ne peut ni demander l'ensemble de la succession ni atteindre le SQL comme texte libre. L'OrgSort enum est la liste blanche.

  26. · BillingService

    Mode d'octroi de la plus-cour pour les moyens de déterminer par un résolveur partagé et déterministe

    TrialAdminService a choisi son abonnement d'essai avec findFirst() sur un liste non ordonnée, de sorte qu'un ing organisateur tenant à la fois un procès en attente et un procès en cours pourrait noter l'un ou l'autre. Le prochain répertoire d'organisation doit trier et filtrer cet état, et une requête ne peut pas reproduire une règle non déterministe. La préséance en vit aujourd'hui dans des essais en direct, des gains actifs sur les victoires en attente à l'expiration, et l'expiration active Il est indiqué que le statut() est le dernier. status() conserve sa forme exacte de réponse. Premiers essais dans ce repo (11).

  27. · InitializerService

    Lignes d'allocation de recharge dans le catalogue du plan de la plate-forme

    Le droit se résout maintenant sur une colonne type service-type typée, mais aucune ligne de catalogue n'a été portée une, de sorte que chaque plan est toujours résolu à "tout ce qui est inclus" via le défaut d'ouverture en panne. Ces graines le matrice de sorte kamo.entitlement.fail-open peut éventuellement être éteint sans applications de tir foncé. - AppEntitlementCatalogMigration (-Order(51), after PlatformOwnerPlanSeeder): idempotent Remplissage. Crée une catégorie de fonctionnalité «Applications» avec une ligne BOOLEAN par application non-core lié à son serviceType, reblète toute ligne préexistante qui a le code mais non serviceType, et insère les lignes de plan à app-up manquantes par niveau. Insérer si l'on ne vote qu'en cas de bruit il ne supprime jamais et n'écrase jamais celui d'un opérateur est inclus, donc un niveau édité dans le L'UI survit aux redémarrages. Rebonne également l'existant VIDÉO-CONF / AI-ASSISTANT / HR-SYSTEME / ESIGNATURES / Add-ons EMAIL-HOSTING, qui n'accordaient rien. - KamoCRMPricingLoder: même matrice pour un nouveau cluster. Les lignes app sont ajoutées à l'intérieur upsertFeatures plutôt que écrite en une seconde, parce que upsertPlanFeatures supprime le Les lignes de plan avant d'insérer - un deuxième appel essuyerait silencieusement la matrice de commercialisation. Note ce chargeur est désactivé (retour précoce, et son appel DataLoader est commenté), qui est La migration ci-dessus est la voie de production.

  28. · SecurityService

    Prêt hypothécaire et prêts personnels verticaux sur les prestations d'application

    Un marché MORTGAGE est apparu sur /commerce chaque fois que POS se déroulait, quelle que soit l'application MLOS, et /caractéristiques/activation n'avait aucune vérification de facturation du tout - le cadenas dans les paramètres UI était présenté Seulement, donc un POST direct a activé une application non nitrée. - Fonctionneur: 403 en mode autorisation lorsque le plan n'inclut pas l'application; sérialiser un Le verdict "égréable" sur les deux fonctionnalités et disponibles, de sorte que le cadenas de l'UI et le 403 sont calculés par le même service et ne peuvent être en désaccord. - CommerceMarketController: GET/garant-types pour le sélecteur de type marché (liste d'autorisation modèle) recoupé avec le droit); la liste du marché laisse tomber des verticales incontrôlées - cachées, jamais archivé, donc la restauration du plan ramène le marché avec ses données intactes. - - garde-foui par défaut au-dessus de chaque sous-route. AppAvailabilityInterceptor ne peut pas exprimer cette carte de préfixe est un préfixe à un ServiceType et/ou les marchés du commerce desservent les sept verticales dans le cadre du POS. - POSController: les appelants publics du catalogue d'abonnement ne voient plus les lignes liées à une application qui n'a pas été atteint, donc déplacer un type de service à COMPLETED est ce qui le publie pour le site de commercialisation. Les appelants internes voient encore tout pour le prixr à l'avance. - Hypothèse vertesResolver: préparation mesurée POS uniquement, donc un gisement qui n'a jamais acheté MLOS encore lire comme prêt; il rapporte maintenant MLOS en "manquant" aussi.

  29. · kamo-internal

    Renommer LOS en MLOS, ajouter Personal Loan Origination System, gate trade verticals

    L'onglet Apps montre maintenant "Commerce: Mortgage Loan Origination System" (le titre est servi à partir du backend enum, pas le rétroviseur TS) et un nouveau "Commerce: Personal Loan Origination System" sous Non disponible. Les marchés MORTGAGE et PERSONNAL-LOANS sont fermés sur leur application. - Finmirs AppType/ServiceType: MLOS(14) et nouveau LOS(25); fixe également la dérive préexistante où les miroirs n'étaient pas d'accord avec le Java enum. - Organisation : isMlos ajouté; isLos signifie maintenant prêts personnels. is Los n'avait plus de consommateurs. - FeaturesManager: le portrait indique le drapeau "éligé" fourni par le serveur. Il a été reconstruit côté client de factureApi, dont getCurrent Subscription lancers et getnavailablePlans retours [- (légitimes) stubs), donc chaque application a silencieusement résolu à "unged" et aucun cadenas n'a jamais été rendu. - Sélecteurs de marché : les pages de création et d'édition étaient détenues par leur propre tableau COMMERCE-TYPES codifié en caractères gras; ils rendent maintenant GET - donc une verticale que l'orge n'a pas acheté est non sélectionnables. La page d'édition avait également sauté la règle du seul MONTIGAGE-par or. Il maintient le type actuel du marché peut être sélectionné de sorte qu'une orgée caduque peut toujours l'ouvrir et le renommer. - Sur les surfaces des fixations d'hypothèques, la grille estMlos plutôt que isPos.

  30. · kamo-shared-library

    Résoudre le droit à l'application par ServiceType; rebaptiser LOS en MLOS

    Droit résolu ServiceType.name() contre Les codes du catalogue sont des codes de commercialisation (États-Unis, VIDÉO-CONF, HR-SYSTEM, ...) et n'ont jamais été mis en correspondance, Donc planFeatureInclidd par défaut de la ligne a accordé chaque application sur chaque plan et la facturation à l'application le lien était inerte. Les lignes de catalogue portent maintenant un type de service nullable tapé et la résolution passe Donc une application peut être renommée sans déplacer le droit. - colonne type service-type (persistée en tant qu'id). - Dérive par ServiceType; ajouts d'honneur via n'ont pas encore été lus et jsonb; comportement de la ligne manquante derrière kamo.entitlement.fail-open (défaut vrai jusqu'à ce que la matrice de catalogue soit ensemencée). - SubscriptionService: transporter serviceType par create/update/DTOs, et dériver des caractéristiques à partir du nom lorsqu'il est omis - le dialogue des paramètres n'en a jamais envoyé un, de sorte que chaque création à partir du L'UI touche la contrainte NOT NULL. - CommerceType: lier chaque verticale à l'application requise (MORTGAGE-zMLOS, PERSONNEL-LOANS-LOS). - AppliedModelEnforcementService: getAllowedCommerceTypes coupe le modèle de sécurité liste d'autorisations avec droit; assertCommerceTypeTlowed couvre déjà créer et éditer. - Type de service: LOS - MLOS gardant l'id 14 (ORG-FEATURES persiste l'id, pas le nom, donc non migration des données); nouvelle LOS(25) pour les prêts personnels - id 25 parce que la réutilisation de 14 serait réaffectée chaque ligne hypothécaire existante. - RoleRightType: rebond MLOS, ids 139-144 inchangé; prêt personnel LOS ajouté à 190-195. - PhiModule.PLOS ajouté: le rebaptisé l'application de prêt personnel mappée à l'hypothèque PHI module et hypothèque non cartographiés, qui ont compilé le nettoyage.

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