Recursos e uso do designer de domínio
Este documento é o guia técnico para todos os recursos do Domain Designer MVP dentro de:
aplicativos/gerenciamento de serviço/
Abrange o que cada recurso faz e como usá-lo na prática.
1) Tela e navegação
Características:
- Retângulos de domínio (codificados por cores)
- Cartões de entidade dentro de domínios
- Panorâmica, zoom, ajuste, redefinição
- Snap-to-grid
- Visualização compacta/completa
- Modo de desempenho em tela grande
- Navegação no minimapa
- Desfazer/refazer
Como usar:
- Crie domínios e entidades no painel esquerdo.
- Arraste os cabeçalhos de domínio e de entidade para reposicionar.
- Uso:
Ctrl/Cmd + roda do mousepara zoomEspaço + arrastarpara panorâmicaFiteReset Viewpara enquadramento rápido
- Ative
Large Canvaspara diagramas de alta densidade. - Use o minimapa para focar um domínio rapidamente.
2) Design de Relacionamento
Características:
- Criação de relacionamento baseado em formulário (
de,para, cardinalidade) - Modo pick-on-canvas
- Conectores de arrasto âncora a âncora
- Relacionamento reverso
- Geração automática de FK
- Controles de deslocamento de rótulo (
x,y) - Controles de caminho de curvatura (
bendX,bendY) - Comportamento da âncora (
auto,center) - Estilo de roteamento (
curvo,ortogonal)
Como usar:
- Selecione as entidades de origem e destino e clique em
Conectar. - Ou clique em
Pick On Canvase selecione as entidades diretamente. - Para conexões com reconhecimento de âncora, arraste das âncoras de borda (
superior/direita/inferior/esquerda) entre as entidades. - Selecione um relacionamento na lista e ajuste:
- deslocamento da etiqueta
- pontos de curvatura
- comportamento âncora
- Clique em
Salvar relacionamento.
3) Metadados de contexto de domínio
Metadados por domínio:
- Linguagem onipresente
- Equipe proprietária
- Dependências ascendentes
- Dependências a jusante
- Canal de integração
- Dependências de pacotes
- Objetos de valor compartilhado
Como usar:
- Selecione um domínio.
- Preencha os valores em
Contexto Limitado. - Clique em
Salvar contexto.
Esses campos são persistidos no estado do designer e exportados por meio de fluxos JSON/pacote.
4) Edição de entidades e modelos
Recursos em nível de entidade:
- Renomear, mover, duplicar, excluir
- Sinalizador raiz agregado
- Editor de invariantes
- Campo CRUD com metadados alinhados ao OpenAPI
- Modelos de campo (
tenantRef,auditTrail,softDelete,contactPack) - Modelos de entidade:
crudAgregadoeventSourcedreferênciaDadostenantOwned
Como usar:
- Selecione uma entidade.
- Use o Inspetor de Entidades para renomear/mover/regras.
- Adicione campos manualmente ou aplique modelos de campo.
- Aplique modelos de entidade do painel
Entidades.
5) Mapeamento de políticas RBAC
Política de ação por entidade, alinhada ao contrato de autorização de tenant e
RBAC (TENANT-RBAC-AUTHORIZATION-CONTRACT.pt-BR.md, JUM-477):
- Ações:
listagetByIdcriaratualizarexcluir
- Alternância de função (as funções normalizadas do contrato):
superadministradoradministradorusuário
- Escopo do locatário: derivado das funções selecionadas, não um
sinalizador livre. O runtime (
Rbac.ts/TenantAuthorizationPolicy.ts) restringe os principaisadmineuserà própria organização e concede aosuperadminum limite global — não existe um botão independente de escopo de locatário a ser honrado, portanto o editor exibe o valor derivado como uma caixa de seleção somente leitura. Políticas armazenadas são reparadas para o valor derivado no carregamento. - Escopos diretos legados (
read_user,create_organization, …) continuam suportados pelo runtime e sobrevivem à importação/exportação, mas não são editáveis no inspetor; a validação os aceita como expressíveis pelo contrato. - Uma função fora do vocabulário do contrato é rejeitada no momento da
gravação com uma mensagem acionável, e a validação do modelo relata qualquer
função armazenada desse tipo como
error, de modo que o portão de qualidade de exportação a bloqueia em vez de descartá-la.
Como usar:
- Selecione entidade e ação.
- Marque as funções permitidas; o indicador de escopo do locatário acompanha as funções.
- Clique em
Salvar regra RBAC. - Revise a matriz gerada na lista RBAC.
6) Designer de contrato de mensagem
Tipos de contrato suportados:
eventocomandopedidoresposta
Campos do contrato:
- nome
- digite
- canal/tópico
- versão
- esquema de carga útil (editor JSON)
Como usar:
- Selecione a entidade.
- Preencha o nome/tipo/canal/versão do contrato.
- Clique em
Adicionar contrato. - Use o botão
payloadpara editar o esquema JSON.
As exportações incluem esses contratos em:
- Extensão OpenAPI (
x-message-contracts) - Exportação AsyncAPI
7) Composição Avançada OpenAPI
Controles por entidade:
oneOf,allOf,anyOf- lista de referências de esquema
- lista externa
$ref - propriedade discriminadora
Como usar:
- Selecione a entidade.
- Escolha o modo de composição.
- Adicione referências de esquema e referências externas opcionais.
- Defina o discriminador, se necessário.
- Salve a composição.
8) Validação, Portão de Qualidade e Diferença
Características:
- Verificações de modelo com gravidade:
erroavisarinformações
- Filtro de gravidade mínima configurável
- Bloco de exportação em questões críticas
- Salvar/limpar linha de base do esquema
- Diferença de esquema e dicas de migração
Como usar:
- Clique em
Validar modelo. - Ajuste o filtro de gravidade, se necessário.
- Habilite o
bloqueio de exportação em questões críticaspara impor o controle de qualidade. - Salve uma linha de base e execute diff para detectar alterações.
9) Exemplo e geração de código
Saídas geradas:
- Exemplos de carga útil de solicitação/resposta
- Visualização do esqueleto do código:
- modelo
- porta do repositório
- caso de uso
- controlador
- manipulador
Como usar:
- Selecione uma entidade para saída focada ou mantenha nenhuma selecionada para saída em tela inteira.
- Clique em:
Gerar ExemplosVisualização do código
10) Destinos de exportação e importação
Exportar:
- modelo JSON -OpenAPI 3.1
- Remarcação
- Esquema JSON
- API assíncrona
- Pacote padrão
- Pacote de domínio
Importar:
- modelo JSON -OpenAPI 3.1
- Pacote de domínio
Como usar:
- Use os botões de exportação no painel
Exportar. - Use botões de importação para JSON/OAS/pacote.
- Para exportação de pacotes, o domínio selecionado é usado como pacote de origem.
10.1) Contrato de exportação OAS 3.1 (Requisito 036, JUM-474)
A exportação OpenAPI 3.1 produz um documento em conformidade com o Requisito
036 e com a verificação de resolução de rotas
(ci-cd/check-oas-route-resolution.js):
- Toda operação carrega um
operationIdúnico no esquema de verbos canônico dospec/1.0.0.yml(getAll*,create*,get*ById,update*,delete*), qualificado pelo nome do schema (getAllBilling_Invoice). - Corpos de requisição referenciam os objetos de porta de entrada
RequestCreate<Schema>/RequestUpdate<Schema>via$ref; respostas 2xx referenciam o schema da entidade, seu wrapper<Schema>ArrayOfouResourceDeleteResponse. Sem schemas inline de requisição/resposta, e todo schema referenciado tem descrição. - Os wrappers de porta de entrada/saída são marcados com
'x-port-object': truee ignorados na importação OAS, de modo que uma ida e volta não cria entidades fantasmas. - Respostas de erro usam os códigos canônicos de
ERROR-CONTRACTS-AND-RESPONSES(400/401/403/404/409). - Entidades cujos nomes colapsam para o mesmo nome de schema OAS ou rota
(por exemplo
Foo BarvsFoo-Bar) falham no portão de qualidade de exportação em vez de sobrescrever silenciosamente uma à outra no documento.
10.2) Ida e volta OAS sem perdas (JUM-478)
A travessia OAS é um contrato entre o exportador e o importador: o que o OAS
não consegue expressar nativamente atravessa como extensões x- acordadas e
é normalizado de volta em entity.meta na importação, de modo que
exportar → importar → exportar atinge um ponto fixo com uma lista de perdas
no nível do modelo vazia (verificado por designerRoundTrip.test.ts).
x-aggregate-rootex-invariantscarregam a declaração de agregado e as invariantes quando presentes.x-rbaccarrega a política RBAC normalizada da entidade, emitida apenas quando diverge do padrão do designer (umx-rbacausente normaliza de volta para a política padrão, comtenantScopedderivado dos papéis conforme o contrato RBAC de tenant).x-fieldless: truepreserva o conjunto vazio de campos de uma entidade na travessia (um schema sem marcação e sem propriedades ainda recebe os campos padrãoid/createdAt/updatedAtdo importador).x-field-flags: { pk, fk, unique }carrega as flags de um campo apenas quando divergem da heurística de nomes do importador (id→ PK/unique,*Id→ FK).- As linhas de
x-relationscarregam{ name, fromSchema, toSchema, fromCardinality, toCardinality }— nomes de schema, não ids do modelo — e o importador restaura os relacionamentos religados aos ids recomputados das entidades, descartando linhas cujos extremos não foram importados. - Documentos externos sem as marcações do designer (o canônico
spec/1.0.0.yml) são reconhecidos pelas mesmas convenções de objetos de porta: nomesRequest<Action>*e*ArrayOf,ResourceDeleteResponse, descrições “Port input/output object” que não são contratos de entidade<Name> resource, e schemas não-objeto nunca viram entidades. - Perdas remanescentes nomeadas para documentos externos: facetas
example/default/minItems/maxItemse vínculos$refde itens de array (referências a objetos de valor achatam para o vocabulárioitemsType), blocos de contexto delimitado do domínio, posições no canvas e operationIds legados (não canônicos).
11) Cobertura de fumaça
Testes de fumaça de gerenciamento de serviços:
apps/backend-template/test/integration/ServiceManagement/domainDesigner.smoke.test.tsapps/service-management/test/unit/mvp.roadmap.features.test.ts
Correr:
bun run test:integration:service-management
NODE_ENV=dev bun x jest apps/service-management/test/unit/mvp.roadmap.features.test.ts --runInBand