You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Changeset mutator for REL. Changesets allow filtering, casting, validation and definition of constraints when manipulating structs.
Install
go get github.com/Fs02/changeset
Example
package main
import (
"time""github.com/Fs02/rel""github.com/Fs02/rel/adapter/mysql""github.com/Fs02/changeset""github.com/Fs02/changeset/params"
)
typeProductstruct {
IDintNamestringPriceintCreatedAt time.TimeUpdatedAt time.Time
}
// ChangeProduct prepares data before database operation.// Such as casting value to appropriate types and perform validations.funcChangeProduct(productinterface{}, params params.Params) *changeset.Changeset {
ch:=changeset.Cast(product, params, []string{"name", "price"})
changeset.ValidateRequired(ch, []string{"name", "price"})
changeset.ValidateMin(ch, "price", 100)
returnch
}
funcmain() {
// initialize mysql adapter.adapter, _:=mysql.Open(dsn)
deferadapter.Close()
// initialize rel's repo.repo:=rel.New(adapter)
varproductProduct// Inserting Products.// Changeset is used when creating or updating your data.ch:=ChangeProduct(product, params.Map{
"name": "shampoo",
"price": 1000,
})
ifch.Error() !=nil {
// handle error
}
// Changeset can also be created directly from json string.jsonch:=ChangeProduct(product, params.ParseJSON(`{ "name": "soap", "price": 2000, }`))
// Create products with changeset and return the result to &product,iferr:=repo.Insert(context.TODO(), &product, ch); err!=nil {
// handle error
}
}