package routes import ( "github.com/gin-gonic/gin" "github.com/timetracker/backend/internal/api/handlers" "github.com/timetracker/backend/internal/api/middleware" ) // SetupRouter configures all the routes for the API func SetupRouter(r *gin.Engine) { // Create handlers userHandler := handlers.NewUserHandler() activityHandler := handlers.NewActivityHandler() companyHandler := handlers.NewCompanyHandler() customerHandler := handlers.NewCustomerHandler() projectHandler := handlers.NewProjectHandler() timeEntryHandler := handlers.NewTimeEntryHandler() // Public routes r.POST("/auth/login", userHandler.Login) // API routes (protected) api := r.Group("/api") api.Use(middleware.AuthMiddleware()) { // Auth routes auth := api.Group("/auth") { auth.GET("/me", userHandler.GetCurrentUser) } // User routes users := api.Group("/users") { users.GET("", userHandler.GetUsers) users.GET("/:id", userHandler.GetUserByID) users.POST("", middleware.RoleMiddleware("admin"), userHandler.CreateUser) users.PUT("/:id", middleware.RoleMiddleware("admin"), userHandler.UpdateUser) users.DELETE("/:id", middleware.RoleMiddleware("admin"), userHandler.DeleteUser) } // Activity routes activities := api.Group("/activities") { activities.GET("", activityHandler.GetActivities) activities.GET("/:id", activityHandler.GetActivityByID) activities.POST("", middleware.RoleMiddleware("admin"), activityHandler.CreateActivity) activities.PUT("/:id", middleware.RoleMiddleware("admin"), activityHandler.UpdateActivity) activities.DELETE("/:id", middleware.RoleMiddleware("admin"), activityHandler.DeleteActivity) } // Company routes companies := api.Group("/companies") { companies.GET("", companyHandler.GetCompanies) companies.GET("/:id", companyHandler.GetCompanyByID) companies.POST("", middleware.RoleMiddleware("admin"), companyHandler.CreateCompany) companies.PUT("/:id", middleware.RoleMiddleware("admin"), companyHandler.UpdateCompany) companies.DELETE("/:id", middleware.RoleMiddleware("admin"), companyHandler.DeleteCompany) } // Customer routes customers := api.Group("/customers") { customers.GET("", customerHandler.GetCustomers) customers.GET("/:id", customerHandler.GetCustomerByID) customers.GET("/company/:companyId", customerHandler.GetCustomersByCompanyID) customers.POST("", middleware.RoleMiddleware("admin"), customerHandler.CreateCustomer) customers.PUT("/:id", middleware.RoleMiddleware("admin"), customerHandler.UpdateCustomer) customers.DELETE("/:id", middleware.RoleMiddleware("admin"), customerHandler.DeleteCustomer) } // Project routes projects := api.Group("/projects") { projects.GET("", projectHandler.GetProjects) projects.GET("/with-customers", projectHandler.GetProjectsWithCustomers) projects.GET("/:id", projectHandler.GetProjectByID) projects.GET("/customer/:customerId", projectHandler.GetProjectsByCustomerID) projects.POST("", middleware.RoleMiddleware("admin"), projectHandler.CreateProject) projects.PUT("/:id", middleware.RoleMiddleware("admin"), projectHandler.UpdateProject) projects.DELETE("/:id", middleware.RoleMiddleware("admin"), projectHandler.DeleteProject) } // Time Entry routes timeEntries := api.Group("/time-entries") { timeEntries.GET("", timeEntryHandler.GetTimeEntries) timeEntries.GET("/me", timeEntryHandler.GetMyTimeEntries) timeEntries.GET("/range", timeEntryHandler.GetTimeEntriesByDateRange) timeEntries.GET("/:id", timeEntryHandler.GetTimeEntryByID) timeEntries.GET("/user/:userId", timeEntryHandler.GetTimeEntriesByUserID) timeEntries.GET("/project/:projectId", timeEntryHandler.GetTimeEntriesByProjectID) timeEntries.POST("", timeEntryHandler.CreateTimeEntry) timeEntries.PUT("/:id", timeEntryHandler.UpdateTimeEntry) timeEntries.DELETE("/:id", timeEntryHandler.DeleteTimeEntry) } } }