package setup import ( "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "git.artlef.fr/PersonalLibraryManager/internal/appcontext" "git.artlef.fr/PersonalLibraryManager/internal/config" "git.artlef.fr/PersonalLibraryManager/internal/db" i18nresource "git.artlef.fr/PersonalLibraryManager/internal/i18nresource" "git.artlef.fr/PersonalLibraryManager/internal/jwtauth" "git.artlef.fr/PersonalLibraryManager/internal/middleware" "git.artlef.fr/PersonalLibraryManager/internal/routes" ) func Setup(config *config.Config) *gin.Engine { db := db.Initdb(config.DatabaseFilePath, config.DemoDataPath) err := jwtauth.InitKey(config.JWTKey) if err != nil { panic(err) } r := gin.Default() r.Use(cors.New(configureCors())) // All origins allowed by default r.Use(middleware.Auth()) bundle := i18nresource.InitializeI18n() r.GET("/mybooks", func(c *gin.Context) { routes.GetMyBooksHanderl(appcontext.AppContext{C: c, Db: db, I18n: bundle}) }) r.GET("/search/:searchterm", func(c *gin.Context) { routes.GetSearchBooksHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle}) }) r.POST("/book", func(c *gin.Context) { routes.PostBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle}) }) r.POST("/auth/signup", func(c *gin.Context) { routes.PostSignupHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle}) }) r.POST("/auth/login", func(c *gin.Context) { routes.PostLoginHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle}) }) return r } func configureCors() cors.Config { config := cors.DefaultConfig() config.AllowOrigins = []string{"http://localhost:5173"} config.AllowPrivateNetwork = true config.AllowCredentials = true config.AllowHeaders = []string{"Authorization", "Content-Type"} return config }