129 lines
5.1 KiB
Go
129 lines
5.1 KiB
Go
// internal/routes/routes.go
|
|
package routes
|
|
|
|
import (
|
|
"lost-and-found/internal/controllers"
|
|
"lost-and-found/internal/middleware"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// SetupRoutes configures all application routes
|
|
func SetupRoutes(router *gin.Engine, db *gorm.DB) {
|
|
// Initialize controllers
|
|
authController := controllers.NewAuthController(db)
|
|
userController := controllers.NewUserController(db)
|
|
itemController := controllers.NewItemController(db)
|
|
lostItemController := controllers.NewLostItemController(db)
|
|
claimController := controllers.NewClaimController(db)
|
|
matchController := controllers.NewMatchController(db)
|
|
categoryController := controllers.NewCategoryController(db)
|
|
archiveController := controllers.NewArchiveController(db)
|
|
adminController := controllers.NewAdminController(db)
|
|
reportController := controllers.NewReportController(db)
|
|
|
|
// API group
|
|
api := router.Group("/api")
|
|
{
|
|
// Public routes (no authentication required)
|
|
api.POST("/register", authController.Register)
|
|
api.POST("/login", authController.Login)
|
|
api.POST("/refresh-token", authController.RefreshToken)
|
|
|
|
// Public categories
|
|
api.GET("/categories", categoryController.GetAllCategories)
|
|
api.GET("/categories/:id", categoryController.GetCategoryByID)
|
|
|
|
// Public items (read-only, limited info)
|
|
api.GET("/items", itemController.GetAllItems)
|
|
api.GET("/items/:id", itemController.GetItemByID)
|
|
|
|
// Authenticated routes (all users)
|
|
authenticated := api.Group("")
|
|
authenticated.Use(middleware.JWTMiddleware(db))
|
|
authenticated.Use(middleware.RequireUser())
|
|
{
|
|
// User profile
|
|
authenticated.GET("/me", authController.GetMe)
|
|
authenticated.GET("/user/profile", userController.GetProfile)
|
|
authenticated.PUT("/user/profile", userController.UpdateProfile)
|
|
authenticated.POST("/user/change-password", userController.ChangePassword)
|
|
authenticated.GET("/user/stats", userController.GetStats)
|
|
|
|
// User items
|
|
authenticated.GET("/user/items", itemController.GetItemsByReporter)
|
|
authenticated.POST("/items", itemController.CreateItem)
|
|
|
|
// User lost items
|
|
authenticated.GET("/user/lost-items", lostItemController.GetLostItemsByUser)
|
|
authenticated.GET("/lost-items", lostItemController.GetAllLostItems)
|
|
authenticated.GET("/lost-items/:id", lostItemController.GetLostItemByID)
|
|
authenticated.POST("/lost-items", lostItemController.CreateLostItem)
|
|
authenticated.PUT("/lost-items/:id", lostItemController.UpdateLostItem)
|
|
authenticated.PATCH("/lost-items/:id/status", lostItemController.UpdateLostItemStatus)
|
|
authenticated.DELETE("/lost-items/:id", lostItemController.DeleteLostItem)
|
|
|
|
// User claims
|
|
authenticated.GET("/user/claims", claimController.GetClaimsByUser)
|
|
authenticated.GET("/claims", claimController.GetAllClaims)
|
|
authenticated.GET("/claims/:id", claimController.GetClaimByID)
|
|
authenticated.POST("/claims", claimController.CreateClaim)
|
|
authenticated.DELETE("/claims/:id", claimController.DeleteClaim)
|
|
|
|
// Matches (for lost items)
|
|
authenticated.GET("/lost-items/:id/matches", matchController.GetMatchesForLostItem)
|
|
authenticated.POST("/lost-items/:id/find-similar", matchController.FindSimilarItems)
|
|
}
|
|
|
|
// Manager routes (manager and admin)
|
|
manager := api.Group("")
|
|
manager.Use(middleware.JWTMiddleware(db))
|
|
manager.Use(middleware.RequireManager())
|
|
{
|
|
// Item management
|
|
manager.PUT("/items/:id", itemController.UpdateItem)
|
|
manager.PATCH("/items/:id/status", itemController.UpdateItemStatus)
|
|
manager.DELETE("/items/:id", itemController.DeleteItem)
|
|
manager.GET("/items/:id/revisions", itemController.GetItemRevisionHistory)
|
|
manager.GET("/items/:id/matches", matchController.GetMatchesForItem)
|
|
|
|
// Claim verification
|
|
manager.POST("/claims/:id/verify", claimController.VerifyClaim)
|
|
manager.GET("/claims/:id/verification", claimController.GetClaimVerification)
|
|
manager.POST("/claims/:id/close", claimController.CloseClaim)
|
|
|
|
// Archives
|
|
manager.GET("/archives", archiveController.GetAllArchives)
|
|
manager.GET("/archives/:id", archiveController.GetArchiveByID)
|
|
manager.GET("/archives/stats", archiveController.GetArchiveStats)
|
|
|
|
// Dashboard
|
|
manager.GET("/manager/dashboard", adminController.GetDashboardStats)
|
|
}
|
|
|
|
// Admin routes (admin only)
|
|
admin := api.Group("/admin")
|
|
admin.Use(middleware.JWTMiddleware(db))
|
|
admin.Use(middleware.RequireAdmin())
|
|
{
|
|
// User management
|
|
admin.GET("/users", userController.GetAllUsers)
|
|
admin.GET("/users/:id", userController.GetUserByID)
|
|
admin.PATCH("/users/:id/role", userController.UpdateUserRole)
|
|
admin.POST("/users/:id/block", userController.BlockUser)
|
|
admin.POST("/users/:id/unblock", userController.UnblockUser)
|
|
admin.DELETE("/users/:id", userController.DeleteUser)
|
|
|
|
// Category management
|
|
admin.POST("/categories", categoryController.CreateCategory)
|
|
admin.PUT("/categories/:id", categoryController.UpdateCategory)
|
|
admin.DELETE("/categories/:id", categoryController.DeleteCategory)
|
|
|
|
// Dashboard & Reports
|
|
admin.GET("/dashboard", adminController.GetDashboardStats)
|
|
admin.GET("/audit-logs", adminController.GetAuditLogs)
|
|
admin.POST("/reports/export", reportController.ExportReport)
|
|
}
|
|
}
|
|
} |