func ReviewReport(c *gin.Context) { iKeyresultReportID, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil { utils.ErrResponse(c, http.StatusInternalServerError, "KEYRESULTS_REVIEW_REPORT_ID_ERROR", "parameter 'id' couldn't be parsed to int64", err) return } var keyresultReport keyresultsModel.KeyresultReportStatus keyresultReport.KeyresultReportID = iKeyresultReportID if err := c.ShouldBindJSON(&keyresultReport); err == nil { rowsAffected, err := keyresultsModel.ReviewKeyresultReport(&keyresultReport) if err == nil { c.JSON(http.StatusOK, gin.H{"keyresultReportsReviewed": rowsAffected}) switch keyresultReport.Status { case 1: //userID, _ := middleware.Auth.GetClaim(c, "uid").(int64) //keyresultsModel.AddPointsToTheUser(keyresultReport.KeyresultReportID,userID) //if(err) fmt.Println("accepted") case 2: //subPoints() fmt.Println("declined") case 3: fmt.Println("change_requested") case 0: fmt.Println("pending") } } else { utils.ErrResponse(c, http.StatusInternalServerError, "KEYRESULTS_REVIEW_REPORT_INTERNAL_ERROR", "submitting a review of a keyresult report", err) } } else { utils.ErrResponse(c, http.StatusInternalServerError, "KEYRESULTS_REVIEW_REPORT_ERROR", "misformatted request while submitting a review of a keyresult report", err) } } func ReviewKeyresultReport(keyresultReport *KeyresultReportStatus) (int64, error) { result, err := db.NamedExec("UPDATE KeyresultReports SET Status = :Status WHERE KeyresultReportID = :KeyresultReportID", keyresultReport) if err != nil { return 0, err } else { return result.RowsAffected() } } func AddPointsToTheUser(keyresultReportID int64, userID int64) (int64, error) { tx := db.MustBegin() var points int64 err := db.QueryRow("SELECT k.points as Points FROM KeyresultReports as r LEFT JOIN Keyresults as k ON r.KeyresultID = k.KeyresultID WHERE r.KeyresultReportID = ?", keyresultReportID).Scan(&points) if err != nil { tx.Rollback() return 0, err } result, err := db.Exec("UPDATE Users2Workspaces SET Points = ? WHERE UserID = ? AND WorkspaceID = ?", points, userID) if err != nil { tx.Rollback() return 0, err } err = tx.Commit() if err != nil { return 0, err } return result.RowsAffected() } /* ~ RouteGroup: KEYRESULT REPORTS ~ */ routesKeyresultReports := Instance.Group("/keyresult-reports") { protected(routesKeyresultReports, "REVIEW_KEYRESULT_REPORT").PATCH("/report/:id/review", keyresults.ReviewReport) }