Files
kontor/kontor-gin/internal/router/router.go
T
2026-11-01 02:32:18 +01:00

147 lines
6.6 KiB
Go

package router
import (
"html/template"
"kontor-api-gin/assets"
"kontor-api-gin/internal/globals"
"kontor-api-gin/internal/handlers"
"kontor-api-gin/internal/middleware"
"kontor-api-gin/templates"
"net/http"
"log/slog"
"github.com/gin-contrib/cors"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
gin_slog "github.com/gin-contrib/slog"
"github.com/gin-gonic/gin"
)
func New(admin *handlers.AdminHandler, bookshelf *handlers.BookshelfHandler, comics *handlers.ComicsHandler, media *handlers.MediaHandler, tysc *handlers.TyscHandler) *gin.Engine {
router := gin.New()
router.Use(gin.Recovery())
router.Use(gin.LoggerWithConfig(gin.LoggerConfig{
SkipPaths: []string{"/health", "/public/style/main.css"},
}))
//router.Use(gin_slog.SetLogger(
// gin_slog.WithSkipPath([]string{"/health", "/public/style/main.css"}),
// gin_slog.WithDefaultLevel(slog.LevelInfo),
// gin_slog.WithClientErrorLevel(slog.LevelInfo),
// gin_slog.WithServerErrorLevel(slog.LevelInfo),
// ))
router.Use(cors.New(cors.Config{
AllowOrigins: []string{"https://app.example.com"},
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE"},
AllowHeaders: []string{"Authorization", "Content-Type"},
AllowCredentials: true,
}))
// router.LoadHTMLGlob("templates/**/*.html")
// router.Static("/public", "./assets")
templ := template.Must(template.New("").ParseFS(templates.TemplateFiles, "layouts/*.html", "pages/*.html"))
router.SetHTMLTemplate(templ)
router.StaticFS("/public", http.FS(assets.StaticFiles))
router.Use(sessions.Sessions("session", cookie.NewStore(globals.Secret)))
router.Use(middleware.RequestID([]string{"/health"}))
router.GET("/health", handlers.Health)
router.GET("/", handlers.Index)
router.GET("/login", admin.AuthHandler.LoginPage)
router.POST("/login", admin.AuthHandler.LoginPost)
router.GET("/logout", admin.AuthHandler.LogoutPage)
comic := router.Group("/comics")
comic.GET("/comics", comics.ComicHandler.ListPage)
comic.GET("/publishers", comics.PublisherHandler.ListPage)
m := router.Group("/media")
m.Use(middleware.AuthRequired())
m.GET("/actors", media.MediaActorHandler.ListPage)
m.GET("/actors/:id", media.MediaActorHandler.EditPage)
m.POST("/actors/:id", media.MediaActorHandler.UpdatePage)
m.GET("/articles", media.MediaArticleHandler.ListPage)
m.GET("/files", media.MediaFileHandler.ListPage)
m.GET("/files/edit/:id", media.MediaFileHandler.EditPage)
m.POST("/files/edit/:id", media.MediaFileHandler.UpdatePage)
m.GET("/files/delete/:id", media.MediaFileHandler.DeletePage)
m.GET("/videos", media.MediaVideoHandler.ListPage)
m.GET("/videos/edit/:id", media.MediaVideoHandler.EditPage)
m.POST("/videos/edit/:id", media.MediaVideoHandler.UpdatePage)
m.GET("/videos/delete/:id", media.MediaVideoHandler.DeletePage)
m.GET("/lofis", media.MediaLoFiHandler.ListPage)
m.GET("/lofis/edit", media.MediaLoFiHandler.EditPage)
m.GET("/lofis/edit/:id", media.MediaLoFiHandler.EditPage)
m.POST("/lofis/edit/:id", media.MediaLoFiHandler.UpdatePage)
m.GET("/lofis/review/:id", media.MediaLoFiHandler.ChangeReviewPage)
m.GET("/lofis/delete/:id", media.MediaLoFiHandler.DeletePage)
m.GET("/musics", media.MediaMusicHandler.ListPage)
m.GET("/musics/edit/:id", media.MediaMusicHandler.EditPage)
m.POST("/musics/edit/:id", media.MediaMusicHandler.UpdatePage)
m.GET("/musics/delete/:id", media.MediaMusicHandler.DeletePage)
api := router.Group("/api")
api.POST("/login", admin.AuthHandler.Login)
v1 := api.Group("/v1")
{
secured := v1.Group("")
secured.Use(middleware.JWT(admin.Secret))
secured.GET("admin/mailaccounts", admin.MailAccountHandler.List)
secured.GET("user/profiles", admin.ProfileHandler.List)
secured.GET("user/permissions", admin.PermissionHandler.List)
secured.GET("user/assignments", admin.AssignmentHandler.List)
secured.GET("user/mails", admin.MailHandler.List)
secured.GET("user/tokens", admin.TokenHandler.List)
secured.GET("tysc/sports", tysc.SportHandler.List)
secured.GET("tysc/sports/:id", tysc.SportHandler.Get)
secured.GET("tysc/players", tysc.PlayerHandler.List)
secured.GET("tysc/teams", tysc.TeamHandler.List)
secured.GET("tysc/positions", tysc.PositionHandler.List)
secured.GET("tysc/roosters", tysc.RoosterHandler.List)
secured.GET("tysc/vendors", tysc.VendorHandler.List)
secured.GET("tysc/cardsets", tysc.CardSetHandler.List)
secured.GET("tysc/cards", tysc.CardHandler.List)
secured.GET("bookshelf/articles", bookshelf.ArticleHandler.List)
secured.GET("bookshelf/publishers", bookshelf.BookshelfPublisherHandler.List)
secured.GET("bookshelf/books", bookshelf.BookHandler.List)
secured.GET("bookshelf/authors", bookshelf.AuthorHandler.List)
secured.GET("bookshelf/articleauthors", bookshelf.ArticleAuthorHandler.List)
secured.GET("bookshelf/bookauthors", bookshelf.BookAuthorHandler.List)
secured.GET("comics/comics", comics.ComicHandler.List)
secured.GET("comics/publishers", comics.PublisherHandler.List)
secured.GET("comics/artists", comics.ArtistHandler.List)
secured.GET("comics/issues", comics.IssueHandler.List)
secured.GET("comics/tradepaperbacks", comics.TradePaperbackHandler.List)
secured.GET("comics/worktypes", comics.WorkTypeHandler.List)
secured.GET("comics/volumes", comics.VolumeHandler.List)
secured.GET("comics/storyarcs", comics.StoryArcHandler.List)
secured.GET("comics/comicworks", comics.ComicworkHandler.List)
secured.GET("comics/issueworks", comics.IssueworkHandler.List)
mediaGroup := secured.Group("media")
mediaGroup.GET("/files", media.MediaFileHandler.List)
mediaGroup.POST("/files", media.MediaFileHandler.Add)
mediaGroup.GET("/videos", media.MediaVideoHandler.List)
mediaGroup.GET("/lofis", media.MediaLoFiHandler.List)
mediaGroup.POST("/lofis", media.MediaLoFiHandler.Add)
mediaGroup.GET("/lofis/:id", media.MediaLoFiHandler.Get)
mediaGroup.POST("/lofis/:id", media.MediaLoFiHandler.Update)
mediaGroup.DELETE("/lofis/:id", media.MediaLoFiHandler.Delete)
mediaGroup.POST("/musics", media.MediaMusicHandler.Add)
mediaGroup.GET("/musics/:id", media.MediaMusicHandler.Get)
mediaGroup.POST("/musics/:id", media.MediaMusicHandler.Update)
mediaGroup.DELETE("/musics/:id", media.MediaMusicHandler.Delete)
mediaGroup.GET("/actors", media.MediaActorHandler.List)
mediaGroup.POST("/actors", media.MediaActorHandler.Add)
mediaGroup.GET("/actors/:id", media.MediaActorHandler.Get)
mediaGroup.DELETE("/actors/:id", media.MediaActorHandler.Delete)
mediaGroup.GET("/actorfiles", media.MediaActorFileHandler.List)
mediaGroup.POST("/actorfiles", media.MediaActorFileHandler.Add)
mediaGroup.DELETE("/actorfiles", media.MediaActorFileHandler.Delete)
}
return router
}