Saltar al contenido
KAMOUniverse

Changelog

Qué hay de nuevo.

Cada mejora de la plataforma, a medida que se envía.

  1. · kamo-internal

    Mostrar cada categoría de almacenamiento por separado

    Grabaciones de llamadas, mensajes de voz, archivos adjuntos de chat, recursos de recursos humanos y marketing los materiales cada uno consigue su propia línea en lugar de compartir uno "Documentos e imágenes" fila con todo lo demás que vive en la misma mesa. Dos consecuencias para las imágenes. Catorce categorías superan lo que paleta categórica puede codificar más allá de las ocho, los llanos añadidos dejan de ser separables para los lectores de color-cieo y convertirse en decoración - por lo que la identidad es llevado por la etiqueta y la barra de acciones utiliza un tono puramente como una señal de magnitud. Y la tendencia es ahora una sola serie total en lugar de una pila de catorce vías: la pregunta de que las respuestas de tendencia son "el crecimiento de mi almacenamiento", y qué categoría Crecer en el trabajo de la mesa, lo que la mesa hace exactamente.

  2. · kamo-shared-library

    Cuenta cada tipo de archivo almacenado como propia categoría

    grabaciones de llamadas, mensajes de voz, archivos adjuntos de chat, recursos de recursos humanos, marketing materiales, grabaciones de reuniones y todo tipo de documentos son todas filas en imgs, distinguir sólo por ImageAssocType y todos compartiendo un cubo, porque la asociación es metadatos en lugar de un límite de almacenamiento. Detiéndolos como a Una línea única era precisa e inútil: para una organización de producción se escondió que 5,08 GB de una huella de 5,09 GB fue chat adjuntos. Cada asociación ahora pertenece a un dominio, para que una organización pueda ver lo que es En realidad consumiendo su almacenamiento en lugar de un total indiferenciado. StorageDomainCoverageTest hace que una omisión sea un fracaso de construcción: cada ImageAssocType debe ser reclamado por exactamente un dominio - cargas de los medios no reclamados se almacenan y nunca facturados, reclamados dos veces significan dos veces facturados. Verificado por sonda: eliminar la HR-RESOURCE de su dominio falla la construcción con la razón, en lugar de pasar en silencio. REUNION-RECORDINGS suma tanto sus fuentes, la mesa de las grabaciones de la reunión y la Asociación MEET-RECORDING. MeetRecordingService escribe sólo el primero, así que no se solapúen.

  3. · EmailService

    Mide los buzones KamoMail de cada org

    Pasee cada buzón Kamo anfitrión y registra, por día de llegada, el RFC822 lo apesta sostene encabezados, cuerpo y accesorios codificados, a través de cada carpeta, incluyendo Basura y basura, ya que un mensaje en la Papelera sigue en el disco. Un viaje de ida y vuelta por carpeta: el proveedor de Jakarta Mail IMAP amplía FetchProfile.Item.ENVELOPE a ENVELOPE INTERNALDATE RFC822.SIZE, así que la fecha de tamaño y llegada llegan juntos. Lo que cuenta se decide si Dovecot tiene credenciales para la dirección, no leyendo la configuración del proveedor. Presencia en los usuarios virtuales ES la definición de "Kamo almacena este buzón", mientras que una columna del proveedor puede ser rancio, heredado de un padre, o de la mediana migración. Un buzón alojado por Microsoft o Google rinde sin credenciales y se salta, así que a su organización no se le cobra nada. Para quién cuenta proviene del propio orgánid de cada buzón. KamoMail no es un solo La producción de inquilinos tiene 18 buzones bajo una sola organización y 41 bajo otro, mezclado en cuatro dominios, sumando un dominio o el correodir Billete una organización por el correo de otro. Las direcciones se igualan. Las rutas de la mesa de usuario y el correo de Dovecot son minúscula mientras que la tabla del buzón mantiene cualquier carcasa que se creó el buzón con, y un desajuste de casos aquí ya ha dividido la entrega y recuperación en dos correos diferentes. También protege /api/internal en su conjunto en lugar de endpoint por endpoint. El filtro llamado /api/internal/calendario y /api/internal/lead-comms individualmente, para que el siguiente controlador montado bajo ese prefijo este habría sido alcanzable sin secreto, silenciosamente y en la dirección de la exposición. 6 nuevas pruebas que abarcan la atribución, la tramitación de casos y el caso no albergado; 152 Total, todo de paso.

  4. · InitializerService

    Esquema para medición de almacenamiento por buzón

    **************** hold, por buzón y por día de llegada, el RFC822 bytes que el buzón está sosteniendo. La contabilidad de almacenamiento no tenía una fuente honesta para bytes buzón: el índice de búsqueda cubre sólo los mensajes que fueron indexados, y los cubre independientemente de quién los almacene. ORG-ID se desnormaliza desde email-provider.mailboxes por lo que por organización la agregación es una suma indexada, y por lo tanto la atribución se queda por buzón de varios organizaciones pueden estar en KamoMail a la vez y el correo de un dominio puede sostenerse buzones pertenecientes a diferentes organizaciones. Corre contra la producción 2026-08-08; tabla e índices verificados.

  5. · kamo-shared-library

    Mide el correo Kamo en realidad alberga, por buzón

    EMAIL se originó en email.metadata.search.index, que estaba equivocado en ambos direcciones. Se perdió KamoMail por completo, un org en KAMO-MAIL tiene sus mensajes y accesorios en el propio correo de Dovecot del cúmulo, 62 MB de él en producción, contado como cero. Y habría cargado un org en Microsoft 365 o Google Espacio de trabajo para el correo sentado en los discos de ese proveedor, donde Kamo no tiene nada pero un índice de búsqueda propio. **************** lo reemplaza: por buzón, por día de llegada, total de RFC822 bytes - cabeceras, cuerpo y accesorios codificados, que es lo que ocupa el maildir. Cubo de día en lugar de por mensaje mantiene la mesa proporcional a los días-con-mail mientras se dejaba una ventana de facturación arbitraria ser resumido exactamente en lugar de redondeado a meses enteros. La atribución es por buzón a través de su propio org-id, nunca por dominio y nunca por maildir. KamoMail no es un solo inquilino: la producción ya tiene 18 buzones bajo un org y 41 bajo otro, se mezclaron en cuatro dominios en una tabla. Resumir un dominio, o el maildir en su conjunto, facturaría una org para otra Correo. Esquema verificada en la producción antes de que esta tierra: email-provider Los días de .mailbox.storage existen con su limitación de singularidad después de una carrera KI.

  6. · kamo-internal

    Di por qué el almacenamiento del buzón puede leer cero

    Los bytes de Mailbox solo cuentan el correo que Kamo realmente alberga. Una organización en Microsoft 365 o Google Workspace tiene sus mensajes en los discos de ese proveedor, por lo que su fila de Mailboxes es legítimamente 0 que, inexplicable, se lee como una rota número en lugar de uno correcto.

  7. · BillingService

    Deja que un administrador de plataforma ejecute la instantánea barrer bajo demanda

    El barrido es lo que hace que las eliminaciones de períodos y los totales de por vida para el dominios de eliminación dura que responden en absoluto, por lo que los días perdidos por un apagón se pierden permanentemente a menos que el huebo se llene. Esperar la próxima carrera 04:20 no es un Plan de recuperación. El barrido ya alcanza 14 días y es idempotente per (org, día, dominio), Así que las llamadas repetidas se resuelven en lugar de doble conteo. Esto sólo lo expone, detrás PlatformAdminOnly, y devuelve la fila conte para que el llamante pueda verlo funciado.

  8. · kamo-internal

    Mostrar el uso de almacenamiento en la pestaña de las estadísticas de la cuenta

    La pestaña decía "No hay datos de uso disponibles para este período" para cada organización. billarApi.getCurrentUsage () es un trozo que regresa a metros: [] , y UsageMeters hace su estado vacío a cero metros, por lo que el mensaje estaba informando de la talla, no los datos. StorageUsagePanel lee el verdadero variable BillingService y muestra los dos figuras fáciles de combinar lado a lado: lo que la organización sostiene Ahora mismo, que cae cuando se eliminan los archivos, y lo que ha añadido sobre su toda la vida, que no. Junto a ellos, lo que movió este período, y un desglose por dominio en documentos, buzones, medios de comunicación de base de conocimiento, reunión grabaciones y revelaciones. Donde una figura es un piso en lugar de una medición, lo dice una eliminación total sin instantánea de apertura detrás de él, o un total de por vida para una zona de almacenamiento que deletrea sus registros. Un chip explica la base del registro: un org es contado para cada archivo que contiene a pesar de que Kamo almacena una copia por hash. La tendencia sólo hace que existan dos días de historia; un punto no es una tendencia, Y dibujarla implicaría una historia que aún no se ha recogido. Los colores de la serie son el orden categórico validado. peor de la visión normal adyacente E 19.6 en esta superficie. Tres se sitúan por debajo de 3:1 contraste, por lo que la tabla de avería no es decorativa: es la lectura no color de los mismos datos. Los conteos de byte se quedan con las cuerdas de extremo a extremo (BillingService serializa Long via ToStringSerializer) y sólo se amplían donde la magnitud es probablemente segura.

  9. · BillingService

    Reporte lo que una organización está almacenando

    La pestaña de estadísticas de cuenta siempre ha dicho "No hay datos de uso disponibles para este período", por cada organización, porque getCurrentUsage() en kamo-internal es un témpast Volviendo cero metros y nada detrás de él nunca agregado almacenamiento. Sirve tres figuras distintas por área de almacenamiento, más un total: - lo que la organización sostiene en este momento, que cae cuando los archivos se eliminan - lo que ha añadido a lo largo de su vida, que no - lo que se movió durante el actual período de facturación La eliminación se deriva sin tiempo de tabla de almacenamiento semplifica una desactivación, desde EmbRecordState.DATE-Actualizado es insertable=false y nunca refresca apertura añadida - actual contra la instantánea de apertura del período. Sin no. primera vez instantánea cae de nuevo a las marcas de tiempo de basura y se informa a sí mismo como un piso en lugar de presentar una conjetura como una medida. La vida es exacta donde Retiran filas y se acumulan de instantáneas donde no; ambas Digamos cuáles son, para que la IU también pueda. BillingPeriodResolver prefiere el periodo de una suscripción en vivo y vuelve a el mes calendario en la zona horaria del org. Esa caída es toda la característica en producción: cada suscripción de allí lleva NULL current.period.start y corriente. período.end, así que sin él las cifras de período estarían vacías para cada organización que existe - la misma clase de error que el talón que reemplaza. StorageSnapshotSweep escribe la posición diaria de la historia de cada org depende, ponerse hasta 14 días perdidos y sembrar una primera instantánea de lo consultable vida para que el seguimiento no se reinicie en cero. Los informes de endpoint de la plataforma facturaron contra bytes físicamente almacenados. Clientes son facturados por registro; img-dats tiene una copia por hach hech independientemente de lo que tengan muchos orgs ese archivo, y miniaturas y conversiones cuestan bytes nadie está facturado. Ambos Las brechas son la economía de Kamo, así que se sientan detrás de la plataforma de "PlatformAdminOnly". 21 nuevas pruebas, 113 en total, todas pasajeras.

  10. · InitializerService

    Corredor de escásto para las instantáneas de org.storage.snapshots

    Espejos OrgStorageSnapshot como explícito DDL, al estilo de la casa . ddl-auto crea la tabla primero, por lo que el CREATE es un retroceso y los SET DEFAULTs son lo que realmente lo hacen utilizable de SQL llano (Hibernate no emite ninguna columna por defecto para valores que la entidad rellena en Java). También indice insinúe (ORG-ID, FECHA-CREATED) y (ORG-ID, FECHA-TRASHED). Almacenamiento la agregación se lee tanto en cada solicitud resumida como en los índices existentes. assoc- y forma de carpeta. Corre contra la producción 2026-08-08; orgóstorage.snapshots verified con los 16 columnas y su limitación de singularidad antes de que la entidad compartida fuera empujada.

  11. · kamo-shared-library

    Modelo de uso de almacenamiento por organización

    Nada ha resumido nunca el almacenamiento por organización. Seis entidades llevan un byte contar por archivo, y ningún código agregado ninguno de ellos, por lo que la cuenta La pestaña estadísticas renders "No hay datos de uso disponibles para este período" para cada org. Añade el modelo compartido que la agregación necesita: - StorageDomain - las cinco áreas de almacenamiento org-atributable, cada declarando si sus registros eliminados sobreviven. Documentos y KB media de subordo suave, así que un total de toda la vida es una consulta recta; buzones, grabaciones y revelaciones duro-bordo, para que los suyos sólo puedan acumularse hacia adelante. - OrgStorageSnapshot , una fila por (org, día, dominio). Existe para tres. cifras que no son recuperables después del hecho: totales de por vida para el dominios de eliminación dura, la posición de apertura de que se eliminan el período diferenciado de contra (sin tablas de la tabla se desactiva una desactivación de EmbRecordState's FECHA-Embarefacto es insertable=false y nunca se refresca), y un período-cierre Número fijado cuando terminó el período. - OrgStorageAggregator . cada agregado pordominio en una clase. Totales son sumeder sobre los registros, nunca sobre los objetos almacenados: imgádats mantiene un físico Copiar por hash sin importar cuántos orgs sostengan ese archivo, y ese ahorro es de Kamo. El agregador deliberadamente no lleva estereotipo. Todos los servicios se ejecutan "ComponentScan"(com.kamo"), por lo que anotarlo lo construiría en total 40 de BillingService declara el frijol. También añade las consultas del índice de búsqueda que el tamaño de correo electrónico necesita backfill. tamaño.bytes fue escrito como un codificado duro 0 desde que se creó el índice, por lo que el almacenamiento de buzones Lee como cero bytes de plataforma hasta que esas filas sean reparadas. Esquema verificado en la producción antes de que esto aterrizara: existen las instantáneas de orgstorage con las 16 columnas después de una carrera KamoInitializer.

  12. · InitializerService

    Declarar la aplicación **************** separación de la aplicación

    El relleno sólo llenó una fila de plan que faltaba deliberadamente, por lo que no podía en silencio mover un nivel que dejó aplicaciones que nunca habían sido precios valoradas dondequiera que las pusiera por primera vez. Punto de venta y las herramientas de marketing terminaron en Libre de esa manera, que no es lo que se vende Free. Anclado a lo que cada plan ya promete en la página de precios, por lo que la matriz y la copia de marketing no puede derivar: Free is evaluation (CRM, chat, docs, notas, KB, calculadora); Starter añade las aplicaciones a negocios con (apoyo, comercio, marketing); Business añade el conjunto premium más telefonía, inventario y casa club; Enterprise añade Legal. El alojamiento de correo electrónico y los dos sistemas de originación pertenecen a no nivel de correo electrónico tiene un precio por asiento en cualquier plan, los sistemas de originación se negocian por prestamista. A diferencia del relleno esto reconcilia en lugar de llenar vacíos, que es el punto de ser la fuente de verdad: un cambio de nivel pertenece aquí, en revisión, no en una edición de IU la siguiente carrera volvería. Aplicado a la marcha: 11 filas cambiadas. POS y Marketing off Free, y las cuatro aplicaciones inéditas dadas la En el momento en el que aterrizarán cuando se envíen, por lo que publicar uno es una voltereta en lugar de un cambio de datos. Una segunda carrera reporta cero cambios.

  13. · kamo-internal

    Split Apps & Características en Disponible / No disponible / Deprecated

    Una lista plana apps mixtas que la plataforma ofrece con otras que no y otras se ha retirado, por lo que el operador tuvo que leer cada chip para diferenciarlos. Los cubos son exclusivos y la deprecación se prueba primero: una aplicación jubilada es retiró lo que su bandera de disponibilidad todavía dice, por lo que aparece sólo bajo Depreciado. Eso también hace el chip "Deprecated" por fila y la oscuridad Cada fila en esa pestaña está jubilada, así que ambos se han ido. Particionar lee el estado del servidor en lugar del borrador, así que marca la deprecación interruptor deja la fila en su lugar hasta que la salvaza tierras en lugar de sacarla de debajo de la edición.

  14. · SecurityService

    Un catálogo de aplicaciones legibles por inquilino para Tipos de Sucuras

    Tipos de sucursal ----Aplicas permitidas comenzaron a cargar su lista de aplicaciones desde /plataform-config/app-catalog, que requiere un dueño de org de alto nivel. La página de host está cerrada en CONFIGURE-SYSTEM en su lugar, por lo que para cada inquilino el GET 403'd: el editor hizo cero aplicaciones y el manejador de salvas se negó a guardar el modelo de seguridad en todos los que se bloquean su nombre, rangos de edad, roles y tipos de comercio, ninguno de los cuales involucrar el catálogo. Fracasó para un administrador de KamoCRM sin esOrganizationOwner también. **************** sirve el mismo catálogo resuelto bajo CONFIGURE-SYSTEM, como Proyección deliberadamente más estrecha: tipo, nombre de visualización, descripción, etapa, disponible, depreciado. No hay nota de operador, no enum defaults, ni diagnósticos de derechos. Corre, y los escritos se quedan solos con la plataforma.

  15. · kamo-internal

    Añade una pestaña Aplicaciones y características y arregla la lista de aplicaciones permitidas

    La nueva pestaña, a la derecha de las Organizaciones, controla lo que toda organización se ofrece: disponibilidad, etapa de desarrollo, nombre de visualización, descripción, un nota de operador y depreciación. La disponibilidad ya no se deriva de la etapa, por lo que una aplicación se puede publicar mientras todavía está en pruebas o retenidas después de que se encuentra Terminada; la etapa ahora conduce sólo la insignia y el bar. Campos molestos están marcados y reenviados individualmente, y deprecación que esconde una aplicación de Cada inquilino que lo usa necesita el nombre de la aplicación mecanografiado para confirmar. Aplicaciones permitidas en el editor de modelo de seguridad era un tipo descriptpt mantenido a mano copia de ServiceType.java, con un comentario pidiendo a los editores que la mantengan alineada. Había ido a la deriva, invisiblemente: - Faltaba totalmente MLOS, para que ningún modelo de seguridad pudiera conceder la hipoteca origen en absoluto. - LOS fue etiquetado como "Sistema de la Denominación de Préstamo de Mamabilidad" - significa personal préstamos desde el reno 2026-08-08, por lo que el editor escribió un préstamo personal subvención para un operador que pensaba que estaba concediendo hipoteca. - POS y ESIG mostraron PLANNING mucho después de que se enviaron. Añadir los indicadores de disponibilidad a esa lista sólo lo habrían hecho con confianza equivocada, por lo que ahora lee el mismo catálogo que la nueva pestaña escribe y no no está de acuerdo con ello. El ahorro se bloquea hasta que el catálogo se carga: cada appConfigs builder lo iterates, por lo que una lista vacía habría despojado de la las subvenciones del modelo.

  16. · SecurityService

    Sirviar el catálogo de aplicaciones y leer las funciones a través de ella

    Caracterista derivado "es esta aplicación ofrecida" de la etapa de enum en cuatro lugares separados, por lo que la respuesta sólo podía ser cambiada redistejando el plataforma. Cada uno de ellos ahora lee AppCatalogService, junto con el nombre, descripción y deprecación. La única sutileza conductual es la puerta root-org. Solía leer "etapa es no COMPLETO, por lo que los niños orgs pueden no permitir esto" - el camino de comida para perros. Es Ahora se lee "la plataforma no ofrece esto". Aunque no hay anulación existen esas son la misma sentencia, porque la disponibilidad no fija se resuelve para Escenario == COMPLEADO. Una vez que una operadora publica una aplicación que aún está en TESTING, sólo la nueva forma hace lo correcto: sin ella la aplicación lo haría permanecer en silencio bloqueado para cada niño org. PlatformAppCatalogController está cerrada a los dueños de primer nivel, los mismos audiencia como pestañas de la plataforma vecina, y informa si hay disponible La aplicación está realmente en la matriz del plan. una aplicación que ningún plan menciona las resoluciones a través de el ajuste de falla en lugar de a través de cualquier cosa que el operador eligió.

  17. · kamo-shared-library

    Haz la disponibilidad de aplicaciones y la etapa editable en tiempo de ejecución

    Cada atributo la página de configuración de las aplicaciones renderiza el nombre de la pantalla, descripción, etapa, la depreciación fue una constante de tiempo de compilación en el ServiceType enum, y "Disponible" no se almacenó en absoluto: se derivó como etapa == COMPLEDO en la interfaz de usuario y en tres lugares lado servidor. Cambiar de nada significaba editar la biblioteca compartida y la redistribuyencia de la plataforma. PLATFORM-APP-CATALOG tiene una fila por app con cada columna de anulación nullable, y AppCatalogService resuelve anular ?? enum. Una fila perdida significa el enum literalmente, así que instalar esto no cambia ningún comportamiento. La disponibilidad se convierte en su propio valor, que es lo que hace un lanzamiento suave (ofrecido mientras todavía TESTING) o una aplicación COMPLETED retenida expresiva. Su caída Lee la etapa RESOLVED en lugar de la enum, por lo que un operador que solo se mueve una aplicación para COMPLETED consigue disponibilidad sin también voltear el interruptor.

  18. · InitializerService

    Una fila de catálogo debidamente categorizada por app, en cada raíz de derecho

    Nueve aplicaciones POS, Marketing Tools, Calculator, Club, Inventory, Legal, Games y ambos Sistemas de originación no tenían representación de catálogo en absoluto: sin fila de precios, sin categoría, sin nivel. Otras doce ya fueron descritas por una fila de marketing, tan vinculantes y añadiendo un paralelo La fila de APP-* habría dado un ServiceType dos filas y hecho planFeatureIncluded depende de Orden de iteración. El corredor ahora converge el catálogo en su lugar: - une una fila de marketing publicada a la aplicación que describe (VIDEO-CONF is Meet, MESSAGING is Chat), mantener su código, nombre, categoría y valores de nivel para que la matriz publicada no se mueva; - crea una fila para una aplicación que el catálogo no describe, en una categoría real, incluyendo un nuevo Categoría de comercio y origen; - promueve cualquier marcador de posición anterior de APP* a su verdadera identidad y elimina el piso Aplicaciones cubo una vez vacío; - elimina las filas duplicadas para la misma aplicación, prefiriendo la fila de marketing. No queda ningún retroceso de APP: cada aplicación tiene un código legible, y las aplicaciones el catálogo publicado ya nombres reutilizar ese código exacto por lo que un org con su propia matriz y uno sin describir el el mismo producto de manera idéntica. Eso importaba . signo.pink no tiene matriz de marketing y se quedó con Once filas que llevan el nombre de enum constantes. MLOS y Préstamos Personales son empresa-negociados, no por asiento: precio nulo, modelo de precios FLAT, compatible sólo con los planos tipo CUSTOM (Enterprise), agrupados en ningún nivel. Se crean en el plataforma org solamente - un org de marca blanca no los revende, y los dos creados en letic.pink por un pase anterior se desactivan. Verificados contra la marcha después de ejecutar: 0 códigos APP* left, 0 duplicado service-type filas, 21 apps on cada raíz, 0 descubiertas combinaciones plan-por-app, y una repetición es un no-op.

  19. · kamo-internal

    Consola de organizaciones consola de las organizaciones apagadas

    La pestaña cargó cada organización en una sola solicitud y entregó una tarjeta cada una, con el ventilador de soporte por org, luego por cuenta, luego por suscripción. Búsqueda, ordenar, filtrar y paging ahora ejecute el lado del servidor contra toda la finca, Así que el costo de la página es plano sin importar cuántas organizaciones existan. La fila es también el objeto correcto ahora. Una suscripción es HELD por cuenta y TARGETS an org, por lo que la vieja tarjeta - llaveda en el titular - tuvo que imprimir el el nombre de target dentro de una mesa anidada, y los orgs del cliente aparecieron como cuerdas dentro de otras filas de orgs en lugar de como filas. Cada fila ahora lleva derecho (entrada: lo que gobierna este org) y la facturación mantenida (salida: para qué se factura otros) como facetas separadas. Diseño: un carril de estado en el borde izquierdo de cada hilera y una barra de finca proporcional, así que una página se lee como un histograma de color de la salud comercial antes de que una palabra leer; números tabulares con ceros silenciados, ya que la mayoría de las celdas en una finca de facturación son cero. El estado de la tabla vive en la URL por lo que una vista filtrada es enlazable -- escrito a través de una copia que preserva a Tab, y sin publicar activoTab, que pertenece a tabSync.

  20. · SecurityService

    Fraca cerrado en las aplicaciones un plan que nunca menciona

    Turns kamo.entitlement.fail-open off now that AppEntitlementCatalogMigration se ha enfrentado prod y cada plan activo sobre ambas raíces de derecho (KamoCRM, Sign Pink) lleva un explícito fila para las 21 aplicaciones no básicas . . . . . . . . . . . . . . . . . . . . . . . . . . Nada que le queda por negar por defecto para atrapar, excepto una aplicación genuinamente sin precio. Esto no cambia lo que cualquier org puede utilizar hoy en día: las aplicaciones enviadas están explícitamente incluidas, y MLOS y la aplicación de préstamo personal ya fue denegado por las filas explícitasIncluded=false, que se unen independientemente de esta bandera. Lo que cierra es una aplicación que se desliza sin precio al nunca aparecer en la matriz de un plan en absoluto. Volver a ser cierto si se añade una nueva raíz de derecho antes de que la migración haya corrido para ello.

  21. · BillingService

    Sirviar el directorio org como una página filtrada, ordenada, paginada

    GET /orgs toma la página/size/q/sort/dir más siete filtros y devuelve la casa sobre de página con agregados de toda la propiedad. GET /orgs/orgIdá sirve todo el detalle para el cajón de perforación de la consola, donde el fan-out por cuenta está bien porque está atado a una zona. listaAllOrgs() es reemplazado en lugar de mantenerse como delegado truncante: exactamente un llamante (este controlador), y la lista del frontendOrgs () tenía exactamente uno (la pestaña se está reescribiendo), por lo que un shim de compatibilidad sólo habría añadido un arriesgarse silenciosamente de no tener nada dependiendo de ello.

  22. · BillingService

    Hidratación de página conlocándote en un constante conteo de consultas

    Títulos de padres, dominio primario, el plan/mercado detrás del derecho y bandera de catálogo subscription suscripción son cada uno de los dos lotes IN (:ids) en toda la página, por lo que una página de 100 filas cuesta las mismas seis declaraciones que una página de 1 fila. La prueba afirma que la igualdad directamente: la aplicación que ello sustituiría a la puntuación 6 contra 600. La suscripción de gobierno es elija por EntitlementModeResolver, el mismo código que decidió el modo de la fila, por lo que el plan mostrado siempre pertenece al Estado se muestra. Las consultas pasan por EntityManager en lugar de nuevos métodos de reposipos para La biblioteca compartida de kamo, de la que depende todo servicio, no tiene que cambiar.

  23. · BillingService

    Fily row/page DTOs y el repositorio de consulta nativo

    PlatformOrgRow lleva las dos facetas por separado: derecho (subs entrantes apuntar al org - lo que gobierna) y facturación (cuentas que el org posee -- no-cero sólo para la plataforma org y revendedores). Agregados describen el conjunto completo filtrado, no la página, por lo que la tira KPI no cambia el significado como las páginas del operador. Cada valor del conductor se coacita a través de Number/Boolean en lugar de fundir: a coalesce(...,0) que coinja con ninguna fila devuelve Integer donde la misma columna con filas de vuelta Long, que pasaría en dev y tiraría en picada. El dinero cruza el Alambre como una cadena decimal.

  24. · BillingService

    Org directorio SQL con CTE per-facet

    Cuentas en retenidas, suscripciones entrantes, miembros, licenciatarios y niños cada uno agregado en su propio CTE antes de estar unido a orgs. Unirse a ellos en uno El paso multiplicaría las filas e inflaría cada SUM. Pura y prueba de unidad (26 pruebas): no ':' yesos, cada valor encuadernado, ordenar las teclas blanco en la lista de OrgSort. Dos cosas el pin de pruebas porque son fáciles de "ordenado" en los insectos - ORDEN BY y los predicados derivados (mode-rank, has-stripe) debe nombrar las columnas proyectadas de la base CTE, ya que el alias está fuera de alcance en la consulta exterior; y un juicio PENDING no reporta fecha límite en lugar de último caducado uno. Verificado contra el cúmulo en vivo: ambas declaraciones ejecutan, el conteo está de acuerdo con las filas, y los filtros/agregados aplican. El uso del índice NO se demuestra -- a 12 orgs / 9 subs CockroachDB-scans independientemente, correctamente.

  25. · BillingService

    Solicitud de directorio de org validada y apretada

    Abraza las pinzas de tamaño a [1,100] y una especie no reconocida cae de nuevo al título, por lo que un URL editada a mano no puede solicitar toda la finca ni llegar al SQL como texto libre. El OrgSort enum es la lista blanca del tipo.

  26. · BillingService

    Modo de derecho derivado a través de un solucionador compartido y determinista

    TrialAdminService eligió su suscripción de prueba con findFirst() a lista desordenada, por lo que un org que sosteniendo tanto un juicio pendiente como un juicio activo podría tampoco informa. El próximo directorio de la organización tiene que ordenar y filtrar este estado, y una consulta no puede reproducir una regla no determinista. La precedencia ahora vive en ************* *** entre pruebas en vivo, victorias activas sobre victorias pendientes sobre triunfación, y la expiración activa El estado más reciente. se mantiene su forma exacta de respuesta. Primeras pruebas en este repo (11).

  27. · InitializerService

    Filapel las filas de derechos de la aplicación en el catálogo del plan de plataforma

    El derecho ahora se resuelve en una columna de tipo servicio mecanografiado, pero ninguna fila de catálogo llevaba una, por lo que Cada plan aún resuelto a 'todo incluido' a través del default abierto. Estas semillas la matriz para que kamo.entitlement.fail-open pueda finalmente ser desactivado sin aplicaciones de fuego oscuro. - AppEntitlementCatalogMigration, después de PlatformOwnerPlanSeeder: idempotente relleno. Crea una categoría de funciones de 'Aplicaciones' con una hilera de BOOLEAN por aplicación no-core ligado a su ServiceType, vuelve a encuadernar cualquier fila preexistente que tenga el código pero no serviceType, e inserta las filas de plan a la aplicación que faltan por nivel. Insertar-si-faling sólo nunca elimina y nunca sobrescribe la iscluded de un operador, por lo que un nivel editado en el La configuración de IU sobrevive a reiniciar. También vuelve a encuadernar el VIDEO-CONF existente / AI-ASSISTANT / HR-SYSTEM / ESIGNATURES / Complementos EMAIL-HOSTING, que no estaban concediendo nada. - KamoCRMPricingLoader: misma matriz para un grupo fresco. Las filas de aplicaciones se adjuntan en su interior upsertCaracterísticas en lugar de escritas en un segundo pase, porque upsertPlanFeatures elimina el las filas del plan antes de insertar una segunda llamada borraría silenciosamente la matriz de marketing. Nota esta cargadora está deshabilitada (devolución temprana, y su llamada DataLoader es comentada), que es por qué la migración de arriba es la ruta de producción.

  28. · SecurityService

    Puerta hipoteca y verticales de préstamos personales en el derecho de la aplicación

    Un mercado de MORTGAGE apareció en / comercio cada vez que POS estaba encendido, independientemente de la aplicación MLOS, y /característica/habilitación no tenía ningún cheque de facturación en absoluto. El candado en la configuración de la interfaz de usuario fue presentación Sólo, por lo que un mensaje de mensajería directa encendió una aplicación no titulada. - FeatureController: 403 activar cuando el plan no incluye la aplicación; serializar un 'titúcido' veredicto tanto sobre ambas características[] como disponible[] para que el candado de IU y el 403 sean calculados por el mismo servicio y no pueden estar en desacuerdo. - CommerceMarketController: GET / tipo permitido para el recolector de tipo de mercado (modelo de la lista de exclusión intersecado con derecho); la lista de mercados cae verticales no con derecho a título oculto, nunca archivada, por lo que la restauración del plan devuelve el mercado con sus datos intactos. - **************** guardia cerrado por encima de cada /-marketId./... su-ruta. AppADisponibilidadInterceptor no puede expresar esto. su mapa de prefijo es un prefijo a uno ServiceType y /commerce-markets sirve a las siete verticales bajo POS. - POSController: los que llaman el catálogo de suscripciones ya no ven filas vinculadas a una aplicación que no ha llegado a COMPLETED, por lo que trasladar un ServiceType a COMPLETED es lo que lo publica el sitio de marketing. Los llamantes internos todavía lo ven todo con el fin de ponerle precio de antemano. - MortgageVerticalResolver: preparación mesurada POS solamente, por lo que un org que nunca compró MLOS todavía Lea como listo; ahora informa MLOS en 'desaparecido' también.

  29. · kamo-internal

    Renoname LOS a MLOS, añadir Personal Loan Origination System, puertas de comercio verticales

    La pestaña Apps muestra ahora 'Commerce: Mortgage Loan Origination System' (el título se sirve desde el backend enum, no el espejo TS) y un nuevo 'Comercio: Sistema de Orín de Préstamos Personales' en No está disponible. Los mercados de MORTGAGE y PERSONAL-LOANS están cerrados en su aplicación. - AppType/ServiceType retrovisores: MLOS(14) - nuevo LOS(25); también corrige la deriva preexistente donde los espejos no estaban de acuerdo con el Java enum. - Organización: es añadida Mlos; ahora significa préstamos personales.Es que Los tenía cero consumidores. - FeaturesManager: gating lee la bandera de 'titulado' suministrada por el servidor. Fue reconstruido lado del cliente. de billeársegoApi, cuyo getCurrentSubscription lanza y getAvailablePlans devuelve [] (legado .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - Los recolectores de mercado: tanto las páginas de creación como editar tenían su propia matriz de COMMERCE-TYPES rellena; ahora renderizan GET ************* por lo que un vertical el org no ha comprado es no seleccionable. La página de edición también se había saltado la regla de uno-MORTGAGE-per-org. Se mantiene el tipo actual de tipo de mercado seleccionable para que un org camisón todavía puede abrirlo y renombrarlo. - Configuración de hipotecas en superficies de puerta esMlos en lugar de isPos.

  30. · kamo-shared-library

    Resolver el derecho de la aplicación por ServiceType; cambiar el nombre de LOS a MLOS

    Derechos resueltos ServiceType.name() against ************* Los códigos del catálogo son códigos de comercialización (USERS, VIDEO-CONF, HR-SYSTEM, ...) y nunca coincididos, Así que planFeatureIncluded's missing-row default concedió cada aplicación en cada plan. el vínculo era inerte. Las filas de catálogo ahora llevan un tipo de servicio nulo mecanografiado y la resolución pasa por así que una aplicación puede ser renombrada sin mover el derecho. - ******************* columna de servicio tipo (persistido como el identificador). - ******************* resolución por ServiceType; complementos de honor a través de la Anteriormente sin leer **************** jsonb; comportamiento de la fila faltante detrás de kamo.entitlement.fail-open (default true hasta que la matriz de catálogo sembrada). - Servicio de Suscripción: llevar servicioType a través de crear/actualización/TayTOs, y derivar característica.code del nombre cuando se omitió el diálogo de configuración nunca envió uno, por lo que cada creación de la La interfaz de usuario golpea la restricción de NO NULL. - CommerceType: aglutinar cada vertical a su aplicación requerida (MORTGAGE--MLOS, PERSONAL-LOANS--LOS). - AppliedModelEnforcementService: getAllowedCommerceTypes intersecta el modelo de seguridad clinógrafo con derecho; afirmarCommerceTypeAllowed cubre ya crea y edita. - ServiceType: LOS --MLOS keeping id 14 (ORG-FEATURES persiste el identificador, no el nombre, así que no migración de datos); nueva LOS (25) para préstamos personales - id 25 porque la reutilización 14 volvería asignar cada fila hipotecaria existente. - RoleRightType: MLOS* rebote, ids 139-144 sin cambios; préstamo personal LOS* añadidos en 190-195. - PhiModule.PLOS añadido: el nombre dejó la aplicación de préstamos personales mapeada a la hipoteca PHI módulo e hipotecas sin mapear, que compilaron limpio.

Tu universo está esperando.

Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.

Gratis para siempre: no se requiere tarjeta de crédito