diff --git a/main b/main index bbb6190..46902f1 100755 Binary files a/main and b/main differ diff --git a/modules/cache/productpipeline.go b/modules/cache/productpipeline.go index 9ca8de9..07e8a5f 100644 --- a/modules/cache/productpipeline.go +++ b/modules/cache/productpipeline.go @@ -82,11 +82,11 @@ func SetProductStates(productStates []structs.ProductState) { ps.Unlock() } -func IsNameInFutureProducts(name string) bool { +func IsIdInFutureProducts(id string) bool { pipelineProducts := GetPipelineProducts() for _, pipelineProduct := range pipelineProducts.FutureProducts { - if pipelineProduct.Name == name { + if pipelineProduct.Id == id { return true } } @@ -94,17 +94,16 @@ func IsNameInFutureProducts(name string) bool { return false } -func VoteFutureProduct(name string, up bool) { +func VoteFutureProduct(id string, up bool) { pipelineProducts := GetPipelineProducts() for index, futureProduct := range pipelineProducts.FutureProducts { - if futureProduct.Name == name { + if futureProduct.Id == id { pp.Lock() if up { pipelineProductsCache.FutureProducts[index].Votes++ } else { - pipelineProductsCache.FutureProducts[index].Votes-- } diff --git a/modules/structs/productpipeline.go b/modules/structs/productpipeline.go index 8027b77..6697519 100644 --- a/modules/structs/productpipeline.go +++ b/modules/structs/productpipeline.go @@ -2,11 +2,13 @@ package structs // database model type PipelineProduct struct { - Name string `gorm:"primaryKey"` // name is used as ID + Id string + Name string Votes int } type NewProduct struct { + Id string Name string Url string Variant string @@ -14,12 +16,14 @@ type NewProduct struct { } type InWorkProduct struct { + Id string Name string Variant string Characteristics string } type FutureProduct struct { + Id string Name string Votes int Variant string @@ -43,5 +47,5 @@ type VoteProductQuery struct { } type VoteProductRequest struct { - Name string + Id string } diff --git a/routers/router/api/v1/productpipeline/productpipeline.go b/routers/router/api/v1/productpipeline/productpipeline.go index 1bcf173..fa74c19 100644 --- a/routers/router/api/v1/productpipeline/productpipeline.go +++ b/routers/router/api/v1/productpipeline/productpipeline.go @@ -114,31 +114,33 @@ func fetchProducts(srv *sheets.Service) error { var futureProducts []structs.FutureProduct for _, row := range resp.Values[1:] { // skip first google worksheet row - // skip to next if status or name is empty - if row[0] == "" || row[1] == "" { + // skip to next if id, status or name is empty + if row[0] == "" || row[1] == "" || row[2] == "" { continue } - status := fmt.Sprintf("%v", row[0]) - name := fmt.Sprintf("%v", row[1]) + productId := fmt.Sprintf("%v", row[0]) + status := fmt.Sprintf("%v", row[1]) + name := fmt.Sprintf("%v", row[2]) var productVariant string - if row[2] != "" { - productVariant = fmt.Sprintf("%v", row[2]) + if row[3] != "" { + productVariant = fmt.Sprintf("%v", row[3]) } var productCharacteristics string - if row[3] != "" { - productCharacteristics = fmt.Sprintf("%v", row[3]) + if row[4] != "" { + productCharacteristics = fmt.Sprintf("%v", row[4]) } state := getStateByStatus(status) // add product to database if not exist - if !isPipelineProductInDatabase(databasePipelineProducts, name) { + if !isPipelineProductInDatabase(databasePipelineProducts, productId) { database.DB.Create(&structs.PipelineProduct{ + Id: productId, Name: name, Votes: 0, }) @@ -148,6 +150,7 @@ func fetchProducts(srv *sheets.Service) error { if state == 1 { futureProducts = append(futureProducts, structs.FutureProduct{ + Id: productId, Name: name, Votes: getVotes(databasePipelineProducts, name), // votes from database Variant: productVariant, @@ -155,6 +158,7 @@ func fetchProducts(srv *sheets.Service) error { }) } else if state == 2 { inWorkProducts = append(inWorkProducts, structs.InWorkProduct{ + Id: productId, Name: name, Variant: productVariant, Characteristics: productCharacteristics, @@ -162,11 +166,12 @@ func fetchProducts(srv *sheets.Service) error { } else if state == 3 { var url string - if row[7] != "" { - url = fmt.Sprintf("%v", row[7]) + if row[8] != "" { + url = fmt.Sprintf("%v", row[8]) } newProducts = append(newProducts, structs.NewProduct{ + Id: productId, Name: name, Url: url, Variant: productVariant, @@ -236,9 +241,9 @@ func fetchProductStates(srv *sheets.Service) error { return nil } -func isPipelineProductInDatabase(pipelineProducts []structs.PipelineProduct, name string) bool { +func isPipelineProductInDatabase(pipelineProducts []structs.PipelineProduct, id string) bool { for _, pipelineProduct := range pipelineProducts { - if pipelineProduct.Name == name { + if pipelineProduct.Id == id { return true } } @@ -264,8 +269,8 @@ func VoteProduct(c *fiber.Ctx) error { return c.SendStatus(fiber.StatusBadRequest) } - if !cache.IsNameInFutureProducts(body.Name) { - logger.AddSystemLog(rslogger.LogTypeWarning, "VoteProduct invalid product name provided, name: %s", body.Name) + if !cache.IsIdInFutureProducts(body.Id) { + logger.AddSystemLog(rslogger.LogTypeWarning, "VoteProduct invalid product id provided, id: %s", body.Id) return c.SendStatus(fiber.StatusBadRequest) } @@ -275,12 +280,12 @@ func VoteProduct(c *fiber.Ctx) error { operator = "-" } - database.DB.Model(&structs.PipelineProduct{}).Where("name = ?", body.Name).Update("votes", gorm.Expr(fmt.Sprintf("votes %s ?", operator), 1)) + database.DB.Model(&structs.PipelineProduct{}).Where("id = ?", body.Id).Update("votes", gorm.Expr(fmt.Sprintf("votes %s ?", operator), 1)) - cache.VoteFutureProduct(body.Name, query.T == "u") + cache.VoteFutureProduct(body.Id, query.T == "u") cache.SortFutureProducts() - logger.AddSystemLog(rslogger.LogTypeInfo, "Vote name: %v up vote: %v", body.Name, query.T) + logger.AddSystemLog(rslogger.LogTypeInfo, "Vote name: %v up vote: %v", body.Id, query.T) return c.SendStatus(fiber.StatusOK) }