Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· SecurityService
Hilar el departamento de padres a través de crear y actualizar
DepartmentService ahora toma su petición DTO en lugar de ocho argumentos posicionales, Así que el padre se une a la carga útil en lugar de convertirse en una novena en una fila de la misma tipo cuerdas. Org scoping en los endpoints mutantes no ha cambiado; el propio alquiler del padre comprobar la vida en el servicio junto al guardia.
· kamo-internal
Dibusea departamentos como una carta de org con un recolector de padres
La pestaña de los departamentos era una lista plana, así que un org con Operaciones . El a bordo no tenía forma de decirlo y no había forma de verlo. Add/edit obtiene un departamento de Padres selecto, colocado con el nombre porque la paternidad es estructural más que operativa. Ofrece el árbol en orden de renderización y desactivación el departamento en sí más todo bajo él -- esas son exactamente las opciones el servidor rechaza, y ofrecer una opción que siempre falla es peor que no ofrecerla. La lista se convierte en una columna vertebral de org-chart. Una columna de ferrocarril por nivel, cada uno exactamente un icono chip de ancho, así que un codo de una fila aterriza en el centro del chip de su padre en lugar de cerca el carril de un último niño se detiene en la esquina en lugar de correr, que es lo que hace que el final de una rama sea visible sin contar las sangs. Las células no llevan vertical Acolchado - los rieles tienen que llegar a ambos bordes o la línea se rompe en cada fila. La profundidad lee a través del tamaño de lata y el tipo de peso, no el tamaño de chip, ya que las fichas uniformes son lo que hacer la geometría del ferrocarril exactamente. Cabezas de columna se convierten en Etiquetas de Operador en una barra helada, sustituir el color de la marca azul-50/indigo-50/gray-900 que ignoró el token de la marca. El edificio de árboles vive en DepartmentTree.ts así que los casos incómodos tienen un lugar donde estar probado: un padre borrado de un hijo rinde a nivel superior en lugar de Desvanecer, y un ciclo que llegó a la mesa hace en lugar de colgar la página. Falliled saves ahora reporta la propia explicación del servidor. El cuerpo 4xx estaba siendo arrojado a favor de la línea de estatus, que habría convertido "un departamento no puede ser suyo padre" en "Bad Request".
· kamo-shared-library
Deja que un departamento se siente bajo un departamento de padres
Los departamentos eran una lista plana, así que un gráfico de org con Operaciones . A bordo no tenía forma de decirlo. Departamento gana una auto-referencia opcional padre; null todavía significa nivel superior, que es lo que se mantiene cada fila existente. La columna de pines de columna FKDefinición = "UUID". A la izquierda, Hibernate copia el definición de clave primaria de referencia -- UUID DEFAULT gen-random-uuid) -- en el FK, así que un ddl-auto atrapado sobre un DEPTS poblado estampa cada fila con un padre al azar sin departamento y el ADD CONSTRAINT que sigue fracasa. La asignación de padres se valida en el servicio, no sólo en el que se recoge: auto-padre, ciclos (caminarse desde el padre propuesto no debe llegar al departamento Movido), un padre en otra organización, y un identificador desconocido son rechazados. Borrando un departamento promueve a sus hijos a su propio padre en lugar de Dejándolos detrás de un puntero colgante. ************* ahora toma su petición DTO en lugar de ocho argumentos posicionales, que es lo que hizo que añadira una novena valía la pena evitar.
· kamo-internal
Cree los campos To/Cc/Bcc a tres filas, luego despicle
Los campos receptores en la ventana de herramientas de composición eran una sola fila ahora que tenía que ser arrastrado de costado para leer, y la ventana es de 360px de ancho y no resizable, por lo que un tercero La dirección ya estaba fuera de la vista. Ahora envuelven: el campo crece una fila a la vez como fichas llenar el ancho, para a las tres filas, y se desplaza verticalmente más allá de que con un delgado desmesurar. Añadir un chip sigue la entrada hacia abajo para que el cuidador se mantenga visible. La tapa de la hilera es un píxel máx-altura, calculado desde la altura de chip medido para que siempre cortes en un límite de filas - un compositor maximizado y una fuente de navegador escala ambos mueven. La etiqueta y el pin del botón de contacto a la primera fila en lugar de flotar en el medio de un bloque de tres filas. Cae el ahora intenedor de la utilal de modo y el arrastre horizontal para el que existía.
· kamo-internal
Hacer la creación de org sobrevivible, y ofrecer cada opción de marca por adelantado
El mago podría fallar a un cliente en formas nada en la pantalla, y pidió un fracción de lo que Configuración y Etiquetado se expone. Fiabilidad de la creación: - Logo y las subidas de antecedentes fueron a /api/imagación/subida con assocType "ORG-LOGO" . ImageasAssocType constante, en un endpoint cuyo assocType es un ordinal numérico. El analizador Se tragó el fracaso y los archivó como MI-DOCS, así que la marca silenciosamente nunca existió. Ahora ellos. utilizar los endpoints reales de marca de org, una llamada por ranura de logotipo. - El teléfono/email del creador PUT sólo podría 403: ese endpoint requiere session-org para igualar el org del miembro, y la sesión todavía está en el padre. Movié en la carga útil de creación. - Se recogieron advertencias post-creada, pasaron a /setup/dns como un param de consulta, y leídos por Nada. /setup/dns ahora los hace. - Enviar nunca fue revalidado, así que limpiando el nombre después de llegar a Review creó una org con un título NULL y alias. - derivaConfigType leer los rangos de edad ALLOWED del tipo de rama en lugar de la seleccionada, estampar KIDS-CLUB en las empresas para adultos, lo que desactiva la recuperación de correos electrónicos y cuentas telefónicas. - Las variantes de color nunca se derivaron, las entradas telefónicas no fueron ilimitadas contra VARCHAR (20), un rayo rango de edad 403'd en el envío, y un dominio tomado apareció como un desnudo 500. Comportamiento & paridad de etiquetado - todo excepto los dos identificadores hipotecarios: web, correo electrónico de contacto de la empresa, identidad de marca blanca, los siete perfiles sociales, los ocho etiquetas personalizadas con sus banderas heredadas de los padres, idioma predeterminado y moneda, privado-org visibilidad, marca de agua de fondo, los tres selectores de la marca y las cuatro ranuras de logotipo. Dos nuevos pasos (Etiquetas, Preferencias); el área horaria pasa a Preferencias junto a sus hermanos. Todo ello monta en la carga útil de crear, no llamadas de seguimiento: PATCH /org/-id-/branch-titles has la misma verificación de sesión-org que rompió la actualización del miembro, y una transacción significa las respuestas o todas las tierras o ninguna lo hacen. Orientación y esquiables: Cada entrada tiene un texto de ayuda basado en lo que realmente hace el valor. Solo tipo y consumo básico campos necesarios, y eso ahora se dice en la cabecera, en el escalopar, en la barra de nav, y en la barra lateral con "Skip por ahora" en cada paso opcional. También: la configuración ya no destruye extensiones de teléfono de org en guardar, /api/generate-background no más largo un proxy facturable no autentictado, y el proxy org-by-id deja de corromper int64 ids.
· kamo-internal
Envíe el botón trastornado del editor de dónde vino el miembro
El editor de papel pintado era un callejón sin salida, pero el ferrocarril nav. Ambas entradas puntos (el chip de la barra superior de casa y el atajo de cabeza de perfil de miembro) ahora estampan su origen en el href, y el editor resuelve eso en una píldora de espalda en el fila de las cejas: casa vuelve al salpicadero, un perfil vuelve al miembro de quién era la página, usando el id estampado en lugar de asumir que es el El dueño del papel de pantalla. Una URL desnuda sin sello vuelve al perfil de este miembro. de Id se comprueba con la forma opaque-id para que una URL hecha a la nave no pueda girar el botón en una redirisión arbitraria. Leerlo necesita usoBarchParams, por lo que la página Gana el límite de suspenso que requiere el Enruter de la aplicación.
· kamo-internal
Mostrar un buzón de primaria bajo el nombre de perfil de su miembro
Un buzón mantenido como la primaria de alguien es la dirección de esa persona, así que sugiriéndolo como "Sales Desk" "Sindijo" ", sea lo que pasó a ser etiquetado cuando estaba aprovisionado. nombra el buzón en lugar de la persona. La fila autocompleta y el destinatario Tarjeta ambos leen el mismo campo, así que ambos estaban equivocados juntos. El directorio ahora lleva a la lista de miembros primarios antes de la pantalla del buzón, y asignadoMemberName para un buzón personal, cuyo cesionario único es su dueño. Alisas y buzones compartidos no pertenecen a nadie en particular y mantienen su propio nombre. La preferencia es una lista por fuente, así que un backend que no ha sin embargo, enviado el campo simplemente cae de nuevo a displayName.
· EmailService
Nombrar un buzón de primaria después del miembro que lo tiene
Un buzón que alguien sostiene como su principal es la dirección de esa persona, así que presentarlo en el marco de lo que el buzón fue etiquetado en el momento del aprovisionamiento. "Sales Desk" para una caja que es simplemente Jane Doe's .name mal a la persona en el componga autocomplete y en la tarjeta receptora. listMailboxes ahora lleva ************* para el miembro con la asignación principal, que el directorio de direcciones org prefiere sobre la El propio displayName del buzón. Sólo el titular principal cuenta: un buzón de correo alguien simplemente tiene acceso a los suyos y mantiene su propio nombre, y la configuración mesa sigue renders displayName de cualquier manera. La resolución del nombre se mueve de AccessibleMailboxService en un ayudante compartido Así que las dos superficies no pueden discrepar sobre cómo se llama un miembro.
· kamo-internal
Registrar las páginas de comisión en la configuración nav y la página de destino
Las pestañas existían pero nada vinculado a ellos. **************** es el ejemplo cautilado ya en este repo: una página real sin tarjeta, sin pestaña y sin entrada nav, accesible sólo escribiendo la URL. Contabilidad y Finanzas es su propia sección y su propio tema de navegación en lugar de dos más entradas bajo Mi Cuenta. Las subopciones no llevan puerta propia, así que doblarlas habría obligado a abrir la puerta de la cuenta a los titulares de finanzas y mostrándoles cuatro enlaces que no pueden usar - el mismo razonamiento que mantiene el cumplimiento fuera de el tema de la seguridad. Con las fichas de financiación en su propia sección, la cuenta de Mi Cuenta La puerta vuelve a CONFIGURE-SYSTEM solo. La tarjeta personal de la Comisión está condicionada a que el espejo sea miembro del equipo, Reflejando la propia puerta de la pestaña. Una tarjeta que abre una pestaña que no se renderizará es peor que ninguna carta.
· kamo-internal
Las comisiones de los Miembros y las dos fichas de la cuenta de finanzas
Pestaña de miembro (sólo automáticamente, miembros del equipo): balance y libro mayor, encargado oportunidades, montaje de pago y retiros. Ganancias de la cartera Stripe y procesador de la Comisión. La pestaña de miembro está cerrada es Self y el miembro TYPE, nunca a un derecho. checkRight devuelve verdad para todo lo que está bajo modo dios activo, y la página canViewOtherMemberAccount ORs in derechos no relacionados, incluyendo ******************* - para que una puerta derecha aquí mostrara una equilibrio y datos bancarios de los miembros a cualquiera que sostenga a cualquiera de ellos. 'Mis pagos', no 'Mi banco'. Los diputados casi nunca tienen una cuenta de Stripe y no pueden adjuntar uno si lo hacen: OAuth read-write rechaza cuentas controladas por otro plataforma. La plataforma de su empleador crea una cuenta de destinatario solo para pago y verifican su identidad. El panel dice lo que Stripe recoge, que tiene Stripe sin relación de apoyo con ellos, y ese dinero toma aproximadamente 6-8 días naturales para llegar - nada de lo que deberían tener que descubrir después. Organization Stripe es una lista de verificación guiada, no una forma, porque Stripe no tiene API para convertirse en una plataforma Connect. El paso 6 lleva una advertencia completa en lugar de una pista: un org cuyo saldo de Stripe paga automáticamente pierde la carroza de la comisión antes de que el trabajo de liberación funcione, y cada transferencia fracase entonces por fondos insuficientes sin ningún evento de Stripe para explicarlo. El dinero es un decimal STRING de extremo final y nunca es Number(-ed excepto para elegir un color. Las cantidades negativas son reales -una comisión anulada se convierte en un empate- y la codebase no tenía convención para mostrar uno, por lo que se vuelven en el tono de error con un negativo explícito y un chip de arrastre. Sub-tabs sincronizar a ?sub=; SettingsView owns ?tab= y lo reescribe en cada cambio de pestañas. La ruta BFF existe porque CommissionService es solo ClusterIP - sin ella el características completas 404 mientras que cada servicio es saludable y cada construcción es verde.
· kamo-internal
Car carpetas en las que puede actuar, correo que puede seleccionar
Haga clic derecho en cualquier carpeta para sus acciones. La cabecera del menú no es cromo. nombra la carpeta y muestra su vida sin leer/total, así que Mark all read and La carpeta vacía se puede juzgar antes de que se haga clic en lugar de después. Las acciones que no pueden aplicarse se muestran desactivadas con la razón (nada sin leer, carpeta vacía, carpetas incorporadas mantienen sus nombres) en lugar de ser Vía vacía y borrar a través de una confirmación construida para el cromo de correo. La UI ConfirmationDialog exige una palabra de desafío mecanografiada cada tiempo; un reto en una acción recuperable solo entrena a la gente para que escriba a través de advertencias. Así que la puerta está reservada para los dos que destruyen el correo Directamente borrar una carpeta y vaciar la basura y ambos nombrar el consecuencia exactamente: todo lo demás se mueve a la basura y lo dice. Carpetas reordenan por arrastre, por miembro, almacenado en las preferencias ui-preferencias compartidas mesa para que el arreglo los siga a través de los dispositivos. La orden es una lista plana de nombres de carpetas: los hermanos sólo se comparan entre sí, para una lista ordena cada nivel, y una carpeta que se renombra o se mueva cae de nuevo a su posición natural en lugar de corrompiar un árbol. Gotas a través de los niveles se ignoran - que sería una reelección en el servidor de correo, no de una especie. Seleccionar correo ahora funciona como la selección funciona en todas partes: hacer clic en el cambio para una gama desde el ancla, cmdd/ctrl-click para elegir uno, y el avatar se convierte en una casilla en flotar en lugar de gravar cada fila con una columna permanente de la casilla de verificación. Las acciones cabalgan en un bar que flota sobre la lista y se va con la selección, en lugar de una tira encajonada en el cromo que metió la lista en cada garrabo. También: el pie de carpetas Gestionar se ha ido. El botón al lado de las carpetas El encabezamiento ya crea carpetas y el botón de actualización es finalmente cuadrado. CSS no podía hacer eso por sí solo: en una fila flexible el tamaño principal resuelve antes de alinearse----sestretch le da al elemento su altura, por lo que el aspecto-cuadrado había sin altura para derivar un ancho. En su lugar, mide la fila.
· EmailService
Actúe en una carpeta entera, no sólo en la página que desplazaste.
Marque todas las lecturas y la carpeta vacía son operaciones de carpetas a todo el cliente no puede expresar por lotes uids: sólo tiene la página que tiene se desplaza, por lo que una carpeta con 4.000 sin leer haría 80 viajes de ida y vuelta y Todavía echa de menos todo lo que nunca cargó. FolderManager gana setFolderSeen y vacíaFolder. El camino IMAP se vuelca banderas en una llamada del lado del servidor y sólo toca mensajes que en realidad No estás de acuerdo con el estado objetivo, un conjunto de mantasLas banderas reescriben las banderas servidor ya tiene y hace que cada cliente conectado se sincronice para nada. El gráfico no tiene equivalente a granel, por lo que camina por la carpeta y PATCHes; el el filtro se encoge a medida que avanza, por lo que reelea la primera página en lugar de paging con $skip, que pasaría por encima de los artículos el lote anterior sólo Salió del conjunto de resultados. Su techo de barrido está talado, nunca en silencio. Vacío mantiene la Papelera especial: La basura se elimina de verdad, de todos los demás La carpeta mueve su contenido a la Papelera y se mantiene recuperable. El DELETE de Grafo ya se comporta de esa manera, así que no hay carpetas-nombre de palabras especiales allí. Ambos endpoints return cuántos mensajes se movieron, por lo que la UI puede decir "marcar 240 leer" de "nada que hacer", y sólo publicar un evento de cambio cuando Algo realmente cambió.
· SecurityService
Relé orientado al navegador para la función de comisión
Resuelve la sesión, autoriza y transmite a ComisiónService con la organización y miembro estampado de esa sesión - nunca de nada que el llamante envió. Esto es los derechos del único lugar están comprobados: SecurityService ejecuta cualquierRequesta().permitAll() con laminado a mano a mano Auth, por lo que un endpoint que olvida su cheque falla OPEN y es accesible a través del relevo público de la API. Tres derechos en lugar de uno, por lo que la separación de funciones es expresable: con un solo subvención, quien emita una comisión también podría liberar el pago y cancelar el Sosgo que existe para atraparlos. Acciones de movimiento de dinero y destino de pago se niegan en su personificación. La imitación apropie una sesión completa como miembro arbitrario, por lo que sin esa negativa un administrador de dios podría entrar como alguien, señalar pagos en su propio banco, retirarse, y cancelar la bodega. El propietario de la organización es un titular implícito. Se concede un nuevo derecho a nadie el día que se despliegue, incluyendo a cualquiera que pudiera encellar la función. así sin una rama de propietario las naves de características latentes e inalcanzables. /me/oportunidades se sirve aquí en lugar de retransmitidos, porque SecurityService posee el modelo de oportunidades; registro de esos depósitos también en CommissionService le daría a una de las figuras de una biblioteca compartida dos escritores. Sindicatos de las filas divididas del miembro con las reservas donde son el agente principal, porque el propio agente comisión no produce fila dividida y una consulta que comprueba sólo un lado esconde silenciosamente Las ganancias de medio miembro.
· kamo-shared-library
Encuentra una comisión de un miembro escisiones para su propia vista de comisiones
Org-scoped en lugar de tecla solo en el miembro: ORG-ID se duplica en esto mesa para que una fila nunca se le pueda leer cruzado en el inquilino por id, y un buscador que lo ignoró lo desharía en silencio. Sólo la mitad de "oportunidades que gano" - pertenece la comisión a nivel de reservas al agente principal y no produce ninguna fila dividida, así que los llamantes deben sindicalse esto con las propias reservas de ese agente. Documentado en el método para que el siguiente llamante no envía una opinión que esconda silenciosamente las ganancias de medio miembro.
· kamo-internal
Haz de la superficie del miembro una verdadera red de datos de kamo
Los paquetes del miembro eran una lista de tarjetas sin movimiento, que no es como el resto de aspecto kamo. Esta es ahora la casa AG Grid: Sub-tabs pendientes y completadas sincronizado a ?sub=, lado del servidor paging extremo a extremo (página/tamaño/estatus alcanza DocsService en lugar de cortar una tapa de 200 filas), llenando el panel en lugar de dimensionar sus filas, y sin título, la pestaña de configuración ya lo nombra. Estado lee de un vistazo en lugar de como un chip gris: una fecha de vencimiento lleva su propio urgencia, y espera-otro y cambian de contenido son estados legibles en lugar de los ocultos. El movimiento está restringido y cerrado en usoReducedMotion.
· kamo-internal
Mostrar el nombre del miembro sin el "Hola", prefijo
· DocsService
Pajería del lado del servidor para la lista de asignación de miembros
La superficie del miembro pidió incondicionalmente a MAX-SIZE y cortó el resultado en el navegador, por lo que una cuadrícula que mostraba una página ya había descargado un todo historial laboral para construirlo. Ambos lectores ahora toman página/tamaño y el listando páginas en la base de datos. Spec.status (un enum) se convierte en Spec.statuses (un Set) y el parámetro wire stays Ahora aceptando un CSV. Ese es el punto: la cuadrícula de miembros pide un BUCKET - los tres OPEN-STATES que todavía deben trabajar, o los cuatro terminales y un filtro de un solo valor no puede expresarse sin tres viajes de ida y vuelta por página. Un simbólico parárseos a un conjunto de un elemento, por lo que la red de recursos humanos existe status=EXECUTED es aditativo en el alambre y no necesita ningún cambio de cliente. An ficha desconocida en una lista es un 400 que nombra la ficha, nunca se deja caer en silencio filtro: una cuadrícula de cumplimiento que dice ser filtrada mientras muestra que todo es el peor resultado disponible. clampaPage/clampSize se exponen por lo que los lectores miembros sujetan la regla SAME como la rejilla de recursos humanos en lugar de pasar MAX-SIZE literalmente, que es como un "paged" endpoint silenciosamente se convierte en uno sin límites. listMine avanza su paging sin volver a conducirlo, así que la pinza existe una vez. La autorización está intacta y las pruebas la pinan: los endpoints de los miembros se quedan miembro deGuarded () . LegalAssignmentOwnership, HR endpoints stay on guarded() LegalPackageAccess, y los tres nuevos "RequestParams" se afirma por su nombre exactamente estado/página/tamaño - la razón por la que esta superficie es segura es que nada En ella se nombra a una persona. Sin cambios de esquema. Ninguna nueva entidad. mvn -o prueba: 391 pruebas, 0 fallos, 0 errores (era 379).
· kamo-internal
Tarjeta de notificaciones de correo electrónico personal reemplaza la pestaña Notificaciones
Ambos interruptores se mueven en Mi Perfil en la misma forma que la tarjeta de contraseña: una tarjeta, una baldosa icono y ayudar a texto por fila, y un inset tintado que aparece sólo cuando las horas tranquilas están encendidas. Sin encabezado Editar botón Los interruptores se guardan, se desboca, exactamente como lo hizo la pestaña. La tarjeta conduce con donde va el correo, porque esa es la parte que los miembros se equivocan: avisos son enviado a la dirección en su cuenta de USUARIO, que los nombres de la tarjeta, y nunca al buzón este organización les asignó un buzón de correo que tendrían que iniciar sesión para leer, que es lo mismo El aviso les está diciendo que lo hagan. SecurityService devuelve esa dirección sólo al miembro Pertenece a, por lo que la nota vuelve a caer en una forma sin nombre si está ausente. Solo miembros del equipo: el notificante sirve botes de chat internos y de apoyo, lo que hace un simple miembro no trabajar. Sólo por sí mismo, ya que la ruta de preferencia es mía y en la de otra persona Perfil de estos interruptores editaría las propias horas tranquilas del administrador.
· SecurityService
Exponga el correo electrónico de la cuenta de usuario en su propio perfil de miembro
La tarjeta de notificaciones de correo electrónico personal del perfil tiene que nombrar los avisos de mensajería perseguida en realidad alcanza, y esa dirección es el campo de la cuenta de usuario, no el campo de correo electrónico a su lado, que es el buzón que esta organización asignó al miembro. Regresó sólo cuando la sesión está leyendo su propia fila de miembros. Una dirección personal no es algo un administrador debe cobrar el perfil de un colega, y ninguna otra persona que llama tenga una razón para quererlo.
· kamo-internal
Grupo de permisos de contabilidad y finanzas y acceso a la derecha financiera a la configuración de cuenta
Los grupos de Seguridad y Administración de Acceso existían sólo en SecurityRoleManager como listas de nombres en línea, por lo que JobTitleManager, DepartmentManager y RolesPermissionsTab Agrupó cada servicio sin timo derecho en General. En vez de añadir una cuarta copia, las definiciones de grupo se mueven a permisoGroups.ts y los cuatro editores los leen. es GeneralPermiso es la razón por la que importa: filtrar solo en el sistema de servicios haría una derecha tallada dos veces, una en General y una vez en su propia sección, dando una puesta a punto dos conmutaciones independientes. MembresPermissTab está deliberadamente intacto - su lista de Permisos Generales es un código duro de lectura/escribo/delete/admin se burla, no datos reales de derechos. /configuraciones/cuenta y su sección de aterrizaje ahora también admiten los derechos de financiación. De lo contrario, un controlador que sostene a MANAGE-ORG-FINANCES sería redirigido De vuelta a /settings; ensanchar sólo uno de los dos dejaría la página alcanceble por URL pero invisible en el nav.
· InitializerService
Migración para el libro de la comisión y mesas de pago de Stripe
Espejos com.kamo.z.shared.commission. ddl-auto crearía estos a partir de la anotaciones de todos modos; el explícito DDL es la convención de la casa y es lo que hace la forma revisable en un solo lugar en lugar de a través de una docena de clases de entidades. COMISION-STRIPE-WEBHOOK-EVENT está clave en (ORG-ID, STRIPE-EVENT-ID), no en el id del evento. Cada organización dirige su propia plataforma Stripe Connect, así que los ids de eventos sólo tienen que ser únicos dentro de una cuenta - LOAN-STRIPE-WEBHOOK-EVENTS teclas en el identificador desnudo y es seguro sólo porque eso es características tiene una sola cuenta de Stripe. Aplicado contra la marcha; las nueve mesas y cada guardia única verificada presente.
· SecurityService
Semilla los derechos de financiación en la plantilla ADMINISTRATOR de cada modelo de rama
La puerta de los derechos de la comisión una característica que no existía anteriormente, así que NUEVO-RIGHT-SEEDS deliberadamente no dice nada sobre ellos - ese mecanismo lleva un subvención existente hacia adelante para que un despliegue nunca en silencio vuelva a acceder, y utilizarlo aquí entregaría el poder de movimiento de dinero a la gente que nunca lo tuvo. Lo que necesitan en cambio es un default tipo de rol, que no existía. Dos partes: - plantillaSeedSettingPara obtener una sobrecarga de DefaultRoleType que otorga la financiación los derechos sobre las plantillas ADMINISTRATOR solamente. GRANTED, no FORCE-GRANTED: un org debe podrán revocar un dinero de un administrador de su miembro El perfil, y FORCE-GRANTED anúlla cada capa posterior de la cascada. - asegurar queRoleTypeTemplates cree la fila ADMINISTRATOR para los modelos que carecen de uno. Las filas de papel sin defecto son perezosas, creadas sólo cuando alguien guarda los defectos de un modelo, y sincronizaciónSecurityModelRoleLos derechos itera esa mesa - así que sin esto el el impago se aplicaría a cada modelo de rama excepto a los nunca personalizados, En silencio, y esos son los más propensos a ser confiados como es.
· kamo-shared-library
Ládugo de comisión miembro del equipo y dominio de pago de Stripe
Añade com.kamo.z.shared.commission: un libro de cabecera firmada solo para amigos, un miembro por miembro la fila de equilibrio que existe exclusivamente para serializar las retiradas simultáneas, Modelo de lote/partida-línea de la Comisión, y el rayón per-org Connect entidades de pago. Tres decisiones que vale la pena mantener: - El libro mayor es solo apéulado y lo hace cumplir en Java (Ejúre de PreActualizar/Elegtar tirar). Column(updatable=false) sólo hace que Hibernate omita una columna de la Actualización, no hace que la escritura fracase, por lo que una corrección rancio se vería como si hubiera tenido éxito. Las correcciones están revirtiendo las filas. - Disponible vs pendiente es una consulta sobre EFFECTIVE-AT, no una máquina estatal. A comisión emitida hoy con los movimientos de vencimiento del próximo mes a disposición de su propio, por lo que no existe ningún barrido que pueda fallar y vagar el dinero como está pendiente. - DE LABALANZA DE LA DECENCIA es redundante con el libro mayor por construcción. Es existe porque un equilibrio es un agregado y SELECT FOR UPDATE no puede bloquear un agregado; sin una fila para tomar PESSIMISTIC-WRITE, dos concurrentes Los retiros pasan su propio chequeo de suficiencia. El dinero es NUMERIC(19,4) en todo, los org ids son columnas INT8 simples en lugar de asociaciones así que los registros financieros sobreviven a los miembros churn, y ORG-ID se duplica en las filas infantiles para que ninguna tirada de un solo hilera pueda leer inquilinos cruzados. También añade tres derechos (187-189) para la superficie de las finanzas. Se dividen así. separación de funciones es expresable: con un derecho la persona que emite a la comisión también podría liberar el pago y cancelar la bodega que existe a serviceType es nulo deliberadamente - un nuevo ServiceType se agruparía automáticamente pero no los convierten en ningún editor, ya que las secciones de aplicaciones solo aparecer cuando el org tiene esa aplicación habilitada. Esquema aplicado a través de KamoInitializer; las nueve tablas verificadas presentes en prod con TODOS los privilegios para el usuario de la aplicación kamo.
· kamo-internal
Dobla MFA en la tarjeta de contraseña y suelte la pestaña Seguridad de inicio
Dos lugares hicieron una pregunta - cómo entro en esta cuenta - por lo que el segundo factor ahora vive al lado de la contraseña de Mi perfil, en una tarjeta retitulada "Password y Multi Factor Authentication". El flujo de inscripción se mueve fuera de la pestaña en ************* cromado-libre para que renders como una fila en vez de una página: píldora de estado, QR/secreto numerado y pasos de código en un inset, y el mismo diálogo de código de recuperación indesechable. La cabecera de la tarjeta no lleva botón Editar ahora que posee dos acciones independientes - la fila de contraseñas tiene su propia "contraseña de cambio", la fila MFA su propia "Encamina". MFA se mantiene auto-últal por la razón por la que la pestaña era: Los endpoints MFA de SecurityService resuelven al usuario de la sesión de la llamada y no tomar ningún parámetro de usuario, por lo que un administrador en el perfil de otra persona estar inscribiendo a su propio autenticador. El cambio de contraseña es más amplio (MANAGE-MEMBER-SECURITY, dios), así que Esa sola fila se rinde allí. Estado de contraseña se traslada a PasswordSecurityCard, que fija una rama muerta en el camino: la antigua tarjeta comparó una *contraseña traducida*Error contra los literales en inglés, por lo que "Current password is incorrect" Nunca llegó al campo al que pertenecía. El error ahora lleva su campo.
· kamo-internal
Sugerir los propios buzones de la org, alias y buzones compartidos
El autocompletado receptor sólo conocía contactos y direcciones raspadas de la Carpeta enviada, por lo que las direcciones de la propia organización **************** *** . . . . . . . . . . . . . . . . . . . . . . Nuevos fans de GET /api/email/directory a las cuatro fuentes de EmailService detrás esa página y devuelve una lista de direcciones deduped. Al lado del servidor agregado porque cada una de esas llamadas consume su propia llave de una sola vez; desde el navegador sería Cuatro viajes de OTK cada vez que un compositor abre. Cada fuente se degrada en su propio, así que un org cuyo proveedor no tiene aprovisionamiento todavía recibe sus alias. La lista está en caché en la memoria y coincide localmente con orgs tiene decenas de estos, no miles, y un parámetro de consulta por pulsación de teclado pondrían un viaje de ida y vuelta en la red primera parte de las sugerencias el navegador ya puede responder. Org coincide por lo tanto pintura inmediatamente mientras que el contacto y las búsquedas de carpetas enviadas todavía están en vuelo, y lideran el menú desplegable: es un pequeño conjunto exacto, y una dirección interna que también se sienta en un libro de contacto debe leer como el buzón, no la tarjeta de contacto. Editar buzones en Ajuste deja caer la caché, por lo que se sugiere una nueva dirección sin una recarga. La base-URL de EmailService y los ayudantes de avanzada salen de la ruta de captura-all así que la nueva ruta aparea su OTK de la misma manera en lugar de guardar una segunda copia.
· kamo-internal
Vista de un buzón, y una columna que está lista
El gatilador Conversacional/Classic se ha ido y cada miembro consigue el lista clásica. Conversación vistió su propia lista, su propio hilo pane y su propia superficie de API para una segunda forma de leer lo mismo mail . Todo borrado, junto con el modo localStorage Recordado por navegador. La cabecera de la columna de la lista fue con ella. El nombre de la carpeta, su icono, el descripción debajo de él y el botón de refrescar eran seis rems de cromo por encima de una lista que quería la altura, y el árbol de carpetas ya dice qué carpeta está abierta. Búsqueda y el panel de filtro se mueven a la carpeta sidebar, por encima de la etiqueta Carpetas, por lo que la columna de la lista no es más que lista. El botón de actualización vuelve al lado del conmutador de buzón como cuadrado: elementos-stretch en la fila y aspecto-cuadrado en el botón hacer su altura rastrea el conmutador y su ancho rastrear su altura. Se sienta. al lado de la tarjeta de un solo buzón también, así que un miembro sin un descenso no pierde refrescarse. Los filtros caen a una columna y dos selecciones lado a lado no se ajustan a barra lateral de 320px. Un proveedor de solo SMTP no tiene barra lateral de carpeta, así que allí el panel de búsqueda se mantiene por encima de la lista en lugar de desaparecer. Las cuerdas para las superficies removidas se fregan de los 22 locales en kamo-translation-dictionary (61fdfcf, empujado primero). hilo Detail de/to/cc/noEstancia de contacto - la pestaña de comunicaciones de plomo las hace.
· SecurityService
Exponga el correo electrónico de contacto en la lista por departamento
El Centro de Interacción necesita una dirección de un miembro para pre-llenar a un compositor, y el único punto final que llevaba uno era el detalle de un solo miembro de buscar uno petición por fila visible. EmbEmail está incrustado en la fila de miembros de la lista ya cargas, así que servir aquí no cuesta nada y elimina el N-1.
· kamo-internal
Envíe un correo electrónico a un miembro directamente desde su fila
El muelle de acción de la fila podría chatear, reunirse, marcar y abrir un perfil. cosa que no podía hacer era iniciar un correo electrónico, así que contactar a un colega por correo significar salir del panel, abrir al compositor y reescribiendo su dirección. Añade un botón de correo junto a los demás que abre la ventana de la herramienta del compositor con el miembro ya en el campo To. La dirección cabalga en el la carga útil por departamento (EmbEmail está en la fila de miembros, por lo que no cuesta más consulta) en lugar de un detalle por fila buscar, y el módulo/puerta derecha es resuelto una vez en NavTopPanel en lugar de por fila.
· DaemonService
Recordatorio de paquete legal diario garrack
DaemonService es el dueño de la garrafa porque DocsService no puede. DaemonService es estrategia:Recrear la vieja vaina se ha ido antes de que comience la nueva, por lo que un despliegue ventana no puede disparar. DocsService está enrollado maxSurge:1, así que a Seprograma allí siempre puede: para la longitud de cada despliegue hay dos vainas y ambos creen que son las 13:00. Para un trabajo cuya producción es correo a cada retraso empleado en la plataforma, "normalmente una vez" no es una propiedad. También nos da DesordenConcurrentExecution, el activador manual de JobTriggerController y un cron sin redesplegar DocsService. Modelado en LeadEmailSweepJob, incluyendo la parte que es más bien carga que estilístico: un default RestTemplate espera FOREVER, así que un DocsService encajado pondría este hilo y debajo de la ejecución de la ejecución de la orden de acera. hasta que la vaina se reinicie, silenciosamente e indefinidamente, luciendo exactamente como "no Se debían haber recordados". Los tiempos de espera son explícitos. Stamps interna.auth.secret (public-chat), el valor DocsInternalAuthFilter Finifica el secreto interno MLOS, que es un valor diferente y 403s cada llamada, la corrección StewardNotifier y VoipGlobalSyncJob necesitaban ambos. Diariamente, no cada hora: el cubo es una función del día, por lo que una garrafa por hora es 24x el escaneo cruzado para para una parte de un envío extra y 24 veces el radio de explosión. No, no. cambio de mapa de configuración - la URL de base de docs y el cron llevan los predeterminados de funcionamiento.
· DocsService
La escalera de recordatorio de la fecha y el barrido loteado y solo leído
El cubo es una función pura de (dueFe, hoy) y nunca de "cuando duramos enviado": UPCOMING-Dán para las compensaciones configuradas, DUE-TODAY, entonces PAST-DUE-P-floor(díasObdue / intervalo) ". Corriendo la barrida cinco veces en el día 9 por lo tanto, produce un cubo, y la afirmación del libro mayor es lo que lo deduplica no Estado es recordado en cualquier lugar. Las compensaciones son datos; nada en la clase sabe el número 3. incumple los períodos máximos a los períodos máximos, es decir, a 0, lo que significa UNLIMITED, porque decisión No4 dice que el recordatorio adueado se repite y una gorra silenciosa se ve exactamente como un barrido de trabajo mientras abandonaba al miembro más necesitado de perseguir. El límite es hoy en día. . max(Duros siguientes) 1, no ahora: el depósito predicado es dueA ANTES, por lo que un corte ahora () sólo encontraría filas atrasadas y todo La próxima mitad de la escalera nunca dispararía. Una transacción corta de solo lectura por rebanada, materializando completamente cada lote en Registros . Organización y Miembro son LAZY, por lo que el fqdn, la etiqueta, el nombre y la dirección se resuelven en su interior y la transacción es CIERRA antes del primer envío. El envío de EmailService está bloqueando HTTP para bloquear SMTP, y un lote sujetado un conexión Hikari para la longitud de cada viaje de ida y vuelta en ella, en un servicio que también sirve a WOPI. El barrido interpreta que ZERO escribe. No puede serializar-reintar, no puede estancarse contra el mago, y la paging es estable porque no está mutando las filas es paging over. dryRun resuelve y cuenta y no reclama nada - una carrera seca que Afirmó que quemaría cada cubo que inspeccionó y suprimiría silenciosamente la verdadera carrera. La grabadora gana despachoAllCounted junto al despacho sin cambios, porque LegalReminderSweepResultDto ya lleva reclamado y fallido y un solo enviado contar no puede llenarlos: en una repetición "reclamado 0 de 400" es la correcta, saludable contest y "reclamado 400, enviado 0" es un apagón, y el registro de demonios tiene que ser capaz para diferenciarlos.

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