Files
gobeyhan/app/routes/routes.go
Beyhan Oğur f34e54c5a5 first commit
2026-04-26 21:43:40 +03:00

303 lines
12 KiB
Go

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)
}
}
}