[Issue #11] - added ability to create new benchmark settings profiles
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-10-22 00:58:32 -04:00
parent 431d94660d
commit 008a6a5c72
14 changed files with 173 additions and 38 deletions

View File

@@ -18,11 +18,23 @@ func ApiV1BenchmarkDetails(c flamego.Context, r flamego.Render) {
// find benchmark from DB
var benchmark models.Benchmark
models.DB.First(&benchmark, benchmarkID)
// return JSON response
r.JSON(200, benchmark)
}
func ApiV1BenchmarkProfileDetails(c flamego.Context, r flamego.Render) {
// find benchmark ID from request
benchmarkProfileID := c.Query("benchmark_profile_id")
// find benchmark from DB
var benchmarkProfile models.BenchmarkProfile
models.DB.Preload("BenchmarkProfiles").First(&benchmarkProfile, benchmarkProfileID)
// return JSON response
r.JSON(200, benchmarkProfile)
}
func ApiV1ResultAdd(c flamego.Context, form forms.ResultForm, errs binding.Errors, r flamego.Render) {
if len(errs) > 0 {
var err error
@@ -36,8 +48,8 @@ func ApiV1ResultAdd(c flamego.Context, form forms.ResultForm, errs binding.Error
}
result := models.Result{
TestID: form.Test,
BenchmarkID: form.Benchmark,
TestID: form.Test,
BenchmarkProfileID: form.BenchmarkProfile,
AverageScore: form.AverageScore,
MinimumScore: form.MinimumScore,
MaximumScore: form.MaximumScore,
@@ -50,12 +62,12 @@ func ApiV1ResultAdd(c flamego.Context, form forms.ResultForm, errs binding.Error
func ApiV1ResultList(c flamego.Context, r flamego.Render) {
// find benchmark and test IDs from request
benchmarkID := c.Query("benchmark_id")
benchmarkProfileID := c.Query("benchmark_id")
testID := c.Query("test_id")
// find results from the DB that match the benchmark and test
var results []models.Result
models.DB.Where("test_id = ? AND benchmark_id = ?", testID, benchmarkID).Find(&results)
models.DB.Where("test_id = ? AND benchmark_profile_id = ?", testID, benchmarkProfileID).Find(&results)
// return JSON response
r.JSON(200, results)

View File

@@ -30,7 +30,7 @@ func BenchmarkGetView(c flamego.Context, t template.Template, data template.Data
// find benchmark from DB
var benchmark models.Benchmark
models.DB.First(&benchmark, benchmarkID)
models.DB.Preload("BenchmarkProfiles").First(&benchmark, benchmarkID)
data["benchmark"] = benchmark
data["title"] = benchmark.Name
@@ -105,3 +105,37 @@ func BenchmarkPostEdit(c flamego.Context, form forms.BenchmarkForm, errs binding
c.Redirect(fmt.Sprintf("/benchmark/%d", benchmark.ID))
}
func BenchmarkGetProfileAdd(c flamego.Context, t template.Template, data template.Data) {
// find benchmark ID from request
benchmarkID := c.Param("benchmark_id")
// find benchmark from DB
var benchmark models.Benchmark
models.DB.First(&benchmark, benchmarkID)
data["benchmark"] = benchmark
data["title"] = benchmark.Name
t.HTML(http.StatusOK, "benchmark/profile/add")
}
func BenchmarkPostProfileAdd(c flamego.Context, form forms.BenchmarkProfileForm, errs binding.Errors) {
// find benchmark ID from request
benchmarkID := c.Param("benchmark_id")
// find benchmark from DB
var benchmark models.Benchmark
models.DB.First(&benchmark, benchmarkID)
benchmarkProfile := models.BenchmarkProfile{
BenchmarkID: form.BenchmarkID,
Label: form.Label,
Settings: form.Settings,
}
fmt.Println(form.BenchmarkID)
_ = models.DB.Create(&benchmarkProfile)
c.Redirect(fmt.Sprintf("/benchmark/%d", benchmark.ID))
}

View File

@@ -26,7 +26,7 @@ func ResultPostCreate(c flamego.Context, form forms.ResultForm, errs binding.Err
result := models.Result{
TestID: form.Test,
BenchmarkID: form.Benchmark,
BenchmarkProfileID: form.BenchmarkProfile,
AverageScore: form.AverageScore,
MinimumScore: form.MinimumScore,
MaximumScore: form.MaximumScore,

View File

@@ -73,10 +73,10 @@ func TestPostCreate(c flamego.Context, form forms.TestForm, errs binding.Errors)
_ = models.DB.Create(&test)
// bind benchmarks to test
for _, v := range form.Benchmarks {
for _, v := range form.BenchmarkProfiles {
var benchmark models.Benchmark
models.DB.First(&benchmark, v) // find benchmark
models.DB.Model(&test).Association("Benchmarks").Append(&benchmark)
models.DB.Model(&test).Association("BenchmarkProfiles").Append(&benchmark)
}
c.Redirect(fmt.Sprintf("/test/%d", test.ID))
@@ -86,7 +86,7 @@ func TestGetEdit(c flamego.Context, t template.Template, data template.Data) {
// find test in DB
testID := c.Param("test_id")
var test models.Test
models.DB.Preload("Hardware").Preload("Benchmarks").First(&test, testID)
models.DB.Preload("Hardware").Preload("BenchmarkProfiles").First(&test, testID)
data["test"] = test
// add hardware components to template
@@ -124,27 +124,27 @@ func TestPostEdit(c flamego.Context, form forms.TestForm, errs binding.Errors) {
// find hardware from DB
var test models.Test
models.DB.Preload("Hardware").Preload("Benchmarks").First(&test, testID)
models.DB.Preload("Hardware").Preload("BenchmarkProfiles").First(&test, testID)
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 {
for _, b := range form.BenchmarkProfiles {
if ! test.IsBenchmarkSelected(b) {
var benchmark models.Benchmark
var benchmark models.BenchmarkProfile
models.DB.First(&benchmark, b) // find benchmark
models.DB.Model(&test).Association("Benchmarks").Append(&benchmark)
models.DB.Model(&test).Association("BenchmarkProfiles").Append(&benchmark)
}
}
// removed associated benchmarks that weren't in the form
for _, b := range test.Benchmarks {
for _, b := range test.BenchmarkProfiles {
if ! form.IsBenchmarkSelected(b.ID) {
var benchmark models.Benchmark
var benchmark models.BenchmarkProfile
models.DB.First(&benchmark, b) // find benchmark
models.DB.Model(&test).Association("Benchmarks").Delete(&benchmark)
models.DB.Model(&test).Association("BenchmarkProfiles").Delete(&benchmark)
}
}