name: create-use-case description: "Criando Use Case na camada application para orquestrar ações de recovery. Use para criar novo orquestrador de execução, coordenar RecoveryActions e portas de infraestrutura. Não use para criar a ação em si (use create-recovery-action) nem para componente de UI (use create-ui-component)."
Skill: Criar Use Case (Micro-Skill)
Quando usar
- Criar novo fluxo de execução de recovery (ex: "Fix Audio", "Fix All")
- Coordenar múltiplas RecoveryActions em sequência definida
- Precisar de orquestração com controle de erro, log e rollback
- Adicionar ponto de entrada para GUI ou TUI chamar
Instruções
1. Criar o Use Case
-
src/main/java/org/fixkitty/application/usecases/{acao}/Fix{Acao}UseCase.java - Recebe
EnvironmentProfileePrivilegeManagervia injeção no construtor (não estático) - Método principal:
execute() → RecoveryResult -
RecoveryResultcontém:success,steps[],errorMessage(se falhar) - Sem imports de
javafx.*,tui.*,ProcessBuilder, ou comandos Linux
2. Definir interações com domain
- Varre ações relevantes do
EnvironmentProfile.getSupportedActions() - Para cada ação: delega execução ao
CommandRunnervia port (interface, não impl) - Em caso de falha parcial: registra no
RecoveryResulte decide explicitamente: continuar ou abortar
3. Criar port se necessário
- Se Use Case precisar de IO externo (ex: logs, notificações), criar interface em
core/ports/ - Nunca introduzir dependência direta de infra no Use Case
Critical
- Use Case que chama
ProcessBuilderouRuntime.exec()está executando o que deveria ser do adapter — crie port e delegue System.outou logger de infra aqui acumula preocupações que pertencem à infra — useRecoveryResult.addStep()- Use Case orquestra — toda lógica de comando fica em infra via ports; lógica de regra fica em domain
- Inputs e outputs devem ser tipos do domain (
RecoveryResult,RecoveryAction, etc.)
Exemplos
Exemplo 1: Fix Audio Use Case
Usuário diz: "Cria o use case que executa Fix Audio"
Ações:
- Cria
FixAudioUseCaseemapplication/usecases/audio/ - Construtor recebe
EnvironmentProfile profile, CommandRunner runner execute(): buscaAudioAction, valida suporte, executa cada step viarunner.run(cmd)- Retorna
RecoveryResultcom passos executados e status final - GUI e TUI chamam este use case — nunca executam comandos por conta própria
Exemplo 2: Fix All Use Case
Ações:
- Cria
FixAllUseCaseque delega paraFixAudioUseCase,FixNetworkUseCase, etc. - Coleta todos os
RecoveryResultindividuais - Retorna
RecoveryResultcomposto (success = todos ok)
Troubleshooting
Use Case importa classe de infrastructure
- Causa: violação de Clean Architecture
- Solução: Criar port (interface) em
core/ports/, implementar em infra, injetar no use case
RecoveryResult não carrega detalhes de erro
- Causa:
addStep()não chamado na falha - Solução: Garantir que cada passo crítico registre resultado antes de retornar
GUI chama ProcessBuilder diretamente
- Causa: atalho indevido sem passar pelo use case
- Solução: Extrair lógica para o Use Case correspondente, GUI só chama
useCase.execute()
Consulte também
- create-recovery-action — pré-requisito: crie a ação antes
- create-ui-component — próximo passo: conectar use case à UI
- write-unit-test — escreva testes do use case antes do demo
- enforce-architecture — validação final obrigatória