- Add GORM dependencies for SQLite and PostgreSQL - Create domain models (User, Session, File) with common errors - Implement repository interfaces and database layer with migrations - Update WebApp to bootstrap with database and repositories - Add comprehensive unit tests for repository methods - Update config structure to support multiple database drivers - Extend AGENTS.md with debugging principles and dependency rules
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/dhao2001/mygo/internal/app"
|
|
"github.com/dhao2001/mygo/internal/config"
|
|
"github.com/dhao2001/mygo/internal/server"
|
|
)
|
|
|
|
var serveConfigFile string
|
|
|
|
var serveCmd = &cobra.Command{
|
|
Use: "serve",
|
|
Short: "Start the MyGO HTTP server",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
v := config.New()
|
|
cfg, err := config.Load(v, serveConfigFile)
|
|
if err != nil {
|
|
return fmt.Errorf("load config: %w", err)
|
|
}
|
|
|
|
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
|
defer stop()
|
|
|
|
webApp, err := app.Bootstrap(cfg)
|
|
if err != nil {
|
|
return fmt.Errorf("bootstrap: %w", err)
|
|
}
|
|
defer func() {
|
|
if err := webApp.Close(); err != nil {
|
|
fmt.Fprintf(os.Stderr, "close webapp: %v\n", err)
|
|
}
|
|
}()
|
|
|
|
router := server.NewRouter(webApp)
|
|
addr := server.Address(webApp.Config.Server)
|
|
|
|
return server.RunWithGracefulShutdown(ctx, addr, router)
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
serveCmd.Flags().StringVar(&serveConfigFile, "config", "", "config file path")
|
|
rootCmd.AddCommand(serveCmd)
|
|
}
|