first commit
This commit is contained in:
302
app/routes/routes.go
Normal file
302
app/routes/routes.go
Normal file
@@ -0,0 +1,302 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
accountHandlers "gobeyhan/app/account/handlers"
|
||||
accountServices "gobeyhan/app/account/services"
|
||||
blogHandlers "gobeyhan/app/blog/handlers"
|
||||
blogServices "gobeyhan/app/blog/services"
|
||||
"gobeyhan/app/middlewares"
|
||||
settingsHandlers "gobeyhan/app/settings/handlers"
|
||||
settingsServices "gobeyhan/app/settings/services"
|
||||
adminPkg "gobeyhan/internal/handler/admin"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// SetupRoutes initializes all application routes
|
||||
func SetupRoutes(r *gin.Engine) {
|
||||
// ============================================
|
||||
// BLOG APP - Services & Handlers
|
||||
// ============================================
|
||||
categoryService := blogServices.NewCategoryService()
|
||||
tagService := blogServices.NewTagService()
|
||||
postService := blogServices.NewPostService()
|
||||
commentService := blogServices.NewCommentService()
|
||||
categoryViewService := blogServices.NewCategoryViewService()
|
||||
|
||||
categoryHandler := blogHandlers.NewCategoryHandler(categoryService)
|
||||
tagHandler := blogHandlers.NewTagHandler(tagService)
|
||||
postHandler := blogHandlers.NewPostHandler(postService)
|
||||
commentHandler := blogHandlers.NewCommentHandler(commentService)
|
||||
categoryViewHandler := blogHandlers.NewCategoryViewHandler(categoryViewService)
|
||||
|
||||
// ============================================
|
||||
// ACCOUNT APP - Services & Handlers
|
||||
// ============================================
|
||||
// ============================================
|
||||
// ACCOUNT APP - Services & Handlers
|
||||
// ============================================
|
||||
userService := accountServices.NewUserService()
|
||||
socialAccountService := accountServices.NewSocialAccountService()
|
||||
roleService := accountServices.NewRoleService()
|
||||
permissionService := accountServices.NewPermissionService()
|
||||
|
||||
// Settings & Utils
|
||||
settingsService := settingsServices.NewSettingsService()
|
||||
jwtService := settingsServices.NewJWTService()
|
||||
|
||||
// Handlers
|
||||
userHandler := accountHandlers.NewUserHandler(userService)
|
||||
authHandler := accountHandlers.NewAuthHandler(userService, jwtService)
|
||||
oauthHandler := accountHandlers.NewOAuthHandler(userService, socialAccountService, jwtService)
|
||||
// socialAccountHandler := accountHandlers.NewSocialAccountHandler(socialAccountService)
|
||||
roleHandler := accountHandlers.NewRoleHandler(roleService)
|
||||
permissionHandler := accountHandlers.NewPermissionHandler(permissionService)
|
||||
|
||||
// ============================================
|
||||
// SETTINGS APP - Services & Handlers
|
||||
// ============================================
|
||||
settingsHandler := settingsHandlers.NewSettingsHandler(settingsService)
|
||||
|
||||
// ============================================
|
||||
// ADMIN UI ROUTES
|
||||
// ============================================
|
||||
adminHandler := adminPkg.NewHandler()
|
||||
r.GET("/admin/login", adminHandler.LoginPage)
|
||||
r.POST("/admin/login", adminHandler.LoginPost)
|
||||
r.GET("/admin", func(c *gin.Context) {
|
||||
c.Redirect(301, "/admin/dashboard")
|
||||
})
|
||||
r.GET("/admin/dashboard", adminHandler.Dashboard)
|
||||
|
||||
// User CRUD
|
||||
adminUserHandler := adminPkg.NewUserHandler()
|
||||
r.GET("/admin/users", adminUserHandler.List)
|
||||
r.GET("/admin/users/new", adminUserHandler.New)
|
||||
r.POST("/admin/users", adminUserHandler.Create)
|
||||
r.GET("/admin/users/:id/edit", adminUserHandler.Edit)
|
||||
r.POST("/admin/users/:id", adminUserHandler.Update)
|
||||
r.POST("/admin/users/:id/delete", adminUserHandler.Delete)
|
||||
|
||||
// ========================================
|
||||
// SETTINGS UI ROUTES
|
||||
// ========================================
|
||||
adminSettingsHandler := adminPkg.NewSettingsHandler()
|
||||
|
||||
// Whitelist
|
||||
r.GET("/admin/settings/whitelist", adminSettingsHandler.ListWhitelist)
|
||||
r.GET("/admin/settings/whitelist/new", adminSettingsHandler.NewWhitelist)
|
||||
r.POST("/admin/settings/whitelist", adminSettingsHandler.CreateWhitelist)
|
||||
r.GET("/admin/settings/whitelist/:id/edit", adminSettingsHandler.EditWhitelist)
|
||||
r.POST("/admin/settings/whitelist/:id", adminSettingsHandler.UpdateWhitelist)
|
||||
r.POST("/admin/settings/whitelist/:id/delete", adminSettingsHandler.DeleteWhitelist)
|
||||
|
||||
// Blacklist
|
||||
r.GET("/admin/settings/blacklist", adminSettingsHandler.ListBlacklist)
|
||||
r.GET("/admin/settings/blacklist/new", adminSettingsHandler.NewBlacklist)
|
||||
r.POST("/admin/settings/blacklist", adminSettingsHandler.CreateBlacklist)
|
||||
r.GET("/admin/settings/blacklist/:id/edit", adminSettingsHandler.EditBlacklist)
|
||||
r.POST("/admin/settings/blacklist/:id", adminSettingsHandler.UpdateBlacklist)
|
||||
r.POST("/admin/settings/blacklist/:id/delete", adminSettingsHandler.DeleteBlacklist)
|
||||
|
||||
// Rate Limits
|
||||
r.GET("/admin/settings/rate-limits", adminSettingsHandler.ListRateLimits)
|
||||
r.GET("/admin/settings/rate-limits/:id/edit", adminSettingsHandler.EditRateLimit)
|
||||
r.POST("/admin/settings/rate-limits/:id", adminSettingsHandler.UpdateRateLimit)
|
||||
r.POST("/admin/settings/rate-limits/:id/delete", adminSettingsHandler.DeleteRateLimit)
|
||||
|
||||
// ========================================
|
||||
// BLOG UI ROUTES
|
||||
// ========================================
|
||||
adminBlogHandler := adminPkg.NewBlogHandler()
|
||||
|
||||
r.GET("/admin/blog", adminBlogHandler.List)
|
||||
r.GET("/admin/blog/new", adminBlogHandler.New)
|
||||
r.POST("/admin/blog", adminBlogHandler.Create)
|
||||
r.GET("/admin/blog/:id/edit", adminBlogHandler.Edit)
|
||||
r.POST("/admin/blog/:id", adminBlogHandler.Update)
|
||||
r.POST("/admin/blog/:id/delete", adminBlogHandler.Delete)
|
||||
|
||||
// Categories
|
||||
r.GET("/admin/blog/categories", adminBlogHandler.ListCategories)
|
||||
r.GET("/admin/blog/categories/new", adminBlogHandler.NewCategory)
|
||||
r.POST("/admin/blog/categories", adminBlogHandler.CreateCategory)
|
||||
r.GET("/admin/blog/categories/:id/edit", adminBlogHandler.EditCategory)
|
||||
r.POST("/admin/blog/categories/:id", adminBlogHandler.UpdateCategory)
|
||||
r.POST("/admin/blog/categories/:id/delete", adminBlogHandler.DeleteCategory)
|
||||
|
||||
// Tags
|
||||
r.GET("/admin/blog/tags", adminBlogHandler.ListTags)
|
||||
r.GET("/admin/blog/tags/new", adminBlogHandler.NewTag)
|
||||
r.POST("/admin/blog/tags", adminBlogHandler.CreateTag)
|
||||
r.GET("/admin/blog/tags/:id/edit", adminBlogHandler.EditTag)
|
||||
r.POST("/admin/blog/tags/:id", adminBlogHandler.UpdateTag)
|
||||
r.POST("/admin/blog/tags/:id/delete", adminBlogHandler.DeleteTag)
|
||||
|
||||
// Comments
|
||||
r.GET("/admin/blog/comments", adminBlogHandler.ListComments)
|
||||
r.GET("/admin/blog/comments/:id/edit", adminBlogHandler.EditComment)
|
||||
r.POST("/admin/blog/comments/:id", adminBlogHandler.UpdateComment)
|
||||
r.POST("/admin/blog/comments/:id/delete", adminBlogHandler.DeleteComment)
|
||||
|
||||
// Static files sharing
|
||||
r.Static("/uploads", "./uploads")
|
||||
|
||||
// ============================================
|
||||
// API v1 Group
|
||||
// ============================================
|
||||
api := r.Group("/api/v1")
|
||||
api.Use(middlewares.DynamicCorsMiddleware(settingsService))
|
||||
{
|
||||
// ========================================
|
||||
// AUTH ENDPOINTS
|
||||
// ========================================
|
||||
auth := api.Group("/auth")
|
||||
{
|
||||
// Basic Auth
|
||||
auth.POST("/register", authHandler.Register)
|
||||
auth.POST("/login", authHandler.Login)
|
||||
auth.POST("/refresh", authHandler.RefreshToken)
|
||||
auth.POST("/logout", authHandler.Logout)
|
||||
|
||||
// OAuth
|
||||
auth.GET("/google", oauthHandler.GoogleLogin)
|
||||
auth.GET("/google/callback", oauthHandler.GoogleCallback)
|
||||
auth.GET("/github", oauthHandler.GithubLogin)
|
||||
auth.GET("/github/callback", oauthHandler.GithubCallback)
|
||||
|
||||
// Protected
|
||||
auth.GET("/me", middlewares.AuthMiddleware(jwtService), authHandler.GetCurrentUser)
|
||||
}
|
||||
|
||||
// ========================================
|
||||
// PUBLIC ENDPOINTS (Read-only)
|
||||
// ========================================
|
||||
|
||||
// Blog - Categories
|
||||
api.GET("/categories", categoryHandler.GetAllCategories)
|
||||
api.GET("/categories/:slug", categoryHandler.GetCategoryBySlug)
|
||||
api.POST("/categories/:id/view", categoryViewHandler.TrackCategoryView)
|
||||
|
||||
// Blog - Tags
|
||||
api.GET("/tags", tagHandler.GetAllTags)
|
||||
api.GET("/tags/:slug", tagHandler.GetTagBySlug)
|
||||
|
||||
// Blog - Posts
|
||||
api.GET("/posts", postHandler.GetAllPosts)
|
||||
api.GET("/posts/:slug", postHandler.GetPostBySlug)
|
||||
|
||||
// Blog - Comments (separate route to avoid wildcard conflict)
|
||||
api.GET("/comments/post/:postId", commentHandler.GetPostComments)
|
||||
|
||||
// ========================================
|
||||
// AUTHENTICATED USER ENDPOINTS
|
||||
// ========================================
|
||||
// NOTE: These routes require AuthMiddleware()
|
||||
// Uncomment when authentication middleware is ready
|
||||
|
||||
// user := api.Group("/user")
|
||||
// user.Use(AuthMiddleware())
|
||||
// {
|
||||
// // Blog - Comments (authenticated users can comment)
|
||||
// user.POST("/comments/post/:postId", commentHandler.CreatePostComment)
|
||||
//
|
||||
// // Account - Social Accounts
|
||||
// user.GET("/social-accounts", socialAccountHandler.GetUserSocialAccounts)
|
||||
// user.DELETE("/social-accounts/:id", socialAccountHandler.DeleteSocialAccount)
|
||||
// }
|
||||
|
||||
// ========================================
|
||||
// ADMIN ENDPOINTS (Protected)
|
||||
// ========================================
|
||||
// NOTE: These routes require AuthMiddleware() + AdminMiddleware()
|
||||
|
||||
admin := api.Group("/admin")
|
||||
admin.Use(middlewares.AuthMiddleware(jwtService), middlewares.AdminMiddleware())
|
||||
{
|
||||
// ========================================
|
||||
// BLOG APP - Admin Routes
|
||||
// ========================================
|
||||
|
||||
// Categories
|
||||
admin.GET("/categories", categoryHandler.AdminGetAllCategories)
|
||||
admin.GET("/categories/:id", categoryHandler.GetCategoryByID)
|
||||
admin.POST("/categories", categoryHandler.CreateCategory)
|
||||
admin.PUT("/categories/:id", categoryHandler.UpdateCategory)
|
||||
admin.DELETE("/categories/:id", categoryHandler.DeleteCategory)
|
||||
admin.GET("/categories/:id/views", categoryViewHandler.GetCategoryViewStats)
|
||||
|
||||
// Tags
|
||||
admin.GET("/tags", tagHandler.AdminGetAllTags)
|
||||
admin.GET("/tags/:id", tagHandler.GetTagByID)
|
||||
admin.POST("/tags", tagHandler.CreateTag)
|
||||
admin.PUT("/tags/:id", tagHandler.UpdateTag)
|
||||
admin.DELETE("/tags/:id", tagHandler.DeleteTag)
|
||||
|
||||
// Posts
|
||||
admin.GET("/posts", postHandler.AdminGetAllPosts)
|
||||
admin.GET("/posts/:id", postHandler.GetPostByID)
|
||||
admin.POST("/posts", postHandler.CreatePost)
|
||||
admin.PUT("/posts/:id", postHandler.UpdatePost)
|
||||
admin.DELETE("/posts/:id", postHandler.DeletePost)
|
||||
|
||||
// Comments
|
||||
admin.GET("/comments", commentHandler.AdminGetAllComments)
|
||||
admin.GET("/comments/:id", commentHandler.AdminGetCommentByID)
|
||||
admin.PUT("/comments/:id", commentHandler.AdminUpdateComment)
|
||||
admin.DELETE("/comments/:id", commentHandler.AdminDeleteComment)
|
||||
|
||||
// Category Views
|
||||
admin.GET("/category-views", categoryViewHandler.AdminGetAllCategoryViews)
|
||||
|
||||
// ========================================
|
||||
// ACCOUNT APP - Admin Routes
|
||||
// ========================================
|
||||
|
||||
// Users
|
||||
admin.GET("/users", userHandler.AdminGetAllUsers)
|
||||
admin.GET("/users/:id", userHandler.AdminGetUserByID)
|
||||
admin.POST("/users", userHandler.AdminCreateUser)
|
||||
admin.PUT("/users/:id", userHandler.AdminUpdateUser)
|
||||
admin.DELETE("/users/:id", userHandler.AdminDeleteUser)
|
||||
admin.POST("/users/:id/restore", userHandler.AdminRestoreUser)
|
||||
admin.POST("/users/:id/roles", userHandler.AdminAssignRole)
|
||||
admin.DELETE("/users/:id/roles/:role_id", userHandler.AdminRemoveRole)
|
||||
|
||||
// Roles
|
||||
admin.GET("/roles", roleHandler.AdminGetAllRoles)
|
||||
admin.GET("/roles/:id", roleHandler.AdminGetRoleByID)
|
||||
admin.POST("/roles", roleHandler.AdminCreateRole)
|
||||
admin.PUT("/roles/:id", roleHandler.AdminUpdateRole)
|
||||
admin.DELETE("/roles/:id", roleHandler.AdminDeleteRole)
|
||||
|
||||
// Permissions
|
||||
admin.GET("/permissions", permissionHandler.AdminGetAllPermissions)
|
||||
admin.POST("/permissions", permissionHandler.AdminCreatePermission)
|
||||
|
||||
// ========================================
|
||||
// SETTINGS APP - Admin Routes
|
||||
// ========================================
|
||||
|
||||
// CORS Whitelist
|
||||
admin.GET("/cors/whitelist", settingsHandler.GetAllWhitelist)
|
||||
admin.POST("/cors/whitelist", settingsHandler.CreateWhitelist)
|
||||
admin.PUT("/cors/whitelist/:id", settingsHandler.UpdateWhitelist)
|
||||
admin.DELETE("/cors/whitelist/:id", settingsHandler.DeleteWhitelist)
|
||||
|
||||
// CORS Blacklist
|
||||
admin.GET("/cors/blacklist", settingsHandler.GetAllBlacklist)
|
||||
admin.POST("/cors/blacklist", settingsHandler.CreateBlacklist)
|
||||
admin.PUT("/cors/blacklist/:id", settingsHandler.UpdateBlacklist)
|
||||
admin.DELETE("/cors/blacklist/:id", settingsHandler.DeleteBlacklist)
|
||||
|
||||
// CORS Cache
|
||||
admin.POST("/cors/cache/invalidate", settingsHandler.InvalidateCorsCache)
|
||||
|
||||
// Rate Limits
|
||||
admin.GET("/rate-limits", settingsHandler.GetAllRateLimits)
|
||||
admin.PUT("/rate-limits/:id", settingsHandler.UpdateRateLimit)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user