package routes import ( "strconv" "gitea.iceberg-gaming.com/17th-Ranger-Battalion-ORG/17th-UnitTracker-API/db" "github.com/labstack/echo/v4" "gorm.io/gorm" ) func setupRankRoutes( e *echo.Echo, mainPrefix *echo.Group, ) { // RANK OPERATIONS g := mainPrefix.Group("/rank") // Get all g.GET("", func(c echo.Context) error { rank := new(db.Rank) ranks, err := rank.GetAll() if err != nil { return c.JSON(500, err) } return c.JSON(200, ranks) }) // Get one by id g.GET("/:id", func(c echo.Context) error { rank := new(db.Rank) searchID, err := strconv.Atoi(c.Param("id")) if err != nil { return c.JSON(400, err) } err = rank.GetByID(searchID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } return c.JSON(200, rank) }) // Create a new rank g.POST("", func(c echo.Context) error { rank := new(db.Rank) err := c.Bind(rank) if err != nil { return c.JSON(400, err) } err = rank.Create() if err != nil { return c.JSON(500, err) } return c.JSON(200, rank) }) // Update a rank g.PUT("/:id", func(c echo.Context) error { rank := new(db.Rank) searchID, err := strconv.Atoi(c.Param("id")) if err != nil { return c.JSON(400, err) } err = rank.GetByID(searchID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } err = c.Bind(rank) if err != nil { return c.JSON(400, err) } err = rank.Update() if err != nil { return c.JSON(500, err) } return c.JSON(200, rank) }) // Delete a rank g.DELETE("/:id", func(c echo.Context) error { rank := new(db.Rank) searchID, err := strconv.Atoi(c.Param("id")) if err != nil { return c.JSON(400, err) } err = rank.GetByID(searchID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } err = rank.Delete() if err != nil { return c.JSON(500, err) } return c.JSON(200, rank) }) // Add a member to a rank g.POST("/:id/member/:memberID", func(c echo.Context) error { rank := new(db.Rank) searchID, err := strconv.Atoi(c.Param("id")) if err != nil { return c.JSON(400, err) } err = rank.GetByID(searchID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } member := new(db.Member) searchMemberID, err := strconv.Atoi(c.Param("memberID")) if err != nil { return c.JSON(400, err) } err = member.GetByID(c.Request().Context(), searchMemberID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } err = rank.AddHolder(member) if err != nil { return c.JSON(500, err) } return c.JSON(200, rank) }) }