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()) r.Static("/bookcover", config.ImageFolderPath) bundle := i18nresource.InitializeI18n() r.GET("/mybooks/read", func(c *gin.Context) { routes.GetMyBooksReadHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.GET("/mybooks/reading", func(c *gin.Context) { routes.GetMyBooksReadingHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.GET("/mybooks/wantread", func(c *gin.Context) { routes.GetMyBooksWantReadHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.GET("/search/:searchterm", func(c *gin.Context) { routes.GetSearchBooksHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.GET("/inventaire/books/:workId", func(c *gin.Context) { routes.GetInventaireBooks(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.GET("/book/:id", func(c *gin.Context) { routes.GetBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.PUT("/book/:id/read", func(c *gin.Context) { routes.PutReadUserBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.PUT("/book/:id/wantread", func(c *gin.Context) { routes.PutWantReadUserBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.PUT("/book/:id/startread", func(c *gin.Context) { routes.PutStartReadUserBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.PUT("/book/:id/rate", func(c *gin.Context) { routes.PutRateUserBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.POST("/book", func(c *gin.Context) { routes.PostBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.POST("/importbook", func(c *gin.Context) { routes.PostImportBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.GET("/author/:id", func(c *gin.Context) { routes.GetAuthorHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.GET("/author/:id/books", func(c *gin.Context) { routes.GetAuthorBooksHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.POST("/auth/signup", func(c *gin.Context) { routes.PostSignupHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.POST("/auth/login", func(c *gin.Context) { routes.PostLoginHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) r.POST("/upload/cover", func(c *gin.Context) { routes.PostUploadBookCoverHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) }) 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 }