Saltar al contenido
KAMOUniverse

Changelog

Qué hay de nuevo.

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

  1. · kamo-internal

    Añadir la pestaña Políticas y dejar de ofrecer chats el backend se niega

    Cuatro puntos de vista sobre un proyecto de reglamento, porque hay cuatro preguntas diferentes y ningún diseño único las responde a todas. Reglas es lo que hace cada regla, Matrix es Cómo es la organización, Simulator es lo que le pasa a dos nombradas La actividad es lo que la política está haciendo a todos los demás. Una regla es una sentencia, no una forma. Un administrador que ensambla el significado de seis bonitos etiquetados mal leerán su propia política; una leyendo "Las ventas pueden no hablar con todos en un departamento diferente" no lo hará. Cada editable frase es un chip, y las funciones de la oración viven en app/lib para que puedan ser ensayada en unidad: el vocabulario cruza ese límite como datos y no como un traductor, desde que vitest los dirige en el ambiente de los nodos. Los dos extremos de una regla de ida se dicen por separado a propósito. "Las ventas pueden comenzar chats con Ingeniería, que sólo pueden responder mientras esa ventana se mantiene abierta" describe lo que el motor hace; cualquier fraseo simétrico único describiría un Regla que no existe. Ordenar es lo que cuesta el primer partido-gana, por lo que la junta lo paga: el impacto del borrador se comprueba continuamente con lo que realmente es vivo, ensombrecido y las reglas duplicadas se nombran bajo la regla que afectan, y los programas de publicación Cuántos pares bloquea antes del botón. Llegan nuevas reglas y cada plantilla en modo auditoría, donde registran lo que habrían bloqueado y bloqueado Nada. La lista está anotada, no se filtra. Un miembro bloqueado mantiene su nombre, foto y presencia, y su botón de chat se explica en lugar de desaparecer. También crea /api/miembros/directorio, que el seleccionador de miembros adicionales de ChatBox tiene ha estado buscando desde que fue escrito - la ruta nunca existió, así que la petición 404'd y el diálogo hicieron una lista vacía sin que nada reportar un problema.

  2. · InitializerService

    Crear el esquema de la política de chat

    Seis cuadros: el reglamento de la versión, sus reglas y sus cláusulas, la respuesta subvenciones detrás de "sólo mientras su ventana está abierta", y el rastro de lo que la política se negó. Cada declaración está escrita para ser completa e idempotente, porque este corredor se aplica a mano con la misma frecuencia que se ejecuta. Empujando esta repo no despliega nada... no hay CI ni carga de trabajo, mientras que MediaService y SecurityService ambos ejecutar ddl-auto:neós, así que nada crea estas mesas en su startup tampoco. Si el DDL no ha aterrizado primero, esos servicios se despliegan limpiamente y luego langan Cada política lee. El DDL para este cambio se aplicó a Yugabyte antes de ambos empujuelas de servicio, y verificada al ejecutar las dos hospederas de la propia redesta de marchas del motor, más bien que al revisar el catálogo. La prueba adjunta compara a las entidades con estas declaraciones mediante reflexión. Dentro del inicializador Hibernate crea las tablas de las entidades antes cualquier corredor ejecuta, por lo que una columna que falta aquí es invisible en este lado y fatal en el otro.

  3. · SecurityService

    Anota la lista de miembros con su veredicto de política de chat

    SecurityService sirve a la lista de la interfaz de la interfaz de IU está construida, por lo que tiene que respuesta con los mismos veredictos con los que MediaService hace cumplir - uno compartido evaluador, o el producto ofrece conversaciones el backend entonces se niega y Lee como una charla rota en lugar de como una política. La lista está anotada, nunca se filtra. Un miembro que bloquea la política mantiene su nombre, foto y presencia y sólo pierde el viaje de la charla, que luego lleva la propia explicación de la organización. Esconderlos habría sido menos trabajo y habría hecho mentir la lista sobre quién trabaja aquí. Veredictos para toda la lista se resuelven en un pase de una instantánea en caché. Pedir por miembro habría hecho una evaluación - y en un caché frío, una consulta - dentro de un bucle que ya funciona una vez por colega. Una lectura de la política que fracasa deja cada fila sin anotar en lugar de fallar en la lista: el sendero de envío es todavía la autoridad, por lo que el costo es una asequibilidad confusa, no una política.

  4. · MediaService

    Aplica la política de chat de org, y cierra dos agujeros en los que se sentó

    Aplica la política en los tres lugares que una conversación puede comenzar o continuar: creación de sesión, agrega el miembro, y el sendero de envío. Una habitación no es policíaizada por un par Par... la puerta de invitación ES la puerta de mensajería directa, para que puedas traer a alguien en una habitación exactamente cuando podrías haberles enviado mensajes, y una habitación que se encoge volver a dos miembros bloqueados se lee como mensaje directo. Dos agujeros preexistentes estaban directamente bajo este trabajo y se fijan con él. El indicador de envío nunca comprobó que el remitente perteneciera a la sesión, así que cualquier Miembro autenticado podría publicar en cualquier guijón de sesión que pudieran adivinar - un la puerta de la política habría sido decorativa sin ella. Y los indicadores de mecanizado estaban publicado en un desnudo /topic/chat/cleto que todo cliente conectado en el organización suscrito; el alcance de ellos por sesión detiene la fuga y detiene una Par separado de la señal entre sí. Responder descarte "respuesta sólo mientras su ventana está abierta": los informes del navegador lo que puede ver y el servidor decide, con una gracia que sobrevive a un perdido vencido y no un portátil cerrado. Su emisión es por miembro y custodiada, desde entonces una subvención falsificada desbloquearía a un compositor la política bloqueada. La redacción del administrador es su propia frijol y su propia transacción. En YugabyteDB una lectura después de que una escritura en una transacción plantea 40001 y aborta todo a su alrededor, y un auto-invocado "Transactional" no es un límite en absoluto - así que los ahorros se leen antes, escribe, y vuelve a leer una sola vez que se ha comprometido.

  5. · kamo-shared-library

    Añadir el motor de política de chat org

    Decide si un miembro puede abrir una conversación con otro, y si pueden enviar a uno que existe. Reglas son una lista ordenada sobre ordenado pares y el primer partido decide, así que cada veredicto nombra exactamente una regla... que es lo que permite a la configuración de la interfaz descúvense en lugar de pedir una administrador para confiar en él. La regla de orientación es la parte que se rompe la carga. Una norma escrita SUBJECT - TARGET se evalúa desde ambos extremos: hacia adelante el actor es el lado del que está escrito, al otro lado del que está escrito. Sin eso, "Las ventas pueden enviar un mensaje Ingeniería de ida" coincidiría cuando un vendedor actúa y cae a lo que sea que se siente abajo cuando un ingeniero lo hace - no hacer nada en el único La dirección existe para restringir. La ausencia nunca es acuerdo. Una cláusula de departamento, título o gerente no puede coincidir un miembro sencillo, e inaplicabilidad cortocircuitos antes de la negación, así que "no en ventas" no barre en todos los suscriptores que no tienen departamento en absoluto. El evaluador no ocupa repositorio y no abre ninguna sesión: dos consultas construyen un instantánea por-org, y cada veredicto después de eso se establece aritmética. Resolver un la cadena gestora a través de JPA habría sido una consulta por eslabón por miembro en profundidad sin límites, en un camino que corre cada vez que un alijo se enfría.

  6. · kamo-internal

    Reordenar las pestañas y pintar Binders y Subs Subs

    La tira lee Originales . Modificados . Común . Binders . Uploads, que pone las tres vistas de los documentos juntos y los dos destinos después de ellos. Las papelas y subidas ahora llevan esa lectura visualmente: marrón y azul fondos con etiquetas blancas e iconos. El "&&&- en Tab pintado es carga. El padre Tabs estilo a sus hijos a través de "& .MuiTab-root", un selector descendiente que supera a una llaga per-tab sx, así que un solo "&- pierde la cascada y la etiqueta se mantiene gris en el nuevo antecedentes.

  7. · kamo-internal

    Digamos que cuando no se pudo añadir un documento seleccionado

    La carpeta de Docs Selected se salta un documento que no puede sostener legalmente en lugar de fallar toda la sincronización, que es la derecha, pero lo hizo en silencio, así que un aglutinante con la posesión de menos documentos que el miembro leído como la característica rota, y el único lugar donde existía la razón era el registro DocsService.

  8. · kamo-internal

    Dobizar la pestaña Modificar en Binders

    La tira es ahora Originales. Binders. Modificados . Común . Subsores. Modificar es Se fue: todo lo que hizo. Organizar los documentos comprobados, previsualizarlos, fusionarse en un PDF o un ZIP. El organizador ya lo hizo mejor, y lo hizo para una lista que podrías llevar. Lo que los conecta es una entrada de "Docs seleccionados" en la parte superior de la carpeta lista. Mantiene lo que se comprueba en la red y se le vuelve a escribir en cada cambio de selección, por lo que un miembro comprueba los documentos en Originals, abre Binders, y los encuentra allí en orden. No puede ser renombrado, borrado o compartido; botón que lo guarda, "Save As Binder", es el mismo duplicado el editor ya tenía, reetiquetado en cualquier otra carpeta que lea "Duplicar esto Binder", y ambos hacen una nueva carpeta de la propia del miembro sosteniendo todo el Abando una bodega. Descargar ahora ofrece ZIP junto con el PDF fusionado, que es La última cosa que la pestaña Modifica podría hacer que una carpeta no pudo. Cae modificadas PublicadosFambiarios de Diferencia, dos documentos por lado, y el botón muerto de la barra de herramientas "Preparar y descargar" ahora abre el aglutinante Su etiqueta siempre fue descriptor.

  9. · DocsService

    Servir y sincronizar el aglutinante de Docs Selected

    POST /api/docs/binders/scratch obtiene la carpeta de Docs seleccionados del llamante para una colección, creándola en primer uso, y reemplaza sus documentos por la selección de cuadrícula en el mismo viaje de ida y vuelta. El organizador llama a esto en cada cambio de selección, y dos llamadas por casilla de verificación es la diferencia entre a encuadernación que se mantiene al tanto de la red y una que la retrasa visiblemente. La sincronización mantiene cada documento aún seleccionado en el cargo de miembro arreglarlo y añadir los nuevos; separadores y páginas generadas son nunca tocado, porque son las propias adiciones del miembro en lugar de un reflejo de la rejilla. Un documento que legalmente no puede unirse a la carpeta es saltar en lugar de fallar toda la sincronización, una selección de cuadrícula no se comisaria, Así que una mala fila no debe impedir que la otra veintena llegue. El ordenamiento las reglas son una función pura para que puedan ser probadas sin una base de datos. Se rechaza la promoción de renombre, supresión, participación y plantilla para ello, y las reglas para lo que puede convertirse en un artículo DOC ahora vive en un ayudante así que añadir a mano y La sincronización no puede separarse en lo que aceptan.

  10. · InitializerService

    Añadir aglutinantes.es.sraytch

    Cuatro declaraciones en lugar de una ALTER: carpetas están pobladas, y Yugabyte rechaza todo el ADD COLUMN ... NO NULL en lugar de la cláusula, así que la columna llega anulable, se vuelve a llenar, gana su DEFAULT, y sólo entonces está apretado. Orden (0) por la convención de columnas-add - la entidad de la lib compartida Ahora los mapas es rasca, así que cualquier corredor que carga un Binder antes de que este muera en una columna que aún no existe.

  11. · kamo-shared-library

    Marque la carpeta de Docs Selected Selected del miembro

    aglutinación.esraytch flags la única carpeta por (propipropiructor, colección) los documentos son la selección de la cuadrícula DocManager en lugar de una lista comisariada. Es una carpeta ordinaria en todos los demás aspectos, por lo que la consulta de la lista tiene que excluirlo a mano: el organizador lo pina por encima de la lista, y dejarlo en él lo pondría allí dos veces y peor -ofrecérselo en cada pico de "añade a carpeta". La búsqueda devuelve una lista en lugar de una Opcional porque dos pestañas abriendo el El organizador juntos puede perderse y ambos insertarse; el llamante toma el más viejo.

  12. · kamo-internal

    Ensamblar el récord de plomo en lugar de sostenerlo detrás de un spinner

    El estado de carga de la pestaña Detalles era una carta de catorce filas de pulso MUI grises. una forma que el panel nunca toma, en un reloj por elemento, reemplazado al por mayor por un El diseño no se parece en nada. Y esperó en "loading.insights": un disco que ya había llegado sentado detrás de los marcadores de posiciones hasta una comunicación no relacionada Regresó la cuenta. El panel ahora muestra su propio diseño mientras espera cuatro fichas estadísticas, el tiras de llamadas, dos filas de tres cartas, en los anchos reales de luz de marca cruzando la página en una diagonal, y las cartas reales desmenuzadas de sus fantasmas en ese mismo orden, por lo que el registro resuelve a lo largo del camino el Luz viajada. Sólo las puertas de registro del panel; los conteos y la lista de tareas resolver dentro de sus propias baldosas, y los cristales del mercado extienden la entrada orden cuando su configuración aterrice. El masthead se une a la misma secuencia: un fantasma en forma de nombre en lugar de la palabra "Cargando", y un carril de tres segmentos en su fondo de su fondo, actividad, configuración donde un segmento llena de blanco el momento en que su trae tierras. Real llegadas, no un temporizador. Está absolutamente posicionado por lo que la pestaña subraya estancias Flush con el contenido que etiqueta. Un esqueleto que nunca se resuelve es el peor estado final que tiene un diseño de carga, así que un disco fallido ahora da paso a lo que pasó y un Retry que vuelve a ejecutar el apertura de ofertas, en las pestañas Detalles y Hipoteca ambos. La coreografía de la "kmail-*" en globals.css se convierte en la casa "kload-**" las mismas reglas, el mismo contrato de cámara reducida, más "kload-settle" para la entrega y los segmentos del carril. /messages, /notes y /network se mueven sin cambios. No hay nuevas teclas de i18n.

  13. · SecurityService

    Pide EmailService para volver a llenar el e-mail pasado de una pista

    Implementa LeadEmail de la biblioteca compartidaBackfillTrigger, así que ticking "Associate Pasados E-Mails w/ Lead" en una salvada de plomo llega al único servicio que puede leer buzones. Dos peligros manejados aquí en lugar de en LeadService. Espera el compromiso: los partidos de relleno trasero contra el punto de contacto la salvación sigue escribiendo, y disparó en línea que correría contra una fila que ninguna otra conexión puede ver todavía, encontrar nada, y reportar el éxito. Y nunca hace esperar al miembro: incluso aceptar el trabajo es un salto a otro servicio que puede estar abajo, así que sale en un hilo de fondo con corto tiempo de espera. El peor resultado de que dispone el miembro es una pista que se salvó normalmente.

  14. · EmailService

    Escanear los buzones de la org para el correo anterior de una pista en el correo electrónico a petición

    Sirve la casilla "Associar pasados e-mails w/ plomo". Dada una pista y la Dirección recién grabada en ella, lee INBOX y Enviado de cada buzón en ese La organización principal hace un año y adjunta cualquier cosa que lleve la dirección. Cada guardia que se aplica la ruta automática todavía se aplica, porque ambos caminos ahora compartir una clasificación: se rechaza un org cuyas direcciones no pueden clasificarse, un hilo puramente interno se rechaza, y una dirección de la empresa nunca es compatible candidato, así que marca la casilla en una pista cuyo e-mail es noreply-org-domain. todavía no asocia nada en lugar de entregar ese liderato todo el correo de la compañía Corriente. Además de ellos, la propia dirección del líder tiene que estar en el mensaje. Huelga el hilo de petición y de un solo hilo: toda una organización Los buzones tardan mucho más en leerse de lo que un ahorro de plomo puede bloquear, y el correo el servidor permite sólo un púmulo de conexiones por usuario para toda la cápsula, así que La concurrencia aquí moriría de hambre el barrido vivo en lugar de ir más rápido. El respuestas de endpoint 202 "queued", nunca "encontrar algo" - el miembro observa el La pestaña correos corriculas. La selección de carpetas se traslada a MailboxFolderScope para que el barrido y el relleno trasero no puede derivar de donde vive el correo; una línea de tiempo de la que dependía de qué El camino encontrado un mensaje primero sería peor que cualquiera de los dos.

  15. · kamo-shared-library

    Deje que un correo de reclamación principal que sea anterior a su dirección de correo electrónico

    El emparejamiento es puntual por diseño. Un punto de contacto sólo reclama tráfico dentro de su ventana, por lo que editar una pista no puede reescribir retroactivamente la historia. El costo es que una pista entró después de que comenzó la conversación nunca puede mostrar que conversación, y el miembro no tiene forma de decir "esta dirección ya estaba la suya". linkHistoric es así. Ensancha exactamente una cosa, la ventana, y nada de lo contrario: la dirección debe seguir siendo un punto de contacto de esa pista exacta, en ese exacto org, en alguna ventana. No puede inventar un partido, cruzar un inquilino, o llegar a un plomo que nunca sostuvo la dirección. las pruebas pinen cada uno de ellos, porque todo tres fallan en silencio, como el correo adjunto a la pista equivocada se lee como una pista que Realmente nos escribió. LeadService gana la costura que lleva la intención del miembro (una opcional LeadEmailBackfillTrigger, ausente en servicios sin acceso a correo) y ambos Solicitar DTOs ganan la bandera. La bandera deliberadamente no persiste: describe una salvada, y todas las llamadas existentes - importaciones, puntos de ingestor, MeridianLink parches, el auto-salvado de la barrer de la cerradora no envía nada y así no adquiere escaneo de buzón que nunca pidió.

  16. · kamo-internal

    Oferta para asociar correo electrónico pasado cuando se establece la dirección de una pista

    Correo se combina con una ventaja estrictamente puntual: una dirección única reclama tráfico desde el momento en que se graba, por lo que la edición de una pista hoy no puede Reescribiría cuyo correo la semana pasada fue. Eso es correcto para la ruta automática y incorrecto para el caso de que un miembro realmente golpea - entrando en una pista que ya tienen ha estado enviando un correo electrónico, y luego encontrando la pestaña Emails vacía y el hilo aparentemente perdidos. Así que ambos lugares se puede establecer una dirección de una pista. /leads/view/-Eidá y la nueva forma de líder ahora muestran un "Pasociado pasado" no empatado E-Mails w/ Líder" caja a su lado. Ticking le pide al servidor que vaya a buscar; Dejándolo solo no cambia nada. La caja aparece sólo una vez que una dirección ha sido mecanografiado, y nunca recuerda que estés mareado: describe una salvada, no la pista, para que no se persista y el constructor de listas blancas lo omite por completo cuando falso en lugar de enviar un falso el auto-salvo de la barredora de la cerradura volvería a jugar como un elección.

  17. · kamo-internal

    Un agente que selige para la asignación, reservas y el filtro

    El control del agente asignado en el panel de asignación de una pista era un componente local en LeadViewClient. Otros dos lugares lo querían exactamente, así que se mueve a **************** y toma el diálogo de la selección con él. El panel de asignación no cambia en mirada y comportamiento. el código. Reserve Opportunity - un miembro que tiene EDIT-OPPORTUNIDADES, la derecha que las puertas gestionar oportunidades en /leads/oportunidades/reserva, ahora consigue un agente de ventas campo para nombrar para quién es la reserva. Se abre a sí mismos, así que archivar su La petición propia no cuesta nada extra. A diferencia del agente asignado de la pista no puede ser vaciado: una reserva es la afirmación de alguien, y una no reconocida no es un estado el el registro puede sostenerse. Ese es el botón claro en el botón. el campo, y sin Remove en el seleccionador. El filtro /leads Agent fue un Selecto alimentado por una oferta de todo el personal directorio, que es de donde vinieron sus opciones y por qué sólo podría ofrecer una página de un org que puede llegar a cinco figuras de personas. Se mueve en lo mismo. El seleccionador, que busca una página a la vez, por lo que el filtro ahora puede llegar a cada nombre. y el directorio completo, su caché de módulo y su filtro ACTIVE se han ido Con ella, la misma limpieza que el panel de asignación ya hizo. Las respuestas útiles de ese filtro incluyen tres que no son personas, así que MemberPickerDialog crece .quickOptions: filas pegadas por encima de los resultados, aquí Yo primero, luego todos los plomos, luego Líderes no asignados para un miembro permitido ver esos. Yo mismo lidera porque es la respuesta que más se busca a menudo y la que La búsqueda de directorios hace más difícil llegar a la mano. de lo contrario escriba su propio nombre y Eligete de los homónimos. Los centinelas ************* se mueven en liderGridQuery al lado el mapeo que los lee. Estaban encadenando literales en ambos lugares, y un la deriva entre los dos no dejaría de compilarse: la consulta trataría el centinela no reconocida como identificación de miembro, filtrar a un miembro que nadie es, y mostrar un la rejilla vacía, que dice como "no tienes pistas" en lugar de como un error. La sesión lleva un identificador de miembro y un correo electrónico, pero sin nombre de visualización, así que sembrando el El formulario de reserva con "usted" lo resuelve una vez a través de la búsqueda del directorio. El partido está en el id del miembro, nunca en el correo electrónico que produjo la página: un buzón compartido Devuelve a varias personas, y tomar la primera presentaría una oportunidad para un colega que nunca lo pidió. También gotas getAgentFilterMemberId, que no tenía llamadas y parseInt'd a Dir de 19 dígitos.

  18. · SecurityService

    Aceptar una reserva formulada para otro agente

    Mensaje ************* ahora honores enBehalfDeMemberId, cerradas en EDIT-OPPORTUNIDADES - la derecha que las puertas gestionan oportunidades en el lista reservada, y ya la derecha necesaria para mover una oportunidad entre agentes después del hecho. Sólo CREATE-OPPORTUNITIES todavía sólo archiva tus archivos propios. Una persona que llama sin ella que nombre un agente es REFUSADO en lugar de tener el campo caídos. La grabación silenciosamente de la reserva bajo su propio nombre atribuiría un reclamo a alguien que nunca lo hizo, y le mostraría al gerente una petición creen que solicitaron a otra persona. El agente nombrado es validado contra comisiónEligibleMemberIds. Se aplica a la piscina de PrimariAgentes y la misma piscina que ofrece el recolector. Estacionar una reserva sobre alguien que no puede abrir el liderato que reserva es inviable para ellos. El actor de la fila de historia sigue siendo la persona que actuó; la nota dice para quién era. Y debido a que REQUEST-SUBMITTED va a los aprobadores, el agente para el que fue presentado es añadida explícitamente - no son un aprobador, por lo que de lo contrario los primeros lo harían. escuchar de una afirmación en su nombre es su aprobación o negación. Requiere la migración de servicios KamoInitializerAgregar a CREATED-BY-MEMBER-ID para tener ejecutar primero, o la primera lectura de cualquier lanzamiento de reserva.

  19. · InitializerService

    Añadir ****************

    Registros que presentaron una reserva cuando ese no es el agente que nombra, así que alguien gestionar oportunidades puede elevarse a uno en nombre de un agente de ventas sin el registro tener que reclamar que el agente lo hizo ellos mismos. Nullable sin relleno, por la razón PRIMARY-AGENT-MEMBER-ID no tomó ninguno: null null significa "el solicitante lo presentó ellos mismos", cada fila anterior a esta columna genuinamente se auto-llenó, y copiar al solicitante en él inventaría un hecho y puso una línea de "Archular por" en la historia que nadie realizó. Sin índice, nada filtros o se ordena, así que uno costaría cada escritura y compra No lea. Esto debe ser desplegado y ejecutar ANTES del cambio de seguridadEl servicio que mapea el columna: servicios run ddl-auto:none, y Hibernate nombra cada columna mapeada en su SELECT, por lo que el servicio empezaría sano y luego se pondría en la primera lectura de cualquier reserva.

  20. · kamo-shared-library

    Deja que un gerente levante una reserva para un agente

    Alguien que gestiona oportunidades ahora puede presentar una solicitud de reserva en una venta agente. CreateReservationReservationRequest continúa enBehalfOfMemberId for it. El agente se convierte en REQUESTED-BY-MEMBER-ID, no la persona que lo presentó. Cada regla aguas abajo de la columna que puede pedir una extensión, quién la comisión sigue, lo que el filtro de agente de la lista reservada coincide La afirmación tiene que sentarse donde esas reglas miran, y realmente es la afirmación del agente. Quién se sentó en el teclado va en un nuevo CREATED-BY-MEMBER-ID en lugar de ser doblada en la misma columna, por lo que ninguno de los dos hechos tiene que ser inferido del otro. En términos pleito, y nulos mantiene su propio significado: el solicitante lo presentó ellos mismos. PRIMARY-AGENT-MEMBER-ID se deja deliberadamente nula en este camino. Significa "a un aprobador movió esto al agente que preguntó", y la lista reservada rinde un amber "Reasignado" línea para ello, pero una solicitud presentada para un agente nunca fue Se alejó de cualquiera, así que "reassigned" se queda falso y "onBehalf" dice lo cierto en cambio.

  21. · kamo-internal

    Ocultar los controles de balanza que no pueden utilizar de forma gratuita para todos

    Balance de crédito, asignación diaria y Max Balance actúan sobre un saldo concedido, y un producto de la FFA no tiene aceptación allí mentas y gasta su propio crédito. Dejando ellos editables invitó a un gerente a establecer números que nunca pudieron unirse. Ahora se vuelven como un chip apagado con una punta de herramienta que lo dice. Max Daily Spend se queda editable y es la verdadera palanca sobre un producto de la FFA: el backend cuenta ahora con un La aceptación de la FFA como gasto, por lo que el tope también se aplica allí.

  22. · kamo-shared-library

    Haz que la aceptación-para todos sea gastable, para que se pueda limitar

    La FFA eludió de plano el sistema de crédito, que dejó a un directivo sin palanca de él: Max Daily Spend se sentó detrás si (Effa) y no podía tapar un producto de la FFA, y "aceptado hoy" no tenía filas que contar porque nunca se gastó nada. Una aceptación de la FFA ahora atribute un crédito y la gasta en la delantera en el mismo bloque como reclamo, por lo que el registro de gasto siempre existe y nunca puede derivarse de la asignación. Max Daily Spend se mueve fuera de la sucursal de solo crédito y se aplica a ambas vías - libre para todos significa que el miembro no se le concedió un saldo a pagar de, no es que un gerente no pueda atar cuántos toman en un día. Deliberadamente todavía solo con crédito: el interruptor de crédito de toda la oC y el chequeo de saldo. La FFA no tiene un equilibrio al que no estar. El tope se comprueba después de eso, así que un crédito El miembro que está quebrado y con tope sigue informando de INSUFFICIENT-CREDITS. Nota AceptaResult.créditoSpent es ahora cierto en la ruta de la FFA (fue documentado como siempre falso). Es exacto, un crédito realmente se consume y llega a la aceptar la respuesta y la publicaciónAsignada carga útil de NATS. LeadAssignmentType todavía graba AUTO-ASSIGN para la FFA, así que la historia mantiene a los dos separados.

  23. · kamo-internal

    Nombre el solicitante, mover la línea org, acorte el botón Abrir Org

    Tres ajustes en las superficies de soporte. "Open org como usuario del sistema" es ahora "Open Org", sentado inmediatamente después de asignar/reassign en lugar de al final de la fila - pertenece a la misma pregunta que esas respuestas: esto es la otra cosa que haces cuando un billete aterriza en tu escritorio y la respuesta está dentro de la El inquilino del cliente. El tooltip todavía detalla que la pestaña se abre como el Usuario del Sistema, que la etiqueta corta cae. Mantenga su peso; es una puerta en la de otra persona. negocios y no deben leer como un hermano del abandono prioritario. La organización se mueve fuera de la cabecera de entrada y a la izquierda del "Este billete" fila, que deja la cabecera para el billete en sí. Con varias pestañas abren la barra de pestañas lleva el control de boleto nuevo en su lugar, por lo que la fila se hace para la organización por sí sola. Cada pestaña puede ser un cliente diferente, y es exactamente cuando vale la pena decirlo. El El título de la propia ventana ahora dice "Eperson" - . . . . . . . . . . . . . . . . . . . . El visitante-nombrar ruta empuja un título también y una segunda expresión es cómo el org silenciosamente cae en el momento en que un visitante anónimo da su nombre. Chats - Las filas de apoyo se titulan después de la persona que se pregunta, siempre. Abrir un billete se une a su chat, así que uno ocupado acumula agentes, y te titulación del otro Los participantes renombraron la fila cada vez que un colega lo miraba igual conversación apareciendo como una persona diferente. El nombre del solicitante ahora está de acuerdo con la cara ya en la fila.

  24. · kamo-internal

    Diga qué reloj está en marcha el diálogo de evento, y mostrar la hora de inicio

    Cuatro cosas que el compositor se equivocó, en /calendario y en la página principal por igual. La zona era del navegador. Eso es un hecho sobre el portátil, no sobre el miembro: alguien cuyo perfil dice Eastern y que está trabajando desde Denver todavía reserva su día en el Este, y el diálogo semilla "3pm Mountain" con nada en la pantalla para revelarlo. Nuevos eventos ahora se componen en el propio miembro zona de perfil, resuelta a través de la zona horaria/eficaz de SecurityService, que ha existido desde agosto y no tenía ninguna ruta Siguiente delante, así que cada llamada 404'd dentro de Siguiente y cayó de nuevo a UTC. La zona se nombra en el valor, en el recolector, y junto a la fecha en la cabecera, en el desplazamiento realmente en vigor en la fecha del evento en lugar de la de hoy. Los campos de salida y final se sentaron uno al lado del otro con una flecha entre ellos y no etiquetas en total, dos cajas sin previo aviso que comparten el ancho de la tarjeta a ese ancho una fecha-entrada-entrada local tiene menos espacio de la necesidad de su propio contenido, por lo que la lectura estaba cortado. Con la tarjeta titulada "Start time" y las únicas palabras visibles siendo los botones hoy / Mañana / All-day a su lado, nada en la pantalla dijo un comienzo había tiempo para ser ajustado. Ahora están apilados de ancho, cada uno de ellos nombrado, y La tarjeta se dirige "Cuando". Un nuevo evento comenzó en la cima de la hora actual, que es en el pasado para cincuenta y nueve minutos de cada sesenta; la llamada de la página principal agregó una hora y guardó los minutos impares, ofreciendo 4:37pm. Ambos usan ahora por defectoEventStart. una hora fuera, redondeada hasta el cuarto de hora. El calendario por defecto era cualquiera que fuera el servicio listado primero, y el servicio enumera el calendario compartido de la organización primero a propósito, porque eso es orden de lectura en la barra lateral donde se trata de un filtro. Aquí la primera entrada también es el predeterminado, por lo que un nuevo evento fue publicado en todo el mundo a menos que el miembro Noté y optó por una decisión que nunca tomaron. Las primarias del propio miembro El calendario lidera ahora, y el compartido lleva una insignia "amplia a ancho". El compositor principal ya no siembra en silencio la zona principal; ofrece como un interruptor de un solo toque junto al propio miembro. Su contexto de compositor es memoizada, que es cargar en lugar de ordenar, construido en línea era un objeto de cada render, así que los calendarios que llegan de la red a mitad de mecenting restablecer el diálogo y desechar lo que el miembro había entrado.

  25. · SecurityService

    Publicar la declaración de Hibernate cuenta a Prometeo

    /actuador/prometido ya llevaba jdbc* y hikaricp*, pero no hibernado*, porque Spring Boot 3 solo configura automáticamente esas métricas cuando ******************* está en el camino de clase. Añadido, más hibernar.gente.estadística. La razón es concreta. La auditoría de este servicio para las consultas no1 tuvo que hacerse por grepping para las navegaciones de asociación, y ese método está equivocado en ambos direcciones: sobrecuenta, porque un nombre asociativo como 'vendor' o 'usuario' es perezoso en algunas entidades y ansioso por otros (9 de 67 sitios reportados resultó estar ansioso y no necesitar nada), y no lo hace mal, porque ve .getX().getY() pero no iteración sobre una colección perezosa que es la mayor parte de la una verdadera superficie. Hibernate-statements-total responde la misma pregunta por medición. Un punto final emitiendo 200 declaraciones por llamada es visible cualquier forma que tome el código, y El estar abierto en la vista significa que cada una de esas cargas perezosas es silenciosa de otra manera. Cuesta un poco por ciento. Vale la pena en un servicio donde la última auditoría encontró cuatro aparte O(rows) endpoints.

  26. · kamo-internal

    Mostrar la foto del solicitante en cada fila de chat de soporte

    Todas las filas en Chats - El apoyo llevaba el mismo glifo azul, que no ayuda en todo cuando la lista es lo que escaneas para decidir qué recoger. La cara es ahora la la persona que preguntó. El glifo sobrevive exactamente por un caso, y es un hecho del servidor más bien que una suposición: un visitante anónimo de chat web no tiene registro de miembros, así que el boleto nombra como solicitante al miembro del SISTEMA de la org. Mostrando esa foto pondría a la persona equivocada en la conversación, y en el propio marketing de la plataforma sería la cara de quien esté leyendo la lista. El directorio de org del espesor sigue siendo consultado primero, porque es la copia en vivo. el miembro que cambió su foto hace un momento ya está justo ahí. La URL del servidor es la retrotrae que cubre los solicitantes en otras organizaciones, que Ese directorio nunca ha oído hablar. Las iniciales deliberadamente NO retroceden al título de la fila: en una fila de apoyo el el título es la contraparte, por lo que un solicitante que el servidor no podía nombrar se le daría las iniciales del agente de apoyo, en el avatar que existe para decir quién pregunta. Con ni un nombre ni una foto no hay persona que dibujar, y el glifo es honesto.

  27. · MediaService

    Pon la cara y el nombre del solicitante en cada fila de chat de apoyo

    Una fila de chats de apoyo mostró el mismo glifo de soporte en cada línea, así que una cola de era una pared de círculos azules idénticos. La cara que la gente realmente escáner es quien pregunte, por lo que la fila ahora lleva el identificador, el nombre de visualización y la foto del solicitante. La foto se resuelve aquí en lugar de dejarlo al cliente, que es el todo dificultad: cualquier otro avatar en esta alimentación se vuelve a llenar desde el propio espejo directorio de organización, y un solicitante de soporte está en el escritorio de la plataforma siempre El miembro de otra persona, para que el directorio no devuelva nada para exactamente las filas esto - Sí. Dos lecturas por lotes cubren una página, con el mismo espíritu que el visitante pre-averiguación Junto a ellos. La fila de avatar es releída por id en lugar de ser sacado de miembro.getAvatar (): Avatar es una jerarquía JOINED y la asociación es perezosa, así que lo que eso devuelve es un proxy del tipo BASE. instanceof AvatarPhoto es falso a través de él incluso después de inicialización, y cada foto subida sería buscada en el vector Avatar Creator camino. Cargando por id da la subclase de hormigón y su extensión de archivo. requestorIsAmbiguous es el caso por el que el glifo sobrevive, y es un caso específico más que un seto: un visitante anónimo de chat web no tiene registro de miembros, así que el El propietario como solicitante es el nombre del billete. Su foto pondría a la persona equivocada en la conversación, y en el propio marketing de la plataforma sería la cara de quien esté leyendo la lista.

  28. · kamo-internal

    Cuenta de la piscina con el encabezado del producto, aceptado hoy por miembro

    Los plomos Disponibles se renderizó en cada hilera de miembros de un grupo de productos, pero es un propiedad de la piscina (producto, mercado) - el mismo número repetido a la baja el columna para tantos miembros como las reglas. Se mueve a la cabecera del grupo, una vez, donde pertenece. La columna liberada ahora muestra lo que realmente faltaba: cuántas pistas cada miembro ha aceptado hasta ahora hoy, pronunciado como "3 / 10" contra su Max Daily Spend por lo tanto Queda el espacio que queda es legible de un vistazo. El conteo proviene de /manage, que resuelve "hoy" de la misma manera que el tope hace la propia zona horaria del miembro.

  29. · kamo-shared-library

    Resolver la URL de la foto de un miembro de la biblioteca compartida

    La lista de chats y de apoyo está a punto de mostrar la cara del solicitante y un apoyo El solicitante está en el propio escritorio de la plataforma, siempre miembro de otra persona. Cada uno otro avatar en ese feed se vuelve a llenar en el cliente de la org de VIEWER directorio, que nunca ha oído hablar de ellos, por lo que este tiene que ser resuelto lado del servidor por MediaService. Eso significa que un segundo servicio nombrando un objeto avatar, y la ruta del objeto es exactamente la cosa que no debe existir dos veces: solía ser prefijado con cualquier anfitrión el petición llegó, por lo que una foto subió en el dominio 404'd de un org cuando se lee de otro, degradante para las iniciales y pareciendo "no foto" en lugar de como un bicho. Así que AvatarObjectPaths se mueve aquí y la copia de SecurityService se convierte en una delegante alias no tienen cuerdas propias. MiembroAvatarUrls añade el resto de la resolución: miembro-sobredilla ante el usuario por defecto, foto vs Avatar Creator decidido por el DISCRIMINATOR antes de la instancia de a la perezosa alvatar cargado es un proxy del tipo base, por lo que instance de de enviar cada cargado foto a la ruta vectorial y host . dominio tema. Un huéspe que no es un dominio No produce ninguna URL en lugar de una conjetura: ninguna imagen se degrada a las iniciales, una rota no. También añade REQUESTOR-ID a las dos proyecciones de chat-aliado de soporte.

  30. · SecurityService

    Devuelve el recuento aceptado de cada miembro por producto

    Manage-Credits muestra Max Daily Spend pero nada sobre cuánto de él se utiliza, para que un gerente no pudiera decir si un miembro era una pista de su gorra o había no empezó. /manage ahora devuelta aceptadoHoy miembro con llaveId::vendorProductId. "Hoy" es resuelto exactamente como CreditLeadAssignmentService lo resuelve al hacer cumplir el tapa de la propia zona horaria del miembro, de principios de hoy hasta ahora, contando lo mismo LeadCredit.datePruas de hospenador - por lo que la cifra es literalmente el número que el tapón es probado en lugar de una segunda opinión sobre lo que es un día. Una consulta agrupada por miembro, no uno por miembro x producto. Nota FFA productos report 0: la aceptación allí no gasta crédito, y el tope sí tampoco se aplican a ellos (todo el bloque de crédito está detrás de si (Effa)), por lo que el Dos columnas se mantiene consistente.

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