Ir para o conteúdo
KAMOUniverse

Changelog

O que há de novo.

Cada melhoria para a plataforma, como ele envia.

  1. · kamo-shared-library

    Resolver o direito de aplicação por ServiceType; renomear LOS para MLOS

    Título resolvido ServiceType.name () contra **************************** Os códigos do catálogo são códigos de marketing (USERS, VIDEO CONF, HR SYSTEM, ...) e nunca corresponderam, assim planoFeatureIncluída falta-linha padrão concedido cada aplicativo em cada plano — o faturamento-para-aplicação A ligação estava inerte. As linhas de catálogo agora carregam um tipo serviço nullable digitado e a resolução passa para que um aplicativo possa ser renomeado sem mover o direito. - **************** coluna tipo serviço digitado (persistido como o ID). - Está bem. resolver por ServiceType; add-ons de honra através do anteriormente não lido ************* jsonb; comportamento perdido-linha atrás de kamo.entitlement.fail-open (default true até que a matriz do catálogo seja semeada). - Serviço de Assinatura: transporte de serviçosType through create/update/DTOs, and derivate feature code do nome quando omitido — o diálogo de configurações nunca enviou um, então cada criação a partir do A UI atingiu a restrição NOT NULL. - CommerceType: ligar cada vertical à sua aplicação exigida (MORTGAGE->MLOS, PERSONAL LOANS->LOS). - AppliedModelEnforcementService: getAllowedCommerceTypes intersecta o modelo de segurança allow-list com direito; assevereCommerceTypeAllowed já cobre criar e editar. - ServiceType: LOS -> MLOS mantendo id 14 (ORG FEATURES persiste o id, não o nome, então não migração de dados); novo LOS(25) para empréstimos pessoais — id 25 porque a reutilização de 14 Todas as linhas hipotecárias existentes. - RoleRightType: MLOS * reboot, ids 139-144 inalterado; LOS pessoal-empréstimo * adicionado em 190-195. - PhiModule. PLOS adicionado: o renome deixou o aplicativo de empréstimo pessoal mapeado para a hipoteca PHI módulo e hipoteca não mapeado, que compilou limpo.

  2. · kamo-internal

    E-mail de um membro de sua linha

    Adiciona uma acção de e- mail ao lado do chat, chamada e perfil numa linha de membros, abrindo o Ferramenta de mensagens com o destinatário já preenchido. Está escondida a menos que a org tenha e-mail habilitado, o visualizador detém o ACCESS MAIL, e o membro realmente tem um endereço no arquivo — uma ação que abre um compositor vazio é pior do que nenhuma ação. A permissão é resolvida uma vez no NavTopPanel em vez de por linha: quanto mais profundo useEmailAvailability () sonda custa uma OTK mais provedor e caixa de correio ida e volta, e este painel monta uma aplicação. Beneficiários passam como {initialData: { to: [email] } }. string[], então um plano {para: '...'} é deixado em silêncio e o compositor abre sem Beneficiário — a mesma armadilha documentos HexHeadPopover.

  3. · MediaService

    Aceitar 3 anexos GiB transmitindo-os para o armazenamento

    file.getBytes() não pode representar um upload tão grande — um array Java para apenas acima de 2 GiB — assim, cada passado de apego que morreu em um OutOfMemoryError independente de heap, e um 1 GB um precisava de uma alocação de 1 GB para armazenar um arquivo Spring já tinha Spooled ao disco. O MultipartFile agora vai para imagens como uma fonte reaberta e é canalizado directamente. Limites levantados para corresponder: multipart para 3GB por arquivo (3100MB por pedido, então o maior arquivo permitido não é rejeitado para o seu próprio limite e cabeçalhos) e media.attachments.max-bytes to 3 GiB. Multipart spools to an explicit 24Gi emptyDir em vez da camada do recipiente. Tomcat max-swallow-size é agora -1, então um o upload rejeitado recebe seu 4xx entregue em vez de uma conexão de reset.

  4. · kamo-shared-library

    Transferir o armazenamento com o conteúdo endereçado para que um objeto possa exceder o heap

    Os anexos de chat estão se movendo para um teto de 3 GiB. storeContentAddressed tomou um byte[], que não pode expressar isso em absoluto — um array Java pára em Integer. MAX VALOR — e MinIOStorageService.upload então buffered o objeto inteiro uma segunda vez para que pudesse Tente novamente a posição contra o nó seguinte. Adiciona um caminho de streaming ao lado de ambos: HashUtils.computDigests deriva Blake3 e SHA3-256 de uma passagem, uploadStreaming reabre uma entradaStreamSource por nó tentar em vez de segurar os bytes, e o novo storeContentEndereçado sobrecarga hashes, dedups e lojas sem nunca acumular o conteúdo. A memória máxima é a Tampão de peças MinIO em vez do tamanho do arquivo. É deliberadamente não @Transactional: armazenar gigabytes leva minutos, e a linha é publicado somente (isMissing=false) uma vez que o objeto é armazenado duravelmente, então um estoiro deixa o mesmo estado que o caminho do buffer.

  5. · kamo-internal

    Título do formulário hipotecário

    O formulário Loan/Borrower/Subject Property serve a cada mutuário no arquivo, de modo que o Os títulos de tab e painel agora vêm das traduções e lêem o(s) Emprestador(es). Empréstimo e A propriedade do assunto foi codificada em inglês e agora resolve-se através do next-intl também.

  6. · kamo-internal

    Conduzir o modelo de e-mail para fora do endereço De, atrás de um interruptor de ligar/desligar

    O seletor de modelos no rodapé do compositor desapareceu. Que modelo uma mensagem usa não é um Decisão separada de quem é enviada como: o endereço principal do membro assina-a como sendo caixa de correio do departamento assina-o como esse departamento com os dados de contato do departamento, o caixa de correio de contato da organização assina como a organização, e sinais de correio de outro membro Como esse membro. Tudo o que resta a escolher é se usar um em tudo, que agora é um mudar no mesmo canto. Desligá-lo envia o corpo exactamente como dactilografado. O editor mostrou uma assinatura nesse estado enquanto a mensagem enviada não tinha nenhuma, porque um modelo nulo caiu para DEFAULT CONFIG para o preview only; ele agora torna nu, então o que está na tela é o que sai. Também corrige o título do trabalho e departamento nunca aparecendo em uma assinatura composta — eles penduram EquipeMembro e chegar como trabalhoTítulo Oficial/trabalhoTítulo e departamentoTítulo, não trabalhoTítulo e departamento — e povoa a linha móvel que o usuárioCellPhone alterna já fechado.

  7. · kamo-internal

    Ofereça bilhetes de espera para cada agente disponível ao mesmo tempo

  8. · kamo-internal

    Teal aceita-pedido popup, visualmente distinto do alerta de chumbo

  9. · kamo-internal

    Mudar as caixas de correio do mesmo selecionador pesquisável que o compositor usa

    O interruptor foi a metade mais fraca do par: uma seleção segurando cada caixa de correio que o membro pode abrir, que para o acesso org-wide é cada caixa de correio em a org. Também chamado /acessível, que constrói todos eles sobre cada carregar página — uma consulta por membro e outra por caixa de correio. Agora um botão que mostra a caixa de correio aberta, abrindo o MailboxPickerDialog contra /sendível. Nada carrega toda a lista, e o interruptor e o De campo oferecem as mesmas caixas de correio sob os mesmos títulos porque eles ler o mesmo parâmetro de avaliação. Os nomes falsos são excluídos via aliases=false. Correio enviado a um país no caixa de correio por trás dele, então não há nada para abrir; toOpenableMailbox recusa Como segunda linha de defesa. Restauração da seleção está inalterada no comportamento: o texto da consulta já carrega o id e endereço, então o botão se etiqueta sem esperar uma pesquisa e só resolve o nome da exibição se for barato.

  10. · EmailService

    Deixar /sendable soltar o grupo alias para chamadas que abrem caixas de correio

    O interruptor de correio /mensages oferece o mesmo conjunto que o De campo, menos uma coisa: um nome falso não pode ser aberto. Correio para ele Aterra na caixa de correio, por isso não tem pastas e nada para mostrar. Excluido do lado do servidor em vez de filtrado pelo chamador para que os totais permaneçam honesto — um cliente caindo linhas de uma página iria relatar 'mostrando 24 de 41234' ao renderizar 21.

  11. · kamo-internal

    Máquina de decisão de aceitação pura e por membro soneca

  12. · kamo-internal

    Proxy o resumo da fila e os objetivos de reivindicação

  13. · kamo-internal

    Baixe o documento executado e escolha uma ordem de assinatura real

    O remetente não tinha nenhuma rota para o documento finalizado. EnvelopeResumo anunciou umDocumentUrl assinado apontando dentro do aplicativo de assinatura kamo BFF, autenticado por uma sessão de assinante — portanto, a única pessoa que poderia Foi o último assinante, durante quatro horas. Adiciona o Rota do proxy OTK e uma ação de download em cada envelope concluído. O diálogo também enviou roteamentoOrden 1, 2, 3..., que OLHOU ordenado e foi Nunca fui forçado. O ESigService aplica-o agora, por isso a escolha é explícita: Qualquer ordem (todos convidados juntos, o comportamento de hoje e o padrão) Ou um de cada vez. Recusas agora mostram sua razão em vez de "Action failed" — ESigService afirma-os em palavras e eles estavam sendo jogados fora — e reenviar / evitar estão escondidos onde o serviço só seria 409.

  14. · EmailService

    Visualizar variáveis para os modelos de assinatura eletrónica

    O editor de modelos de administrador renderiza todos os espaços em branco para uma chave com nenhum braço de amostraVariáveis, então os sete modelos de esígnio foram visualizados como uma página de lacunas vazias — incluindo os cinco novos avisos do ciclo de vida. Um braço partilhado para o ciclo de vida cinco, além de armas para o convite e o código step-up.

  15. · kamo-shared-library

    Os cinco modelos de email do ciclo de vida do envelope que nunca foram escritos

    Um envelope de assinatura eletrônica tinha exatamente dois modelos: o convite e o Código avançado. Nada existia para nada que acontecesse depois de um signatário. sinais — é por isso que o aplicativo assinante promete "uma cópia assinada será e-mail para todas as partes" e nenhum e-mail nunca foi enviado. Adiciona esign.envelope completed (cópia executada por cada parte), **************************** esign.signer decoderd, esign.envelope voided e esign.envelope expirado, com o CANONICAL KEYS entradas sem as quais cada envio é permanente 404. Também escapa do texto livre nos dois corpos de sinais existentes: TemplateRenderer substitui sem fuga, e um nome do destinatário, título do documento e mensagem digitada pela equipe são todos texto livre. As variantes simples permanecem fornecidas porque as linhas de per-org são apenas de inserção. EsignLifecycleTemplateTest pinos a constante -> chave pontilhada -> chave enviada triplo e que cada placeholder é um o remetente realmente preenche.

  16. · MediaService

    Decida a corrida de reivindicação de ticket com uma atualização condicional

  17. · kamo-internal

    Reconstruir as configurações de mercado hipotecário em sete abas coerentes

    A página de mercado MORTGAGE carregava quinze páginas, doze delas emprestadas, e vários responderam à mesma pergunta em dois lugares: hedging foi ligado No âmbito dos mercados de capitais, enquanto a sua tolerância vivia no âmbito das políticas, o serviço o modelo e os termos de manutenção foram separado restrição de canal enquanto as regras de canal permitido e canais proibidos, e A delegação foi colocada em três lugares sem nada para dizer qual ganhou. Agrupado pela pergunta que um operador está realmente respondendo: instituição modelo de negócio, autoridade de subscrição, licença offerings product enablement, regras de canal, sobreposições de risco 1 - 375 política de concorrência, política de concorrência, política de concorrência investidores investidores e sua delegação, sobreposições, entrega, compromisso postura de serviço, política de serviço automatização Autonomia de IA, paredes de confiança por estágio conexões de provedor de parceiros, diretório de fornecedores Onde uma configuração é genuinamente resolvido de vários lugares, a página agora diz isso em vez de deixar o operador para adivinhar: a seção autoridade declara o precedência da delegação, dicas de regra do canal dizem que uma regra de entrega do investidor bate eles, e o alvo de envio de serviço é rotulado como o padrão org. Cada seção é construída a partir de um novo configKit, substituindo cerca de cem linhas de encanamento duplicado de carga/salva/erro/barra por tabulação com uma concha de secção, Uma mesa, uma barra de poupança e uma torrada por tab. Licenças, sobreposições de risco e conexões do provedor ganham edição em linha — a API sempre apoiou, então corrigir um erro de digitação usado para excluir a linha. Os quatro subeditores investidores tornou-se um componente por trás de um controle segmentado, abrindo assim os custos de um investidor Um pedido em vez de quatro. Visão geral ganha uma leitura de perfil do emprestador com fio para LenderProfile, LenderProfileValidation and changeLog: três endpoints que existiam desde então a superfície foi construída e que nada nunca tinha chamado, então não havia como ver se um perfil validado ou quais os módulos que ligou. Links cunhados contra as lesmas velhas são remapeados em vez de silenciosamente aterrissagem em Visão geral, uma vez que o SettingsView resolve um desconhecido ?tab= to index 0.

  18. · kamo-internal

    Escolha o endereço De uma janela pesquisável, não uma lista

    A select cannot hold this list. Everything the /messages switcher offers is sendable, and for a member with ACCESS_ALL_MEMBER_MAILBOXES that is every mailbox in the org — tens of thousands in a large one. The composer now shows the current sender as a button and opens a picker that searches and pages on the server, so nothing loads the whole set. The picker shell is extracted from MemberPickerDialog, which already solved this for the org directory: debouncing, paging, out-of-order responses, infinite scroll, keyboard navigation, group headings, and the empty, error and loading screens. SearchablePickerDialog now owns all of it and takes a fetcher plus a row renderer. MemberPickerDialog is a wrapper over it with its props unchanged, so the manager field, chat member add and e-sign search are untouched; MailboxPickerDialog is the second wrapper. Group headings reuse the switcher's own translation keys, so the same mailbox cannot end up named two different things in two places. Composing as another member still offers that member's aliases: they are addresses on an identity rather than mailboxes, so the endpoint — which answers for the logged-in member — cannot know them. The composer merges them into the first page through the picker's fetcher hook.

  19. · EmailService

    Endpoint pesquisável, páginado para os endereços que um membro pode enviar de

    GET /api/email/mailboxes/enviar respostas à mesma pergunta que /acessível - cada endereço que o membro pode enviar como — mas como um fluxo fundido que é pesquisado e paged na base de dados. /acessível não pode servir um catador. Ela materializa cada grupo na íntegra, e Para um membro que detém ACESS ALL MEMBER MAILBOXES que significa caminhar cada membro na org e, em seguida, emitir uma consulta por membro e outro por Caixa de correio. Em cinco números de pessoal são dezenas de milhares de consultas e uma carga para combinar, em cada chamada. Apenas a cauda privilegiada é chamada no SQL; as caixas de correio do próprio membro, aliases e caixas de correio compartilhadas são contadas em Java e sempre classificar primeiro, então procurar seu próprio endereço nunca é respondido na página 40. Uma caixa de correio Atingível através de várias subvenções é listada uma vez, sob a mais estreita — a mesma regra que o compositor aplica, então nenhuma identidade aparece duas vezes. As linhas carregam o grupo de onde vieram e, para a caixa de correio de outro membro, seu proprietário, assim o cliente pode renderizar os mesmos cabeçalhos que o trocador de caixa de correio usa. A resolução do nome degrada- se exactamente como o MemberDisplayName; os dois têm de concorda ou a mesma pessoa lê de forma diferente nos dois lugares.

  20. · MediaService

    Comunique a fila de tickets de quem ligou

  21. · MediaService

    GET /types/{typeId}/slots para que o editor de configurações possa listar slots

    As configurações UI sempre obteve este caminho, mas apenas POST/PUT/DELETE foram mapeado, então a aba Fendas de Disponibilidade tem um 405 e renderizado vazio. Diferente /slots/disponível este devolve todos os slots ativos do tipo sem filtragem por aviso de reserva antecipada ou restrições de blog infantil — um administrador precisa ver o slots que eles configuraram, incluindo aqueles que ninguém pode reservar atualmente. Restrições andar ao longo em cada slot's criançaOrgRestrições, de modo que isso também substitui os /slots/restrições lidos que a UI estava tentando.

  22. · MediaService

    Propriedade do predicado do bilhete passível de pedido num serviço

  23. · kamo-internal

    Atribuir uma caixa de correio a um departamento e à organização

    O e- mail de contacto da janela do departamento era texto livre, pelo que poderia indicar um endereço org não possui. Torna-se um catador sobre as verdadeiras caixas de correio da org -- a mesma lista * *************ofertas, então "as caixas de correio atribuíveis" significa O mesmo conjunto onde quer que seja oferecido. Opcional, e "Nenhum" é tanto o padrão e como você não atribui; um botão claro no campo faz isso em um clique. Marcação de comportamento Informações de contato mantém seu campo de texto de email exatamente como era e ganha o mesmo catador abaixo dele. Os dois são independentes: o campo de texto é o que O org publica, a caixa de correio nomeia um dos próprios org. Um MailboxSelect serve ambas as telas para que não possam derivar, sobre uma busca em cache compartilhada assim, a linha lida de informações de contato e seu selecionador não solicitam a lista. A estados são mantidos distintos de propósito: uma org sem caixas de correio, uma infra- estrutura de correio que é para baixo, e uma caixa de correio removido provedor-lado de outra forma todos renderizar como um vazio Campo. A última mostra como "já não está disponível" em vez de parecer não atribuída, Porque um ponteiro velho tem de ser visível para quem o conserta. O departamento salva envia o endereço resolvido ao lado do ponteiro. Um Serviço de Segurança built before mailboxId existe, ignora e lê e- mail, por isso, sem essa alteração iria limpar o endereço de cada departamento da primeira vez que um foi salvo contra o atualmente implantado build. O serviço reconstruído ignora o campo; remova a ponte uma vez que cada ambiente é passado que construir.

  24. · InitializerService

    Caixa de correio ponteiros para departamentos e orgs, e backfill os departamentos

    DEPTS.MAILBOX ID e ORGS.CONTACT MAILBOX ID, ambos UUID simples sem FK para email provider.mailboxes: caixas de correio sincronizam de provedores externos e podem ser removidas provedor-lado, e o endpoint de exclusão de caixa de correio não sabe nada sobre departamentos, O verdadeiro FK transformaria ambos em fracassos. DEPTS.EMAIL era texto livre e contém uma mistura. Endereços que são realmente um dos org's caixas de correio estão ligadas e reescritas à caixa de correio -- Support@KamoCRM.com Nunca foi como se trata daquela caixa de correio. Endereços sem caixa de correio correspondente não podem ser expresso pelo coletor que substitui o campo, então eles são limpos; que é o declaração destrutiva e é deliberada, cobrindo Sales@ e Corporate@ hoje. ORGS.CONTACT EMAIL é deixado em paz. Mantém a sua própria entrada de texto e a caixa de correio fica ao seu lado em vez de o substituir.

  25. · kamo-shared-library

    Deixe um departamento e uma org ponto em uma de suas caixas de correio

    Um e-mail de contato do departamento era texto livre, assim que poderia nomear um endereço que o org faz Dois dos três departamentos com um conjunto hoje fazem exatamente isso. Agora. possui um ponteiro para uma das caixas de correio do org, e Organização ganha o mesmo ponteiro ao lado de seu contato existenteEmail, que é intocado. A atribuição é um ponteiro e nada mais: registra qual caixa de correio o departamento ou Org é alcançado, e não dá a ninguém acesso a ele. Ambas as colunas são simples UUID sem FK para email provider.mailboxes, deliberadamente. As caixas de correio sincronizam de provedores externos e podem ser removidas do lado do provedor e endpoint de exclusão de caixa de correio não sabe nada sobre departamentos -- um FK real iria virar ambos daqueles em fracassos. Um ponteiro velho é o custo aceito e a interface de superfície. Department.email fica, mantendo o endereço para o qual a caixa de correio foi designada. Os consumidores querem um endereço, não um id, e endereços de caixa de correio são imutáveis (o UpdateMailbox só aceita um nome de exibição e senha), então a cópia não pode derivar. A atribuição escreve ambas; limpar nulas ambas. Uma caixa de correio de outra organização é recusado -- o catador só oferece esta org's, mas o pedido pode ser feito sem ela, e um ponteiro cruzado colocaria o endereço de uma org no correio de outra pessoa.

  26. · kamo-internal

    Um campo Manager na posição, e um escolhedor de pessoas para todo o aplicativo

    O cartão de posição ganha Gerente, opcional. É uma pesquisa, não um dropdown: uma org pode manter milhares de nomes, e a única coisa que um seleto com todos eles garante é um pergaminho. Um gerenciador rejeitado — um loop de relatórios, digamos — aparece na razão do servidor em vez de um falha genérica em que o membro não pode agir. O MemberPickerDialog é o escolhidor. A pesquisa é executada no servidor, os resultados chegam a uma página tempo, e rolagem pede para o próximo, então nada aqui possui um diretório. Lê-se como uma paleta de comando porque essa é a rota mais rápida para alguém que conhece o nome, enquanto navegação ainda funciona para alguém que não: setas mover, Digite picaretas, Escape fecha, e o rodapé diz isso. As linhas carregam título, departamento, e-mail e número de relatórios — o suficiente para Diga a duas pessoas com o mesmo nome. Alguém que não pode ser escolhido permanece visível com a razão anexada; um nome que silenciosamente não está na lista lê como um erro. Dois catadores já existiam e nenhum deles poderia sobreviver a uma grande org. O sinal eletrónico o popover dos membros adicionais da janela e do chat tanto obteve cada membro como filtrado no browser. Ambos agora renderizam este diálogo, mantendo suas próprias fontes — um sinalizador pode ser qualquer membro, diretório do chat não é apenas staff — e ganhando a mesma busca, teclado Lidar e olhar. O popover torna-se AddChatMembersDialog, uma vez que já não é Popover.

  27. · SecurityService

    Defina um gerenciador e pesquise na pasta uma página de cada vez

    GET **************** responde a uma página do diretório da sessão org. A pesquisa, a ordem e o paging acontecem no banco de dados; um ?size= hostil é fechado. As palavras são ANDED e como metacaracteres escaparam, então um e-mail colado com um sublinhado estreita o Procure em vez de alargá-la. O usuário do sistema da plataforma nunca aparece. A segurança dos membros agora lê e escreve o gerente. Três rejeições, na ordem de um chamador bate neles: não um membro da equipe desta org, eles mesmos, ou alguém que já se reporta através deste membro — o último fecharia a linha de relatório em um loop no query walking Pode terminar, por isso não pode viver no esquema. O gerente é resolvido ANTES de qualquer coisa é escrita. A gravação é uma transação através papéis, direitos, tempo limite e posição; devolver um meio-período de 400 tudo escrito até esse ponto, então a resposta iria reportar um gerente rejeitado enquanto Os papéis mudaram silenciosamente. MemberAvatarUrlService é a casa para construção de URLs em novo código. Vários os controladores carregam cópias privadas que foram desviadas — AccountController ainda escolhe o extensão de foto com instância, o que é falso para um proxy Hibernate e serve um .png URL para um JPEG.

  28. · kamo-shared-library

    Um gerente, e uma pesquisa de diretórios que sobrevive a uma grande org

    TeamMember ganha uma auto-referência opcional para quem ela reporta. colunaDefinição é ligado à INT8 para que o Hibernate não possa copiar o Membro. DEFAULT unique rowid() do ID para a junção coluna e backfill cada linha com um gerenciador que não existe. TeamMemberRepo ganha pesquisaDirectório: uma página do diretório do org, filtrado, ordenado e janelado banco de dados. É escrito para orgs com cinco figuras de pessoal, por isso o a pessoa que liga nunca detém mais do que uma página — a pessoa que escolhe as costas é executada em cada tecla. Termos são ANDed contra um palheiro concatenado, que é o que permite "ana empréstimo" encontrar o Ana em Empréstimo; uma cadeia de Ored Likes não pode, porque o Like só combina contíguo Mensagem. Cada associação é unida com uma ESQUERDA explícita: uma junção de caminho implícita é INNER em JPQL e deixaria silenciosamente todos sem um departamento. Ciclos não podem ser expressos no esquema, então findManagerId De deixa o escritor andar um reportar uma ligação de cada vez antes de aceitar um gestor.

  29. · InitializerService

    Dê um gerente a um membro da equipe

    Adiciona MANAGER ID a member team member, uma auto-referência nulável para o relatório Linha. Nada é recheado: nenhum gerente é uma resposta completa, ambos no topo do gráfico e para qualquer um simplesmente não atribuído. O DROP DEFAULT é a instrução de carga, não o ADD COLUNN — ddl-auto: update cria a coluna primeiro. Uma coluna de ligação ao Membro, cujo id é INT8 DEFAULT unique rowid(), herda esse padrão a menos que a entidade pinos columnDefinition, que carimbar todas as linhas existentes com um id de gestor aleatório. O órfão e a auto-referência varre ids claros que uma coluna predefinida já teria escrito.

  30. · InitializerService

    Adicionar DEPTS.PARENT DEPT ID para departamentos aninhados

    Nulable with no backfill -- null significa nível superior, que é o que cada existente O departamento foi e a maioria vai ficar. Declarado UUID simples com um DEFAULT DROP explícito. Desligar a chave dos departamentos UUID DEFAULT gen random uuid(), e uma coluna FK que herda esse padrão fica carimbado com um pai aleatório em cada linha existente, órfão de todos eles e falhando a restrição que se segue.

Seu universo está esperando.

Comece gratuitamente em minutos.Adicione produtos sempre que estiver pronto — sem migração, sem novos logins.

Gratuito para sempre — não é necessário cartão de crédito