package admin import ( "github.com/gin-gonic/gin" "github.com/gothinkster/golang-gin-realworld-example-app/middleware" ) // RegisterRoutes mounts all /api/admin/* routes onto the provided parent group. // Call this BEFORE v1.Use(AuthMiddleware) in main.go so auth is applied here only. func RegisterRoutes(v1 *gin.RouterGroup) { g := v1.Group("/admin") g.Use(middleware.AuthMiddleware(true), middleware.RequireAdmin()) { // P0 — Assets g.GET("/assets", ListAssets) g.GET("/assets/:id", GetAsset) g.POST("/assets", CreateAsset) g.PUT("/assets/:id", UpdateAsset) g.DELETE("/assets/:id", DeleteAsset) // P0 — Asset Custody g.GET("/asset-custody", ListAssetCustody) g.GET("/asset-custody/:id", GetAssetCustody) g.POST("/asset-custody", CreateAssetCustody) g.PUT("/asset-custody/:id", UpdateAssetCustody) g.DELETE("/asset-custody/:id", DeleteAssetCustody) // P0 — Asset Audit Reports g.GET("/asset-audit-reports", ListAssetAuditReports) g.GET("/asset-audit-reports/:id", GetAssetAuditReport) g.POST("/asset-audit-reports", CreateAssetAuditReport) g.PUT("/asset-audit-reports/:id", UpdateAssetAuditReport) g.DELETE("/asset-audit-reports/:id", DeleteAssetAuditReport) // P1 — Points Rules g.GET("/points-rules", ListPointsRules) g.GET("/points-rules/:id", GetPointsRule) g.POST("/points-rules", CreatePointsRule) g.PUT("/points-rules/:id", UpdatePointsRule) g.DELETE("/points-rules/:id", DeletePointsRule) // P1 — Seasons g.GET("/seasons", ListSeasons) g.GET("/seasons/:id", GetSeason) g.POST("/seasons", CreateSeason) g.PUT("/seasons/:id", UpdateSeason) g.DELETE("/seasons/:id", DeleteSeason) // P1 — VIP Tiers g.GET("/vip-tiers", ListVIPTiers) g.GET("/vip-tiers/:id", GetVIPTier) g.POST("/vip-tiers", CreateVIPTier) g.PUT("/vip-tiers/:id", UpdateVIPTier) g.DELETE("/vip-tiers/:id", DeleteVIPTier) // P2 — Users (list + edit only) g.GET("/users", ListUsers) g.GET("/users/:wallet", GetUser) g.PUT("/users/:wallet", UpdateUser) // P2 — Invite Codes g.GET("/invite-codes", ListInviteCodes) g.PATCH("/invite-codes/:id", UpdateInviteCode) g.PUT("/invite-codes/:id/toggle", ToggleInviteCode) // P3 — Product Links (per-asset links on product detail page) g.GET("/product-links", ListProductLinks) g.GET("/product-links/:id", GetProductLink) g.POST("/product-links", CreateProductLink) g.PUT("/product-links/:id", UpdateProductLink) g.DELETE("/product-links/:id", DeleteProductLink) // System Contracts (central infrastructure contract registry) g.GET("/system-contracts", ListSystemContracts) g.GET("/system-contracts/:id", GetSystemContract) g.POST("/system-contracts", CreateSystemContract) g.PUT("/system-contracts/:id", UpdateSystemContract) g.DELETE("/system-contracts/:id", DeleteSystemContract) // File Upload g.POST("/upload", UploadFile) g.DELETE("/upload", DeleteUploadedFile) // Liquidation Bot g.GET("/liquidation/status", GetLiquidationStatus) g.POST("/liquidation/start", StartLiquidationBot) g.POST("/liquidation/stop", StopLiquidationBot) g.GET("/liquidation/records", ListLiquidationRecords) // Collateral Buyer Bot g.GET("/buyer/status", GetBuyerBotStatus) g.POST("/buyer/start", StartBuyerBot) g.POST("/buyer/stop", StopBuyerBot) g.GET("/buyer/records", ListBuyRecords) } }