config: unify configuration with multi-site support

- Remove mock_content setting (working database loop makes it unnecessary)
- Change server.dev_mode to global dev_mode setting for consistency
- Update CLI to use cli.site_id and cli.output for scoped configuration
- Implement database client for CLI enhance command (complete static site loop)
- Update justfile to use INSERTR_DATABASE_PATH environment variable
- Enable multi-site architecture: server is site-agnostic, CLI is site-specific
- Unified insertr.yaml now supports both server and CLI with minimal config
This commit is contained in:
2025-09-10 19:28:59 +02:00
parent 8a709a5250
commit c572428e45
6 changed files with 216 additions and 45 deletions

View File

@@ -9,6 +9,7 @@ import (
"github.com/spf13/viper"
"github.com/insertr/insertr/internal/content"
"github.com/insertr/insertr/internal/db"
)
var enhanceCmd = &cobra.Command{
@@ -22,17 +23,14 @@ process that transforms static HTML into an editable CMS.`,
}
var (
outputDir string
mockContent bool
outputDir string
)
func init() {
enhanceCmd.Flags().StringVarP(&outputDir, "output", "o", "./dist", "Output directory for enhanced files")
enhanceCmd.Flags().BoolVar(&mockContent, "mock", true, "Use mock content for development")
// Bind flags to viper
viper.BindPFlag("build.output", enhanceCmd.Flags().Lookup("output"))
viper.BindPFlag("mock_content", enhanceCmd.Flags().Lookup("mock"))
viper.BindPFlag("cli.output", enhanceCmd.Flags().Lookup("output"))
}
func runEnhance(cmd *cobra.Command, args []string) {
@@ -47,21 +45,24 @@ func runEnhance(cmd *cobra.Command, args []string) {
dbPath := viper.GetString("database.path")
apiURL := viper.GetString("api.url")
apiKey := viper.GetString("api.key")
siteID := viper.GetString("site_id")
mockContent := viper.GetBool("mock_content")
siteID := viper.GetString("cli.site_id")
outputDir := viper.GetString("cli.output")
// Create content client
var client content.ContentClient
if mockContent || (apiURL == "" && dbPath == "") {
fmt.Printf("🧪 Using mock content for development\n")
client = content.NewMockClient()
} else if apiURL != "" {
if apiURL != "" {
fmt.Printf("🌐 Using content API: %s\n", apiURL)
client = content.NewHTTPClient(apiURL, apiKey)
} else {
} else if dbPath != "" {
fmt.Printf("🗄️ Using database: %s\n", dbPath)
// TODO: Implement database client for direct DB access
fmt.Printf("⚠️ Direct database access not yet implemented, using mock content\n")
database, err := db.NewDatabase(dbPath)
if err != nil {
log.Fatalf("Failed to initialize database: %v", err)
}
defer database.Close()
client = content.NewDatabaseClient(database)
} else {
fmt.Printf("🧪 No database or API configured, using mock content\n")
client = content.NewMockClient()
}