Implement lib to generate fake data for testing

This commit is contained in:
William Bouzourène 2025-01-23 15:53:58 +01:00
parent e96fff646f
commit 02d2cc6629
4 changed files with 111 additions and 0 deletions

103
controllers/debug.go Normal file
View file

@ -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(&sections, "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(&sections, "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,
))
}

1
go.mod
View file

@ -22,6 +22,7 @@ require (
github.com/andybalholm/brotli v1.1.1 // indirect github.com/andybalholm/brotli v1.1.1 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/boombuler/barcode v1.0.2 // 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 v1.1.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/charmbracelet/lipgloss v0.10.0 // indirect github.com/charmbracelet/lipgloss v0.10.0 // indirect

2
go.sum
View file

@ -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.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 h1:79yrbttoZrLGkL/oOI8hBrUKucwOL0oOjUgEguGMcJ4=
github.com/boombuler/barcode v1.0.2/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= 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/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 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=

View file

@ -205,6 +205,11 @@ func main() {
app.Post("/admin/roles/:id<int;min(0)>/edit", controllers.RoleEdit) app.Post("/admin/roles/:id<int;min(0)>/edit", controllers.RoleEdit)
app.Post("/admin/roles/:id<int;min(0)>/delete", controllers.RoleDelete) app.Post("/admin/roles/:id<int;min(0)>/delete", controllers.RoleDelete)
if config.Debug {
app.Get("/debug/fake-members/:number<int;min(1)>", controllers.DebugFakeMembers)
app.Get("/debug/fake-contacts/:number<int;min(1)>", controllers.DebugFakeContacts)
}
log.Info( log.Info(
"starting web server", "starting web server",
"address", config.App.ListenAddress, "address", config.App.ListenAddress,