change to GORM, add member and rank handlers

This commit is contained in:
2024-03-08 00:39:46 -08:00
parent 84424fdae9
commit 3b715cf331
36 changed files with 3491 additions and 230 deletions

View File

@@ -1,9 +1,6 @@
package routes
import (
"gitea.iceberg-gaming.com/17th-Ranger-Battalion-ORG/17th-UnitTracker-API/db"
"gitea.iceberg-gaming.com/17th-Ranger-Battalion-ORG/17th-UnitTracker-API/ops"
"errors"
"strings"
@@ -19,22 +16,8 @@ func SetupRoutes(
cfg := viper.GetViper()
prefixURL := strings.TrimRight(cfg.GetString("API_PREFIX"), "/")
mainPrefix := e.Group(prefixURL, func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
// do something before the next handler
// ensure we always have a db connection
_, err := db.GetDB()
if err != nil {
return err
}
return next(c)
}
})
// MEMBER OPERATIONS
g := mainPrefix.Group("/members")
g.GET("", ops.GetMembers)
g.GET("/:id", ops.GetMember)
mainPrefix := e.Group(prefixURL)
setupMemberRoutes(e, mainPrefix)
setupRankRoutes(e, mainPrefix)
}

141
api/routes/member.go Normal file
View File

@@ -0,0 +1,141 @@
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)
})
}

127
api/routes/rank.go Normal file
View File

@@ -0,0 +1,127 @@
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)
})
}