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 setupMemberRoutes( e *echo.Echo, mainPrefix *echo.Group, ) { // MEMBER OPERATIONS g := mainPrefix.Group("/member") // Get all g.GET("", func(c echo.Context) error { var err error member := new(db.Member) // if query params are present, use them to filter // otherwise, return all rank := new(db.Rank) if c.QueryParam("rank") != "" { queriedID, err := strconv.Atoi(c.QueryParam("rank")) if err != nil { return c.JSON(400, err) } err = rank.GetByID(queriedID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } } award := new(db.Award) if c.QueryParam("award") != "" { queriedID, err := strconv.Atoi(c.QueryParam("award")) if err != nil { return c.JSON(400, err) } err = award.GetByID(queriedID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } } course := new(db.Course) if c.QueryParam("course") != "" { queriedID, err := strconv.Atoi(c.QueryParam("course")) if err != nil { return c.JSON(400, err) } err = course.GetByID(queriedID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } } members, err := member.GetAll(c.Request().Context()) if err != nil { return c.JSON(500, err) } return c.JSON(200, members) }) // Get one by id g.GET("/:id", func(c echo.Context) error { member := new(db.Member) searchID, err := strconv.Atoi(c.Param("id")) if err != nil { return c.JSON(400, err) } err = member.GetByID(c.Request().Context(), searchID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } return c.JSON(200, member) }) // Create a new member g.POST("", func(c echo.Context) error { member := new(db.Member) err := c.Bind(member) if err != nil { return c.JSON(400, err) } err = member.Create(c.Request().Context(), c) if err != nil { return c.JSON(500, err) } return c.JSON(200, member) }) // Update a member g.PUT("/:id", func(c echo.Context) error { member := new(db.Member) searchID, err := strconv.Atoi(c.Param("id")) if err != nil { return c.JSON(400, err) } err = member.GetByID(c.Request().Context(), searchID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } err = c.Bind(member) if err != nil { return c.JSON(400, err) } err = member.Update(c.Request().Context(), c) if err != nil { return c.JSON(500, err) } return c.JSON(200, member) }) // Delete a member g.DELETE("/:id", func(c echo.Context) error { member := new(db.Member) searchID, err := strconv.Atoi(c.Param("id")) if err != nil { return c.JSON(400, err) } err = member.GetByID(c.Request().Context(), searchID) if err == gorm.ErrRecordNotFound { return c.JSON(404, err) } else if err != nil { return c.JSON(500, err) } err = member.Delete(c.Request().Context(), c) if err != nil { return c.JSON(500, err) } return c.JSON(200, member) }) }