From 4b98322022985e809dbf46935b151f4fed71093b Mon Sep 17 00:00:00 2001 From: Gregory Ballantine Date: Tue, 12 Aug 2025 11:40:56 -0400 Subject: [PATCH] Continued work on the test/edit post routet --- models/test.go | 18 ++++++++++++++++++ web/routes/test.go | 23 +++++++++++++---------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/models/test.go b/models/test.go index a4630c7..5c72afb 100644 --- a/models/test.go +++ b/models/test.go @@ -1,6 +1,7 @@ package models import ( + "fmt" "strconv" "gorm.io/gorm" @@ -30,3 +31,20 @@ func (t *Test) SelectedBenchmarks() []string { } return ids } + +func (t *Test) IsBenchmarkSelected(benchmarkID string) bool { + benchmarkConv, err := strconv.ParseUint(benchmarkID, 10, 0) + if err != nil { + fmt.Println("Error parsing Uint: ", err) + } + + benchmarkUint := uint(benchmarkConv) + + for _, b := range t.Benchmarks { + if b.ID == benchmarkUint { + return true + } + } + + return false +} diff --git a/web/routes/test.go b/web/routes/test.go index b2c7afa..86f9e3c 100644 --- a/web/routes/test.go +++ b/web/routes/test.go @@ -126,19 +126,22 @@ func TestPostEdit(c flamego.Context, form forms.TestForm, errs binding.Errors) { var test models.Test models.DB.Preload("Hardware").Preload("Benchmarks").First(&test, testID) - test := models.Test{ - Name: form.Name, - Description: form.Description, - HardwareID: form.Hardware, + test.Name = form.Name + test.Description = form.Description + test.HardwareID = form.Hardware + + // bind benchmarks to test that aren't already associated + for _, b := range form.Benchmarks { + if ! test.IsBenchmarkSelected(b) { + var benchmark models.Benchmark + models.DB.First(&benchmark, b) // find benchmark + models.DB.Model(&test).Association("Benchmarks").Append(&benchmark) + } } - _ = models.DB.Create(&test) + // removed associated benchmarks that weren't in the form + for _, b := range test.Benchmarks { - // bind benchmarks to test - for _, v := range form.Benchmarks { - var benchmark models.Benchmark - models.DB.First(&benchmark, v) // find benchmark - models.DB.Model(&test).Association("Benchmarks").Append(&benchmark) } c.Redirect(fmt.Sprintf("/test/%d", test.ID))