Skip to content

Commit aeac1da

Browse files
authored
Merge branch 'master' into feature/issue-generator
2 parents 4590840 + ea2576a commit aeac1da

9 files changed

Lines changed: 63 additions & 15 deletions

File tree

cmd/main.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,13 @@ func initializeApp() (*cli.Command, error) {
8888
var vcsClient = container.GetVCSRegistry()
8989
vcsClientInstance, _ := vcsClient.CreateClientFromConfig(ctx, gitService, cfgApp, translations)
9090
commitHandler := handler.NewSuggestionHandler(gitService, vcsClientInstance, translations)
91+
aiSummarizer, err := container.GetPRSummarizer(ctx)
92+
if err != nil {
93+
log.Printf("Warning: no se pudo crear el servicio de IA para PRs: %v", err)
94+
aiSummarizer = nil
95+
}
9196

92-
prServiceFactory := factory.NewPrServiceFactory(cfgApp, translations, nil, gitService)
97+
prServiceFactory := factory.NewPrServiceFactory(cfgApp, translations, aiSummarizer, gitService)
9398
prCommand := pull_requests.NewSummarizeCommand(prServiceFactory)
9499

95100
registerCommand := registry.NewRegistry(cfgApp, translations)

internal/cli/command/handler/suggestions.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,6 @@ func (h *SuggestionHandler) displaySuggestions(suggestions []models.CommitSugges
4747
suggestionHeader := color.New(color.FgMagenta, color.Bold).Sprintf("📝 Sugerencia #%d", i+1)
4848
fmt.Printf("%s\n\n", suggestionHeader)
4949

50-
if i == 0 && suggestion.Usage != nil {
51-
ui.PrintTokenUsage(suggestion.Usage, h.t)
52-
}
53-
5450
_, _ = sectionColor.Println(h.t.GetMessage("ui_labels.code_analysis", 0, nil))
5551
printIndentedKeyValue(h.t.GetMessage("ui_labels.changes_overview", 0, nil), suggestion.CodeAnalysis.ChangesOverview)
5652
printIndentedKeyValue(h.t.GetMessage("ui_labels.primary_purpose", 0, nil), suggestion.CodeAnalysis.PrimaryPurpose)
@@ -79,6 +75,11 @@ func (h *SuggestionHandler) displaySuggestions(suggestions []models.CommitSugges
7975
h.displayTechnicalAnalysis(suggestion.RequirementsAnalysis)
8076
}
8177

78+
if i == 0 && suggestion.Usage != nil {
79+
fmt.Println()
80+
ui.PrintTokenUsage(suggestion.Usage, h.t)
81+
}
82+
8283
fmt.Printf("%s\n", separator)
8384
}
8485

internal/cli/command/pull_requests/summarize.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ func (c *SummarizeCommand) CreateCommand(t *i18n.Translations, _ *cfg.Config) *c
6464
"Number": prNumber,
6565
"Title": summary.Title,
6666
}))
67+
68+
if summary.Usage != nil {
69+
fmt.Println()
70+
ui.PrintTokenUsage(summary.Usage, t)
71+
}
72+
6773
return nil
6874
},
6975
}

internal/cli/command/release/create.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,11 @@ func createReleaseAction(releaseService ports.ReleaseService, trans *i18n.Transl
201201
fmt.Println(trans.GetMessage("release.create_push_help", 0, nil))
202202
}
203203

204+
if notes.Usage != nil {
205+
fmt.Println()
206+
ui.PrintTokenUsage(notes.Usage, trans)
207+
}
208+
204209
fmt.Println()
205210

206211
return nil

internal/cli/command/release/generate.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/Tomas-vilte/MateCommit/internal/cli/completion_helper"
99
"github.com/Tomas-vilte/MateCommit/internal/domain/ports"
1010
"github.com/Tomas-vilte/MateCommit/internal/i18n"
11+
"github.com/Tomas-vilte/MateCommit/internal/ui"
1112
"github.com/urfave/cli/v3"
1213
)
1314

@@ -77,6 +78,12 @@ func generateReleaseAction(releaseService ports.ReleaseService, trans *i18n.Tran
7778
fmt.Println(trans.GetMessage("release.version_label", 0, map[string]interface{}{
7879
"Version": release.Version,
7980
}))
81+
82+
if notes.Usage != nil {
83+
fmt.Println()
84+
ui.PrintTokenUsage(notes.Usage, trans)
85+
}
86+
8087
fmt.Println()
8188

8289
return nil

internal/cli/command/release/preview.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/Tomas-vilte/MateCommit/internal/cli/completion_helper"
88
"github.com/Tomas-vilte/MateCommit/internal/domain/ports"
99
"github.com/Tomas-vilte/MateCommit/internal/i18n"
10+
"github.com/Tomas-vilte/MateCommit/internal/ui"
1011
"github.com/urfave/cli/v3"
1112
)
1213

@@ -104,6 +105,11 @@ func previewReleaseAction(releaseService ports.ReleaseService, trans *i18n.Trans
104105
fmt.Println(trans.GetMessage("release.next_steps_cmd", 0, nil))
105106
fmt.Println()
106107

108+
if notes.Usage != nil {
109+
ui.PrintTokenUsage(notes.Usage, trans)
110+
fmt.Println()
111+
}
112+
107113
return nil
108114
}
109115
}

internal/cli/command/release/publish.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/Tomas-vilte/MateCommit/internal/cli/completion_helper"
88
"github.com/Tomas-vilte/MateCommit/internal/domain/ports"
99
"github.com/Tomas-vilte/MateCommit/internal/i18n"
10+
"github.com/Tomas-vilte/MateCommit/internal/ui"
1011
"github.com/urfave/cli/v3"
1112
)
1213

@@ -94,6 +95,11 @@ func publishReleaseAction(releaseService ports.ReleaseService,
9495
"Version": release.Version,
9596
}))
9697

98+
if notes.Usage != nil {
99+
fmt.Println()
100+
ui.PrintTokenUsage(notes.Usage, trans)
101+
}
102+
97103
return nil
98104
}
99105
}

internal/infrastructure/di/container.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,25 @@ func (c *Container) GetCommitService(ctx context.Context) (ports.CommitService,
118118
return c.commitService, nil
119119
}
120120

121+
// GetPRSummarizer retorna el servicio de IA para resumir PRs (lazy initialization)
122+
func (c *Container) GetPRSummarizer(ctx context.Context) (ports.PRSummarizer, error) {
123+
if c.config.AIConfig.ActiveAI == "" {
124+
return nil, fmt.Errorf("no hay IA activa configurada")
125+
}
126+
127+
aiFactory, err := c.aiRegistry.Get(string(c.config.AIConfig.ActiveAI))
128+
if err != nil {
129+
return nil, fmt.Errorf("proveedor de IA '%s' no encontrado: %w", c.config.AIConfig.ActiveAI, err)
130+
}
131+
132+
aiSummarizer, err := aiFactory.CreatePRSummarizer(ctx, c.config, c.translations)
133+
if err != nil {
134+
return nil, fmt.Errorf("error al crear el servicio de IA para PRs: %w", err)
135+
}
136+
137+
return aiSummarizer, nil
138+
}
139+
121140
// GetPRService retorna el servicio de PRs (lazy initialization)
122141
func (c *Container) GetPRService(ctx context.Context) (ports.PRService, error) {
123142
if c.prService != nil {
@@ -129,15 +148,9 @@ func (c *Container) GetPRService(ctx context.Context) (ports.PRService, error) {
129148
}
130149

131150
var aiSummarizer ports.PRSummarizer
132-
if c.config.AIConfig.ActiveAI != "" {
133-
aiFactory, err := c.aiRegistry.Get(string(c.config.AIConfig.ActiveAI))
134-
if err == nil {
135-
aiSummarizer, err = aiFactory.CreatePRSummarizer(ctx, c.config, c.translations)
136-
if err != nil {
137-
// Log warning pero continuar sin AI
138-
aiSummarizer = nil
139-
}
140-
}
151+
aiSummarizer, err := c.GetPRSummarizer(ctx)
152+
if err != nil {
153+
aiSummarizer = nil
141154
}
142155

143156
vcsClient, err := c.vcsRegistry.CreateClientFromConfig(ctx, c.gitService, c.config, c.translations)

internal/infrastructure/di/container_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,6 @@ func TestGetIssueGeneratorService(t *testing.T) {
290290
aiFactory := &mockAIFactory{}
291291
vcsFactory := &mockVCSFactory{}
292292

293-
// Set expectations - Return nil client/generator is fine for basic instantiation test
294293
aiFactory.On("CreateIssueContentGenerator", mock.Anything, cfg, trans).Return(nil, nil)
295294
vcsFactory.On("CreateClient", mock.Anything, "owner", "repo", "", trans).Return(nil, nil)
296295
vcsFactory.On("ValidateConfig", mock.Anything).Return(nil)

0 commit comments

Comments
 (0)