github.com/soulteary/pocket-bookcase@v0.0.0-20240428065142-0b5a9a0fc98a/internal/http/routes/api/v1/api.go (about)

     1  package api_v1
     2  
     3  import (
     4  	"github.com/gin-gonic/gin"
     5  	"github.com/sirupsen/logrus"
     6  	"github.com/soulteary/pocket-bookcase/internal/dependencies"
     7  	"github.com/soulteary/pocket-bookcase/internal/model"
     8  )
     9  
    10  type APIRoutes struct {
    11  	logger       *logrus.Logger
    12  	deps         *dependencies.Dependencies
    13  	loginHandler model.LegacyLoginHandler
    14  }
    15  
    16  func (r *APIRoutes) Setup(g *gin.RouterGroup) model.Routes {
    17  	// Account API handles authentication in each route
    18  	r.handle(g, "/auth", NewAuthAPIRoutes(r.logger, r.deps, r.loginHandler))
    19  	r.handle(g, "/bookmarks", NewBookmarksAPIRoutes(r.logger, r.deps))
    20  	r.handle(g, "/tags", NewTagsPIRoutes(r.logger, r.deps))
    21  
    22  	return r
    23  }
    24  
    25  func (s *APIRoutes) handle(g *gin.RouterGroup, path string, routes model.Routes) {
    26  	group := g.Group(path)
    27  	routes.Setup(group)
    28  }
    29  
    30  func NewAPIRoutes(logger *logrus.Logger, deps *dependencies.Dependencies, loginHandler model.LegacyLoginHandler) *APIRoutes {
    31  	return &APIRoutes{
    32  		logger:       logger,
    33  		deps:         deps,
    34  		loginHandler: loginHandler,
    35  	}
    36  }