qudoco-be/app/module/bookmarks/bookmarks.module.go

67 lines
2.0 KiB
Go

package bookmarks
import (
"web-qudo-be/app/middleware"
"web-qudo-be/app/module/bookmarks/controller"
"web-qudo-be/app/module/bookmarks/repository"
"web-qudo-be/app/module/bookmarks/service"
usersRepo "web-qudo-be/app/module/users/repository"
"github.com/gofiber/fiber/v2"
"go.uber.org/fx"
)
// BookmarksRouter struct of BookmarksRouter
type BookmarksRouter struct {
App fiber.Router
Controller controller.BookmarksController
UsersRepo usersRepo.UsersRepository
}
// NewBookmarksModule register bulky of Bookmarks module
var NewBookmarksModule = fx.Options(
// register repository of Bookmarks module
fx.Provide(repository.NewBookmarksRepository),
// register service of Bookmarks module
fx.Provide(service.NewBookmarksService),
// register controller of Bookmarks module
fx.Provide(controller.NewBookmarksController),
// register router of Bookmarks module
fx.Provide(NewBookmarksRouter),
)
// NewBookmarksRouter init BookmarksRouter
func NewBookmarksRouter(fiber *fiber.App, controller controller.BookmarksController, usersRepo usersRepo.UsersRepository) *BookmarksRouter {
return &BookmarksRouter{
App: fiber,
Controller: controller,
UsersRepo: usersRepo,
}
}
// RegisterBookmarksRoutes register routes of Bookmarks module
func (_i *BookmarksRouter) RegisterBookmarksRoutes() {
// define controllers
bookmarksController := _i.Controller
// define routes
_i.App.Route("/bookmarks", func(router fiber.Router) {
// Add user middleware to extract user level from JWT token
router.Use(middleware.UserMiddleware(_i.UsersRepo))
// Public routes (require authentication)
router.Get("/", bookmarksController.All)
router.Get("/:id", bookmarksController.Show)
router.Post("/", bookmarksController.Save)
router.Delete("/:id", bookmarksController.Delete)
// User-specific routes
router.Get("/user", bookmarksController.GetByUserId)
router.Post("/toggle/:articleId", bookmarksController.ToggleBookmark)
router.Get("/summary", bookmarksController.GetBookmarkSummary)
})
}