Filter products per machine
This commit is contained in:
@ -24,7 +24,22 @@ func handlePing(c *gin.Context) {
|
|||||||
|
|
||||||
func handleGetProducts(dbConn *gorm.DB) gin.HandlerFunc {
|
func handleGetProducts(dbConn *gorm.DB) gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
products := db.GetProducts(dbConn)
|
var (
|
||||||
|
machineId *int = nil
|
||||||
|
err error
|
||||||
|
mId int
|
||||||
|
)
|
||||||
|
|
||||||
|
machineIdStr, ok := c.GetQuery("machineId")
|
||||||
|
if ok && len(machineIdStr) > 0 {
|
||||||
|
if mId, err = strconv.Atoi(machineIdStr); err != nil {
|
||||||
|
raiseBadRequestError(c, "Invalid machineId filter")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
machineId = &mId
|
||||||
|
}
|
||||||
|
|
||||||
|
products := db.GetProducts(dbConn, machineId)
|
||||||
|
|
||||||
c.JSON(
|
c.JSON(
|
||||||
http.StatusOK,
|
http.StatusOK,
|
||||||
|
|||||||
@ -2,10 +2,19 @@ package db
|
|||||||
|
|
||||||
import "gorm.io/gorm"
|
import "gorm.io/gorm"
|
||||||
|
|
||||||
func GetProducts(dbConn *gorm.DB) *[]Product {
|
func GetProducts(dbConn *gorm.DB, machineId *int) *[]Product {
|
||||||
var products []Product
|
var (
|
||||||
|
products []Product
|
||||||
|
query = dbConn
|
||||||
|
)
|
||||||
|
|
||||||
dbConn.Order("name").Find(&products)
|
if machineId != nil {
|
||||||
|
query = query.
|
||||||
|
Joins("LEFT JOIN machine_products mp ON mp.product_id = products.id").
|
||||||
|
Where("mp.machine_id = ?", machineId)
|
||||||
|
}
|
||||||
|
|
||||||
|
query.Order("name").Find(&products)
|
||||||
|
|
||||||
return &products
|
return &products
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user