package cmd import ( "log/slog" "time" "github.com/spf13/cobra" "trankilou.fr/lassistanoque/backend/internal/adapter/auth/password" "trankilou.fr/lassistanoque/backend/internal/adapter/database" "trankilou.fr/lassistanoque/backend/internal/adapter/security" "trankilou.fr/lassistanoque/backend/internal/http" "trankilou.fr/lassistanoque/backend/internal/service/auth" "trankilou.fr/lassistanoque/backend/internal/service/user" ) func init() { rootCmd.AddCommand( newServeCmd(), ) } func newServeCmd() *cobra.Command { var short bool cmd := &cobra.Command{ Use: "serve", Short: "Run server", Run: func(cmd *cobra.Command, args []string) { runServe() }, } cmd.Flags().BoolVarP(&short, "short", "s", false, "show only version number") return cmd } func runServe() { // database db, err := database.GetDatabase() if err != nil { panic(err) } defer db.Close() err = db.Migrate() if err != nil { panic(err) } settings, err := db.SettingsReporitory().GetSettings() if err != nil { panic(err) } // Adapters tokenManager := security.NewJwtTokenManager(12*time.Hour, 7*24*time.Hour, "lassistanoque") pwdAuth := password.NewPasswordAuthenticator(tokenManager, db.UserReporitory()) // services authService := auth.NewService( db.SettingsReporitory(), db.UserReporitory(), map[string]auth.Authenticator{ "password": pwdAuth, }, ) userService := user.NewService(db.UserReporitory()) // http server router := http.NewRouter(http.Dependencies{ Settings: settings, AuthService: authService, UserService: userService, TokenManager: tokenManager, }) if err := router.Start(); err != nil { slog.Error("failed to start server", "error", err) } }