83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
// Config represents the application configuration
|
|
type Config struct {
|
|
DBHost string `toml:"db_host"`
|
|
DBPort int `toml:"db_port"`
|
|
DBName string `toml:"db_name"`
|
|
DBSchema string `toml:"db_schema"`
|
|
DBUser string `toml:"db_user"`
|
|
DBPassword string `toml:"db_password"`
|
|
DBTable string `toml:"db_table"`
|
|
OutputDir string `toml:"output_dir"`
|
|
EntityName string `toml:"entity_name"`
|
|
}
|
|
|
|
// DefaultConfig returns a new config with default values
|
|
func DefaultConfig() *Config {
|
|
return &Config{
|
|
DBHost: "localhost",
|
|
DBPort: 5432,
|
|
DBSchema: "public",
|
|
DBUser: "postgres",
|
|
DBPassword: "postgres",
|
|
}
|
|
}
|
|
|
|
// Load reads the configuration file from ~/.config/entity-maker.toml
|
|
func Load() (*Config, error) {
|
|
configPath := getConfigPath()
|
|
|
|
config := DefaultConfig()
|
|
|
|
// Check if config file exists
|
|
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
|
return config, nil
|
|
}
|
|
|
|
// Read and decode the config file
|
|
if _, err := toml.DecodeFile(configPath, config); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return config, nil
|
|
}
|
|
|
|
// Save writes the configuration to ~/.config/entity-maker.toml
|
|
func (c *Config) Save() error {
|
|
configPath := getConfigPath()
|
|
|
|
// Create config directory if it doesn't exist
|
|
configDir := filepath.Dir(configPath)
|
|
if err := os.MkdirAll(configDir, 0755); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Create or truncate the config file
|
|
f, err := os.Create(configPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer f.Close()
|
|
|
|
// Encode and write the config
|
|
encoder := toml.NewEncoder(f)
|
|
return encoder.Encode(c)
|
|
}
|
|
|
|
// getConfigPath returns the full path to the config file
|
|
func getConfigPath() string {
|
|
homeDir, err := os.UserHomeDir()
|
|
if err != nil {
|
|
homeDir = "."
|
|
}
|
|
return filepath.Join(homeDir, ".config", "entity-maker.toml")
|
|
}
|