Skip to content

Commit

Permalink
feat: refactoring routes to separated files and adding hearts endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
felipebrsk committed Oct 31, 2024
1 parent 55a9a6a commit 3e029d7
Show file tree
Hide file tree
Showing 16 changed files with 721 additions and 163 deletions.
2 changes: 2 additions & 0 deletions cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ func main() {
adminPlatformService,
adminTagService,
adminGameService,
heartService,
db := di.InitDependencies()

// Setup routes with dependency injection
Expand All @@ -56,6 +57,7 @@ func main() {
adminPlatformService,
adminTagService,
adminGameService,
heartService,
db,
)

Expand Down
45 changes: 45 additions & 0 deletions cmd/server/routes/admin_routes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package routes

import (
"gcstatus/internal/middlewares"
"gcstatus/internal/usecases"

"github.com/gin-gonic/gin"
)

func RegisterAdminRoutes(
r *gin.RouterGroup,
userService *usecases.UserService,
handlers *AdminHandlers,
) {
permissionMiddleware := middlewares.NewPermissionMiddleware(userService)
r.Use(middlewares.JWTAuthMiddleware(userService))

r.POST("/login", handlers.AdminAuthHandler.Login)
r.GET("/me", handlers.AdminAuthHandler.Me)
r.POST("/logout", handlers.AdminAuthHandler.Logout)
r.POST("/steam/register/:appID", permissionMiddleware("create:steam-jobs-games"), handlers.AdminSteamHandler.RegisterByAppID)

r.GET("/categories", permissionMiddleware("view:categories"), handlers.AdminCategoryHandler.GetAll)
r.POST("/categories", permissionMiddleware("view:categories", "create:categories"), handlers.AdminCategoryHandler.Create)
r.PUT("/categories/:id", permissionMiddleware("view:categories", "update:categories"), handlers.AdminCategoryHandler.Update)
r.DELETE("/categories/:id", permissionMiddleware("view:categories", "delete:categories"), handlers.AdminCategoryHandler.Delete)

r.GET("/genres", permissionMiddleware("view:genres"), handlers.AdminGenreHandler.GetAll)
r.POST("/genres", permissionMiddleware("view:genres", "create:genres"), handlers.AdminGenreHandler.Create)
r.PUT("/genres/:id", permissionMiddleware("view:genres", "update:genres"), handlers.AdminGenreHandler.Update)
r.DELETE("/genres/:id", permissionMiddleware("view:genres", "delete:genres"), handlers.AdminGenreHandler.Delete)

r.GET("/platforms", permissionMiddleware("view:platforms"), handlers.AdminPlatformHandler.GetAll)
r.POST("/platforms", permissionMiddleware("view:platforms", "create:platforms"), handlers.AdminPlatformHandler.Create)
r.PUT("/platforms/:id", permissionMiddleware("view:platforms", "update:platforms"), handlers.AdminPlatformHandler.Update)
r.DELETE("/platforms/:id", permissionMiddleware("view:platforms", "delete:platforms"), handlers.AdminPlatformHandler.Delete)

r.GET("/tags", permissionMiddleware("view:tags"), handlers.AdminTagHandler.GetAll)
r.POST("/tags", permissionMiddleware("view:tags", "create:tags"), handlers.AdminTagHandler.Create)
r.PUT("/tags/:id", permissionMiddleware("view:tags", "update:tags"), handlers.AdminTagHandler.Update)
r.DELETE("/tags/:id", permissionMiddleware("view:tags", "delete:tags"), handlers.AdminTagHandler.Delete)

r.GET("/games", permissionMiddleware("view:games"), handlers.AdminGameHandler.GetAll)
r.GET("/games/:id", permissionMiddleware("view:games"), handlers.AdminGameHandler.FindByID)
}
46 changes: 46 additions & 0 deletions cmd/server/routes/auth_protected_routes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package routes

import (
"gcstatus/internal/middlewares"
"gcstatus/internal/usecases"

"github.com/gin-gonic/gin"
)

func RegisterProtectedRoutes(
r *gin.RouterGroup,
userService *usecases.UserService,
handlers *Handlers,
) {
r.Use(middlewares.JWTAuthMiddleware(userService))

r.GET("/me", handlers.AuthHandler.Me)
r.GET("/levels", handlers.LevelHandler.GetAll)
r.POST("/auth/logout", handlers.AuthHandler.Logout)

r.GET("/titles", handlers.TitleHandler.GetAllForUser)
r.PUT("/titles/:id/toggle", handlers.TitleHandler.ToggleEnableTitle)
r.POST("/titles/:id/buy", handlers.TitleHandler.BuyTitle)

r.PUT("/profile/password", handlers.PasswordResetHandler.ResetPasswordProfile)
r.PUT("/profile/picture", handlers.ProfileHandler.UpdatePicture)
r.PUT("/profile/socials", handlers.ProfileHandler.UpdateSocials)

r.PUT("/user/update/basics", handlers.UserHandler.UpdateUserBasics)
r.PUT("/user/update/sensitive", handlers.UserHandler.UpdateUserNickAndEmail)

r.GET("/transactions", handlers.TransactionHandler.GetAllForUser)

r.GET("/notifications", handlers.NotificationHandler.GetAllForUser)
r.PUT("/notifications/:id/read", handlers.NotificationHandler.MarkAsRead)
r.PUT("/notifications/:id/unread", handlers.NotificationHandler.MarkAsUnread)
r.PUT("/notifications/all/read", handlers.NotificationHandler.MarkAllAsRead)
r.PUT("/notifications/all/unread", handlers.NotificationHandler.MarkAllAsUnread)
r.DELETE("/notifications/:id", handlers.NotificationHandler.DeleteNotification)
r.DELETE("/notifications/all", handlers.NotificationHandler.DeleteAllNotifications)

r.GET("/missions", handlers.MissionHandler.GetAllForUser)
r.POST("/missions/:id/complete", handlers.MissionHandler.CompleteMission)

r.POST("/hearts", handlers.HeartHandler.ToggleHeartable)
}
17 changes: 17 additions & 0 deletions cmd/server/routes/auth_routes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package routes

import (
"gcstatus/internal/middlewares"

"github.com/gin-gonic/gin"
)

func RegisterAuthRoutes(
r *gin.RouterGroup,
handlers *Handlers,
) {
r.POST("/login", handlers.AuthHandler.Login)
r.POST("/register", handlers.AuthHandler.Register)
r.POST("/password/email/send", middlewares.LimitResetRequestMiddleware(), handlers.PasswordResetHandler.RequestPasswordReset)
r.POST("/password/reset", handlers.PasswordResetHandler.ResetUserPassword)
}
18 changes: 18 additions & 0 deletions cmd/server/routes/base_routes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package routes

import (
"net/http"

"github.com/gin-gonic/gin"
)

func RegisterCommonRoutes(
r *gin.Engine,
handlers *Handlers,
) {
r.GET("/health", func(ctx *gin.Context) {
ctx.JSON(http.StatusOK, gin.H{"message": "Everything is ok!"})
})
r.GET("/home", handlers.HomeHandler.Home)
r.GET("/games/:slug", handlers.GameHandler.FindBySlug)
}
107 changes: 50 additions & 57 deletions cmd/server/routes/init_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,31 @@ import (
"gorm.io/gorm"
)

type Handlers struct {
AuthHandler *api.AuthHandler
PasswordResetHandler *api.PasswordResetHandler
LevelHandler *api.LevelHandler
ProfileHandler *api.ProfileHandler
UserHandler *api.UserHandler
TitleHandler *api.TitleHandler
TransactionHandler *api.TransactionHandler
NotificationHandler *api.NotificationHandler
MissionHandler *api.MissionHandler
GameHandler *api.GameHandler
HomeHandler *api.HomeHandler
HeartHandler *api.HeartHandler
}

type AdminHandlers struct {
AdminAuthHandler *api_admin.AuthHandler
AdminCategoryHandler *api_admin.AdminCategoryHandler
AdminGenreHandler *api_admin.AdminGenreHandler
AdminPlatformHandler *api_admin.AdminPlatformHandler
AdminTagHandler *api_admin.AdminTagHandler
AdminGameHandler *api_admin.AdminGameHandler
AdminSteamHandler *api_admin.SteamHandler
}

func InitHandlers(
authService *usecases.AuthService,
userService *usecases.UserService,
Expand All @@ -28,62 +53,30 @@ func InitHandlers(
AdminPlatformService *usecases_admin.AdminPlatformService,
adminTagService *usecases_admin.AdminTagService,
adminGameService *usecases_admin.AdminGameService,
heartService *usecases.HeartService,
db *gorm.DB,
) (
authHandler *api.AuthHandler,
passwordResetHandler *api.PasswordResetHandler,
levelHandler *api.LevelHandler,
profileHandler *api.ProfileHandler,
userHandler *api.UserHandler,
titleHandler *api.TitleHandler,
transactionHandler *api.TransactionHandler,
notificationHandler *api.NotificationHandler,
missionHandler *api.MissionHandler,
gameHandler *api.GameHandler,
homeHandler *api.HomeHandler,
steamHandler *api_admin.SteamHandler,
adminAuthHandler *api_admin.AuthHandler,
adminCategoryHandler *api_admin.AdminCategoryHandler,
adminGenreHandler *api_admin.AdminGenreHandler,
adminPlatformHandler *api_admin.AdminPlatformHandler,
adminTagHandler *api_admin.AdminTagHandler,
adminGameHandler *api_admin.AdminGameHandler,
) {
userHandler = api.NewUserHandler(userService)
authHandler = api.NewAuthHandler(authService, userService)
passwordResetHandler = api.NewPasswordResetHandler(passwordResetService, userService, authService)
levelHandler = api.NewLevelHandler(levelService)
profileHandler = api.NewProfileHandler(profileService, userService)
titleHandler = api.NewTitleHandler(titleService, userService, walletService, taskService, transactionService, notificationService)
transactionHandler = api.NewTransactionHandler(transactionService, userService)
notificationHandler = api.NewNotificationHandler(notificationService, userService)
missionHandler = api.NewMissionHandler(missionService, userService)
gameHandler = api.NewGameHandler(gameService, userService)
homeHandler = api.NewHomeHandler(userService, gameService, bannerService)
steamHandler = api_admin.NewSteamHandler(gameService, db)
adminAuthHandler = api_admin.NewAuthHandler(authService, userService)
adminCategoryHandler = api_admin.NewAdminCategoryHandler(adminCategoryService)
adminGenreHandler = api_admin.NewAdminGenreHandler(adminGenreService)
adminPlatformHandler = api_admin.NewAdminPlatformHandler(AdminPlatformService)
adminTagHandler = api_admin.NewAdminTagHandler(adminTagService)
adminGameHandler = api_admin.NewAdminGameHandler(adminGameService)

return authHandler,
passwordResetHandler,
levelHandler,
profileHandler,
userHandler,
titleHandler,
transactionHandler,
notificationHandler,
missionHandler,
gameHandler,
homeHandler,
steamHandler,
adminAuthHandler,
adminCategoryHandler,
adminGenreHandler,
adminPlatformHandler,
adminTagHandler,
adminGameHandler
) (*Handlers, *AdminHandlers) {
return &Handlers{
AuthHandler: api.NewAuthHandler(authService, userService),
PasswordResetHandler: api.NewPasswordResetHandler(passwordResetService, userService, authService),
LevelHandler: api.NewLevelHandler(levelService),
ProfileHandler: api.NewProfileHandler(profileService, userService),
UserHandler: api.NewUserHandler(userService),
TitleHandler: api.NewTitleHandler(titleService, userService, walletService, taskService, transactionService, notificationService),
TransactionHandler: api.NewTransactionHandler(transactionService, userService),
NotificationHandler: api.NewNotificationHandler(notificationService, userService),
MissionHandler: api.NewMissionHandler(missionService, userService),
GameHandler: api.NewGameHandler(gameService, userService),
HomeHandler: api.NewHomeHandler(userService, gameService, bannerService),
HeartHandler: api.NewHeartHandler(userService, heartService),
},
&AdminHandlers{
AdminAuthHandler: api_admin.NewAuthHandler(authService, userService),
AdminCategoryHandler: api_admin.NewAdminCategoryHandler(adminCategoryService),
AdminGenreHandler: api_admin.NewAdminGenreHandler(adminGenreService),
AdminPlatformHandler: api_admin.NewAdminPlatformHandler(AdminPlatformService),
AdminTagHandler: api_admin.NewAdminTagHandler(adminTagService),
AdminGameHandler: api_admin.NewAdminGameHandler(adminGameService),
AdminSteamHandler: api_admin.NewSteamHandler(gameService, db),
}
}
Loading

0 comments on commit 3e029d7

Please sign in to comment.