128 lines
2.8 KiB
Go
128 lines
2.8 KiB
Go
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)
|
|
})
|
|
}
|