refactoring
This commit is contained in:
81
domain/app.go
Normal file
81
domain/app.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package domain
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
|
||||
"redmine_tree/domain/model" // Importing the model package
|
||||
)
|
||||
|
||||
func Run() {
|
||||
ui := NewUI() // Instantiate UI
|
||||
|
||||
// Load .env file
|
||||
err := godotenv.Load()
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
ui.PrintError("Error loading .env file: %v\n", err)
|
||||
}
|
||||
|
||||
// Load config from ~/.redmine-tree.json
|
||||
config, err := LoadConfig()
|
||||
if err != nil {
|
||||
ui.PrintError("Error loading config file: %v\n", err)
|
||||
}
|
||||
|
||||
baseURL := ""
|
||||
apiKey := ""
|
||||
|
||||
// Try to get values from config file first
|
||||
if config != nil {
|
||||
baseURL = config.Host
|
||||
apiKey = config.Token
|
||||
}
|
||||
|
||||
// Environment variables override config file
|
||||
if envBaseURL := os.Getenv("REDMINE_URL"); envBaseURL != "" {
|
||||
baseURL = envBaseURL
|
||||
}
|
||||
if envAPIKey := os.Getenv("REDMINE_TOKEN"); envAPIKey != "" {
|
||||
apiKey = envAPIKey
|
||||
}
|
||||
|
||||
var projectID string
|
||||
|
||||
// projectID must be provided as a command-line argument, or list projects
|
||||
if len(os.Args) > 1 {
|
||||
projectID = os.Args[1]
|
||||
} else {
|
||||
projects, err := model.FetchAllProjects(baseURL, apiKey)
|
||||
if err != nil {
|
||||
ui.PrintError("Error fetching projects: %v\n", err)
|
||||
}
|
||||
ui.PrintProjects(projects)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
if baseURL == "" || apiKey == "" {
|
||||
ui.PrintUsage(os.Args[0]) // Pass app name for usage message
|
||||
}
|
||||
|
||||
project, err := model.FetchProject(baseURL, apiKey, projectID)
|
||||
if err != nil {
|
||||
ui.PrintError("Error fetching project details: %v\n", err)
|
||||
}
|
||||
|
||||
ui.PrintFetchingProjectDetails(project.Name, projectID)
|
||||
|
||||
issues, err := model.FetchAllIssues(baseURL, apiKey, projectID)
|
||||
if err != nil {
|
||||
ui.PrintError("Error fetching issues: %v\n", err)
|
||||
}
|
||||
|
||||
ui.PrintTotalIssuesFetched(len(issues))
|
||||
|
||||
roots := model.BuildTree(issues) // Corrected call
|
||||
ui.PrintIssueTreeHeader(len(roots))
|
||||
model.PrintTree(roots, "", false) // Corrected call
|
||||
|
||||
// Print summary
|
||||
ui.PrintSummary(len(issues), len(roots))
|
||||
}
|
||||
Reference in New Issue
Block a user