database-anonymizer/data/data.go
Simon Vieille 628308e2fc
manager all number types
add 'null' faker

update readme
2024-04-02 19:24:50 +02:00

104 lines
1.6 KiB
Go

package data
import (
"bytes"
"github.com/tyler-sommer/stick"
"github.com/tyler-sommer/stick/twig"
"gitnet.fr/deblan/database-anonymizer/faker"
"gitnet.fr/deblan/database-anonymizer/logger"
"strconv"
"strings"
)
type Data struct {
Value string
Faker string
IsVirtual bool
IsPrimaryKey bool
IsUpdated bool
IsNumber bool
IsBoolean bool
IsString bool
IsNull bool
}
func (d *Data) FromByte(v []byte) *Data {
d.Value = string(v)
return d
}
func (d *Data) FromInt64(v int64) *Data {
d.Value = strconv.FormatInt(v, 10)
return d
}
func (d *Data) FromString(v string) *Data {
d.Value = v
return d
}
func (d *Data) FinalValue() string {
if d.IsNull {
return "null"
}
if d.IsBoolean {
if d.Value == "1" {
return "true"
} else {
return "false"
}
}
return d.Value
}
func (d *Data) IsTwigExpression() bool {
return strings.Contains(d.Faker, "{{") || strings.Contains(d.Faker, "}}")
}
func (d *Data) Update(row map[string]Data, manager faker.FakeManager) {
if d.IsPrimaryKey {
return
}
if d.Faker == "" || d.Faker == "_" {
return
}
if d.Faker == "null" {
d.Value = ""
d.IsUpdated = true
d.IsNull = true
return
}
if d.IsTwigExpression() {
env := twig.New(nil)
params := map[string]stick.Value{}
for key, value := range row {
params[key] = value.Value
}
var buf bytes.Buffer
err := env.Execute(d.Faker, &buf, params)
logger.LogFatalExitIf(err)
d.Value = buf.String()
d.IsUpdated = true
d.IsNull = d.Value == ""
return
}
d.Value = manager.Fakers[d.Faker]()
d.IsUpdated = true
}