155 lines
6.8 KiB
Go
155 lines
6.8 KiB
Go
package router
|
|
|
|
import (
|
|
"html/template"
|
|
"io"
|
|
"kontor-api-echo/assets"
|
|
"kontor-api-echo/internal/config"
|
|
"kontor-api-echo/internal/handlers"
|
|
"kontor-api-echo/templates"
|
|
"log/slog"
|
|
"os"
|
|
|
|
echojwt "github.com/labstack/echo-jwt/v5"
|
|
"github.com/labstack/echo/v5"
|
|
"github.com/labstack/echo/v5/middleware"
|
|
)
|
|
|
|
type Template struct {
|
|
templates *template.Template
|
|
}
|
|
|
|
func (t *Template) Render(c *echo.Context, w io.Writer, name string, data any) error {
|
|
return t.templates.ExecuteTemplate(w, name, data)
|
|
}
|
|
|
|
func New(admin *handlers.AdminHandler, media *handlers.MediaHandler) *echo.Echo {
|
|
e := echo.New()
|
|
|
|
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
|
|
|
|
e.Use(middleware.Recover())
|
|
|
|
e.Use(middleware.RequestLoggerWithConfig(middleware.RequestLoggerConfig{
|
|
LogURI: true,
|
|
LogStatus: true,
|
|
HandleError: true,
|
|
Skipper: func(c *echo.Context) bool {
|
|
// Skip health check endpoint
|
|
return c.Path() == "/health"
|
|
},
|
|
LogValuesFunc: func(c *echo.Context, v middleware.RequestLoggerValues) error {
|
|
if v.Error != nil {
|
|
logger.Error("request failed", "uri", v.URI, "status", v.Status, "error", v.Error)
|
|
return nil
|
|
}
|
|
logger.Info("request", "uri", v.URI, "status", v.Status)
|
|
return nil
|
|
},
|
|
}))
|
|
|
|
e.StaticFS("/public", echo.MustSubFS(assets.StaticFiles, "assets"))
|
|
|
|
templ := template.Must(template.New("").ParseFS(templates.TemplateFiles, "layouts/*.html", "pages/*.html"))
|
|
|
|
t := &Template{
|
|
templates: templ,
|
|
}
|
|
|
|
e.Renderer = t
|
|
|
|
e.GET("/health", handlers.Health)
|
|
e.GET("/", handlers.Index)
|
|
e.GET("/login", admin.AuthHandler.LoginPage)
|
|
e.POST("/login", admin.AuthHandler.LoginPost)
|
|
e.GET("/logout", admin.AuthHandler.LogoutPage)
|
|
|
|
mediaGroup := e.Group("/media")
|
|
//mediaGroup.Use(middleware.AuthRequired())
|
|
mediaGroup.GET("/actors", media.MediaActorHandler.ListPage)
|
|
mediaGroup.GET("/actors/:id", media.MediaActorHandler.EditPage)
|
|
mediaGroup.POST("/actors/:id", media.MediaActorHandler.UpdatePage)
|
|
mediaGroup.GET("/articles", media.MediaArticleHandler.ListPage)
|
|
mediaGroup.GET("/files", media.MediaFileHandler.ListPage)
|
|
mediaGroup.GET("/files/edit/:id", media.MediaFileHandler.EditPage)
|
|
mediaGroup.POST("/files/edit/:id", media.MediaFileHandler.UpdatePage)
|
|
mediaGroup.GET("/files/delete/:id", media.MediaFileHandler.DeletePage)
|
|
mediaGroup.GET("/videos", media.MediaVideoHandler.ListPage)
|
|
mediaGroup.GET("/videos/edit/:id", media.MediaVideoHandler.EditPage)
|
|
mediaGroup.POST("/videos/edit/:id", media.MediaVideoHandler.UpdatePage)
|
|
mediaGroup.GET("/videos/delete/:id", media.MediaVideoHandler.DeletePage)
|
|
mediaGroup.GET("/lofis", media.MediaLoFiHandler.ListPage)
|
|
mediaGroup.GET("/lofis/edit", media.MediaLoFiHandler.EditPage)
|
|
mediaGroup.GET("/lofis/edit/:id", media.MediaLoFiHandler.EditPage)
|
|
mediaGroup.POST("/lofis/edit/:id", media.MediaLoFiHandler.UpdatePage)
|
|
mediaGroup.GET("/lofis/review/:id", media.MediaLoFiHandler.ChangeReviewPage)
|
|
mediaGroup.GET("/lofis/delete/:id", media.MediaLoFiHandler.DeletePage)
|
|
mediaGroup.GET("/musics", media.MediaMusicHandler.ListPage)
|
|
mediaGroup.GET("/musics/edit/:id", media.MediaMusicHandler.EditPage)
|
|
mediaGroup.POST("/musics/edit/:id", media.MediaMusicHandler.UpdatePage)
|
|
mediaGroup.GET("/musics/delete/:id", media.MediaMusicHandler.DeletePage)
|
|
|
|
api := e.Group("/api")
|
|
api.POST("/login", admin.AuthHandler.Login)
|
|
|
|
v1 := api.Group("/v1")
|
|
{
|
|
secured := v1.Group("")
|
|
secured.Use(echojwt.WithConfig(echojwt.Config{SigningKey: config.ServerConfig.ApiSecret}))
|
|
//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 e
|
|
}
|