From 02d2cc66299799d3be742f00dd7edfb4f1fabf53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Bouzour=C3=A8ne?= Date: Thu, 23 Jan 2025 15:53:58 +0100 Subject: [PATCH] Implement lib to generate fake data for testing --- controllers/debug.go | 103 +++++++++++++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 2 + main.go | 5 +++ 4 files changed, 111 insertions(+) create mode 100644 controllers/debug.go diff --git a/controllers/debug.go b/controllers/debug.go new file mode 100644 index 0000000..bfadc4d --- /dev/null +++ b/controllers/debug.go @@ -0,0 +1,103 @@ +package controllers + +import ( + "fmt" + "math/rand/v2" + + "git.readonly.ch/bouzoure/pop-camarades/helpers" + "git.readonly.ch/bouzoure/pop-camarades/models" + "github.com/brianvoe/gofakeit/v7" + "github.com/gofiber/fiber/v2" +) + +func DebugFakeMembers(c *fiber.Ctx) error { + number, _ := c.ParamsInt("number") + + db, err := helpers.GetDatabase() + if err != nil { + return err + } + + var sections []models.Section + result := db.Find(§ions, "contains_members = ?", true) + + if result.Error != nil { + return result.Error + } + + if result.RowsAffected < 1 { + return fiber.NewError(400, "cannot create members because no sections") + } + + for i := 0; i < number; i++ { + section := sections[rand.IntN(len(sections))] + address := gofakeit.Address() + address2 := fmt.Sprintf("C/O %s", gofakeit.Name()) + + person := models.Person{ + IsMember: true, + FirstName: gofakeit.FirstName(), + LastName: gofakeit.LastName(), + Email: gofakeit.Email(), + Phone: gofakeit.Phone(), + Mobile: gofakeit.Phone(), + Address1: address.Street, + Address2: address2, + PostalCode: address.Zip[:4], + City: address.City, + SectionID: section.ID, + } + + db.Create(&person) + } + + return c.SendString(fmt.Sprintf( + "Created %d member(s)", number, + )) +} + +func DebugFakeContacts(c *fiber.Ctx) error { + number, _ := c.ParamsInt("number") + + db, err := helpers.GetDatabase() + if err != nil { + return err + } + + var sections []models.Section + result := db.Find(§ions, "contains_contacts = ?", true) + + if result.Error != nil { + return result.Error + } + + if result.RowsAffected < 1 { + return fiber.NewError(400, "cannot create contacts because no sections") + } + + for i := 0; i < number; i++ { + section := sections[rand.IntN(len(sections))] + address := gofakeit.Address() + address2 := fmt.Sprintf("C/O %s", gofakeit.Name()) + + person := models.Person{ + IsContact: true, + FirstName: gofakeit.FirstName(), + LastName: gofakeit.LastName(), + Email: gofakeit.Email(), + Phone: gofakeit.Phone(), + Mobile: gofakeit.Phone(), + Address1: address.Street, + Address2: address2, + PostalCode: address.Zip[:4], + City: address.City, + SectionID: section.ID, + } + + db.Create(&person) + } + + return c.SendString(fmt.Sprintf( + "Created %d contact(s)", number, + )) +} diff --git a/go.mod b/go.mod index f2df916..13918b7 100644 --- a/go.mod +++ b/go.mod @@ -22,6 +22,7 @@ require ( github.com/andybalholm/brotli v1.1.1 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/boombuler/barcode v1.0.2 // indirect + github.com/brianvoe/gofakeit/v7 v7.1.2 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/charmbracelet/lipgloss v0.10.0 // indirect diff --git a/go.sum b/go.sum index 0246d2b..36e7bb3 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,8 @@ github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.2 h1:79yrbttoZrLGkL/oOI8hBrUKucwOL0oOjUgEguGMcJ4= github.com/boombuler/barcode v1.0.2/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/brianvoe/gofakeit/v7 v7.1.2 h1:vSKaVScNhWVpf1rlyEKSvO8zKZfuDtGqoIHT//iNNb8= +github.com/brianvoe/gofakeit/v7 v7.1.2/go.mod h1:QXuPeBw164PJCzCUZVmgpgHJ3Llj49jSLVkKPMtxtxA= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= diff --git a/main.go b/main.go index befca21..7d61f5f 100644 --- a/main.go +++ b/main.go @@ -205,6 +205,11 @@ func main() { app.Post("/admin/roles/:id/edit", controllers.RoleEdit) app.Post("/admin/roles/:id/delete", controllers.RoleDelete) + if config.Debug { + app.Get("/debug/fake-members/:number", controllers.DebugFakeMembers) + app.Get("/debug/fake-contacts/:number", controllers.DebugFakeContacts) + } + log.Info( "starting web server", "address", config.App.ListenAddress,