github.com/machinefi/w3bstream@v1.6.5-rc9.0.20240426031326-b8c7c4876e72/pkg/depends/kit/modelgen/gen_test.go (about)

     1  package modelgen_test
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  
     8  	"github.com/machinefi/w3bstream/pkg/depends/gen/codegen"
     9  	. "github.com/machinefi/w3bstream/pkg/depends/kit/modelgen"
    10  	"github.com/machinefi/w3bstream/pkg/depends/x/pkgx"
    11  )
    12  
    13  var (
    14  	g *Generator
    15  	f *codegen.File
    16  	m *Model
    17  )
    18  
    19  func init() {
    20  	cwd, _ := os.Getwd()
    21  	dir := filepath.Join(cwd, "./__examples__")
    22  	pkg, _ := pkgx.LoadFrom(dir)
    23  
    24  	g = New(pkg)
    25  	g.WithComments = true
    26  	g.WithTableName = true
    27  	g.WithTableInterfaces = true
    28  	g.WithMethods = true
    29  	g.Database = "DB"
    30  	g.StructName = "Org"
    31  	g.Scan()
    32  	g.Output(cwd)
    33  
    34  	g = New(pkg)
    35  	g.WithComments = true
    36  	g.WithTableName = true
    37  	g.WithTableInterfaces = true
    38  	g.WithMethods = true
    39  	g.Database = "DB"
    40  	g.StructName = "User"
    41  	g.Scan()
    42  	g.Output(cwd)
    43  
    44  	f = codegen.NewFile("example", "mock.go") // mock codegen.File
    45  	m = GetModelByName(g, "User")
    46  	if m == nil {
    47  		panic("should scanned `User` model")
    48  	}
    49  }
    50  
    51  func ExampleModel_SnippetTableInstanceAndInit() {
    52  	ss := m.SnippetTableInstanceAndInit(f)
    53  	for _, s := range ss {
    54  		fmt.Println(string(s.Bytes()))
    55  	}
    56  	// Output:
    57  	// var UserTable *builder.Table
    58  	// func init() {
    59  	// UserTable=DB.Register(&User{})
    60  	// }
    61  }
    62  
    63  func ExampleModel_SnippetTableIteratorAndMethods() {
    64  	ss := m.SnippetTableIteratorAndMethods(f)
    65  	for _, s := range ss {
    66  		fmt.Println(string(s.Bytes()))
    67  	}
    68  	// Output:
    69  	// type UserIterator struct {
    70  	// }
    71  	// func (*UserIterator) New() interface{} {
    72  	// return &User{}
    73  	// }
    74  	// func (*UserIterator) Resolve(v interface{}) *User {
    75  	// return v.(*User)
    76  	// }
    77  }
    78  
    79  func ExampleModel_SnippetTableName() {
    80  	fmt.Println(string(m.SnippetTableName(f).Bytes()))
    81  	// Output:
    82  	// func (*User) TableName() string {
    83  	// return "t_user"
    84  	// }
    85  }
    86  
    87  func ExampleModel_SnippetTableDesc() {
    88  	fmt.Println(string(m.SnippetTableDesc(f).Bytes()))
    89  	// Output:
    90  	// func (*User) TableDesc() []string {
    91  	// return []string{
    92  	// "User 用户表",
    93  	// }
    94  	// }
    95  }
    96  
    97  func ExampleModel_SnippetComments() {
    98  	fmt.Println(string(m.SnippetComments(f).Bytes()))
    99  	// Output:
   100  	// func (*User) Comments() map[string]string {
   101  	// return map[string]string{
   102  	// "Name": "姓名",
   103  	// "Nickname": "昵称",
   104  	// "OrgID": "关联组织",
   105  	// "Username": "用户名",
   106  	// }
   107  	// }
   108  }
   109  
   110  func ExampleModel_SnippetColDesc() {
   111  	fmt.Println(string(m.SnippetColDesc(f).Bytes()))
   112  	// Output:
   113  	// func (*User) ColDesc() map[string][]string {
   114  	// return map[string][]string{
   115  	// "Name": []string{
   116  	// "姓名",
   117  	// },
   118  	// "Nickname": []string{
   119  	// "昵称",
   120  	// },
   121  	// "OrgID": []string{
   122  	// "关联组织",
   123  	// "组织ID",
   124  	// },
   125  	// "Username": []string{
   126  	// "用户名",
   127  	// },
   128  	// }
   129  	// }
   130  }
   131  
   132  func ExampleModel_SnippetColRel() {
   133  	fmt.Println(string(m.SnippetColRel(f).Bytes()))
   134  	// Output:
   135  	// func (*User) ColRel() map[string][]string {
   136  	// return map[string][]string{
   137  	// "OrgID": []string{
   138  	// "Org",
   139  	// "ID",
   140  	// },
   141  	// }
   142  	// }
   143  }
   144  
   145  func ExampleModel_SnippetPrimaryKey() {
   146  	fmt.Println(string(m.SnippetPrimaryKey(f).Bytes()))
   147  	// Output:
   148  	// func (*User) PrimaryKey() []string {
   149  	// return []string{
   150  	// "ID",
   151  	// }
   152  	// }
   153  }
   154  
   155  func ExampleModel_SnippetIndexes() {
   156  	fmt.Println(string(m.SnippetIndexes(f).Bytes()))
   157  	// Output:
   158  	// func (*User) Indexes() builder.Indexes {
   159  	// return builder.Indexes{
   160  	// "i_geom/SPATIAL": []string{
   161  	// "(#Geom)",
   162  	// },
   163  	// "i_nickname/BTREE": []string{
   164  	// "Name",
   165  	// },
   166  	// "i_username": []string{
   167  	// "Username",
   168  	// },
   169  	// }
   170  	// }
   171  }
   172  
   173  func ExampleModel_SnippetIndexFieldNames() {
   174  	fmt.Println(string(m.SnippetIndexFieldNames(f).Bytes()))
   175  	// Output:
   176  	// func (m *User) IndexFieldNames() []string {
   177  	// return []string{
   178  	// "ID",
   179  	// "Name",
   180  	// "OrgID",
   181  	// "Username",
   182  	// }
   183  	// }
   184  }
   185  
   186  func ExampleModel_SnippetUniqueIndexes() {
   187  	ss := m.SnippetUniqueIndexes(f)
   188  	for _, s := range ss {
   189  		fmt.Println(string(s.Bytes()))
   190  	}
   191  	// Output:
   192  	// func (*User) UniqueIndexes() builder.Indexes {
   193  	// return builder.Indexes{
   194  	// "ui_id_org": []string{
   195  	// "ID",
   196  	// "OrgID",
   197  	// "DeletedAt",
   198  	// },
   199  	// "ui_name": []string{
   200  	// "Name",
   201  	// "DeletedAt",
   202  	// },
   203  	// }
   204  	// }
   205  	// func (*User) UniqueIndexUIIDOrg() string {
   206  	// return "ui_id_org"
   207  	// }
   208  	// func (*User) UniqueIndexUIName() string {
   209  	// return "ui_name"
   210  	// }
   211  }
   212  
   213  func ExampleModel_SnippetFieldMethods() {
   214  	ss := m.SnippetFieldMethods(f)
   215  	for _, s := range ss {
   216  		fmt.Print(string(s.Bytes()))
   217  	}
   218  	// Output:
   219  	// func (m *User) ColID() *builder.Column {
   220  	// return UserTable.ColByFieldName(m.FieldID())
   221  	// }func (*User) FieldID() string {
   222  	// return "ID"
   223  	// }func (m *User) ColName() *builder.Column {
   224  	// return UserTable.ColByFieldName(m.FieldName())
   225  	// }func (*User) FieldName() string {
   226  	// return "Name"
   227  	// }func (m *User) ColNickname() *builder.Column {
   228  	// return UserTable.ColByFieldName(m.FieldNickname())
   229  	// }func (*User) FieldNickname() string {
   230  	// return "Nickname"
   231  	// }func (m *User) ColUsername() *builder.Column {
   232  	// return UserTable.ColByFieldName(m.FieldUsername())
   233  	// }func (*User) FieldUsername() string {
   234  	// return "Username"
   235  	// }func (m *User) ColGender() *builder.Column {
   236  	// return UserTable.ColByFieldName(m.FieldGender())
   237  	// }func (*User) FieldGender() string {
   238  	// return "Gender"
   239  	// }func (m *User) ColBoolean() *builder.Column {
   240  	// return UserTable.ColByFieldName(m.FieldBoolean())
   241  	// }func (*User) FieldBoolean() string {
   242  	// return "Boolean"
   243  	// }func (m *User) ColGeom() *builder.Column {
   244  	// return UserTable.ColByFieldName(m.FieldGeom())
   245  	// }func (*User) FieldGeom() string {
   246  	// return "Geom"
   247  	// }func (m *User) ColOrgID() *builder.Column {
   248  	// return UserTable.ColByFieldName(m.FieldOrgID())
   249  	// }func (*User) FieldOrgID() string {
   250  	// return "OrgID"
   251  	// }func (m *User) ColCreatedAt() *builder.Column {
   252  	// return UserTable.ColByFieldName(m.FieldCreatedAt())
   253  	// }func (*User) FieldCreatedAt() string {
   254  	// return "CreatedAt"
   255  	// }func (m *User) ColUpdatedAt() *builder.Column {
   256  	// return UserTable.ColByFieldName(m.FieldUpdatedAt())
   257  	// }func (*User) FieldUpdatedAt() string {
   258  	// return "UpdatedAt"
   259  	// }func (m *User) ColDeletedAt() *builder.Column {
   260  	// return UserTable.ColByFieldName(m.FieldDeletedAt())
   261  	// }func (*User) FieldDeletedAt() string {
   262  	// return "DeletedAt"
   263  	// }
   264  }
   265  
   266  func ExampleModel_SnippetCondByValue() {
   267  	fmt.Println(string(m.SnippetCondByValue(f).Bytes()))
   268  	// Output:
   269  	// func (m *User) CondByValue(db sqlx.DBExecutor) builder.SqlCondition {
   270  	// var (
   271  	// tbl = db.T(m)
   272  	// fvs = builder.FieldValueFromStructByNoneZero(m)
   273  	// cond = []builder.SqlCondition{tbl.ColByFieldName("DeletedAt").Eq(0)}
   274  	// )
   275  	//
   276  	// for _, fn := range m.IndexFieldNames() {
   277  	// if v, ok := fvs[fn]; ok {
   278  	// cond = append(cond, tbl.ColByFieldName(fn).Eq(v))
   279  	// delete(fvs, fn)
   280  	// }
   281  	// }
   282  	// if len(cond) == 0 {
   283  	// panic(fmt.Errorf("no field for indexes has value"))
   284  	// }
   285  	// for fn, v := range fvs {
   286  	// cond = append(cond, tbl.ColByFieldName(fn).Eq(v))
   287  	// }
   288  	// return builder.And(cond...)
   289  	// }
   290  }
   291  
   292  func ExampleModel_SnippetCreate() {
   293  	fmt.Println(string(m.SnippetCreate(f).Bytes()))
   294  	// Output:
   295  	// func (m *User) Create(db sqlx.DBExecutor) error {
   296  	//
   297  	// if m.CreatedAt.IsZero() {
   298  	// m.CreatedAt.Set(time.Now())
   299  	// }
   300  	//
   301  	// if m.UpdatedAt.IsZero() {
   302  	// m.UpdatedAt.Set(time.Now())
   303  	// }
   304  	//
   305  	// _, err := db.Exec(sqlx.InsertToDB(db, m, nil))
   306  	// return err
   307  	// }
   308  }
   309  
   310  func ExampleModel_SnippetList() {
   311  	fmt.Println(string(m.SnippetList(f).Bytes()))
   312  	// Output:
   313  	// func (m *User) List(db sqlx.DBExecutor, cond builder.SqlCondition, adds ...builder.Addition) ([]User, error) {
   314  	// var (
   315  	// tbl = db.T(m)
   316  	// lst = make([]User, 0)
   317  	// )
   318  	// cond = builder.And(tbl.ColByFieldName("DeletedAt").Eq(0), cond)
   319  	// adds = append([]builder.Addition{builder.Where(cond), builder.Comment("User.List")}, adds...)
   320  	// err := db.QueryAndScan(builder.Select(nil).From(tbl, adds...), &lst)
   321  	// return lst, err
   322  	// }
   323  }
   324  
   325  func ExampleModel_SnippetCount() {
   326  	fmt.Print(string(m.SnippetCount(f).Bytes()))
   327  	// Output:
   328  	// func (m *User) Count(db sqlx.DBExecutor, cond builder.SqlCondition, adds ...builder.Addition) (cnt int64, err error) {
   329  	// tbl := db.T(m)
   330  	// cond = builder.And(tbl.ColByFieldName("DeletedAt").Eq(0), cond)
   331  	// adds = append([]builder.Addition{builder.Where(cond), builder.Comment("User.List")}, adds...)
   332  	// err = db.QueryAndScan(builder.Select(builder.Count()).From(tbl, adds...), &cnt)
   333  	// return
   334  	// }
   335  }
   336  
   337  func ExampleModel_SnippetCRUDByUniqueKeys() {
   338  	ss := m.SnippetCRUDByUniqueKeys(f, "primary", "ui_name")
   339  	for _, s := range ss {
   340  		fmt.Print(string(s.Bytes()))
   341  	}
   342  	// Output:
   343  	// func (m *User) FetchByID(db sqlx.DBExecutor) error {
   344  	// tbl := db.T(m)
   345  	// err := db.QueryAndScan(
   346  	// builder.Select(nil).
   347  	// From(
   348  	// tbl,
   349  	// builder.Where(
   350  	// builder.And(
   351  	// tbl.ColByFieldName("ID").Eq(m.ID),
   352  	// tbl.ColByFieldName("DeletedAt").Eq(m.DeletedAt),
   353  	// ),
   354  	// ),
   355  	// builder.Comment("User.FetchByID"),
   356  	// ),
   357  	// m,
   358  	// )
   359  	// return err
   360  	// }func (m *User) FetchByName(db sqlx.DBExecutor) error {
   361  	// tbl := db.T(m)
   362  	// err := db.QueryAndScan(
   363  	// builder.Select(nil).
   364  	// From(
   365  	// tbl,
   366  	// builder.Where(
   367  	// builder.And(
   368  	// tbl.ColByFieldName("Name").Eq(m.Name),
   369  	// tbl.ColByFieldName("DeletedAt").Eq(m.DeletedAt),
   370  	// ),
   371  	// ),
   372  	// builder.Comment("User.FetchByName"),
   373  	// ),
   374  	// m,
   375  	// )
   376  	// return err
   377  	// }func (m *User) UpdateByIDWithFVs(db sqlx.DBExecutor, fvs builder.FieldValues) error {
   378  	//
   379  	// if _, ok := fvs["UpdatedAt"]; !ok {
   380  	// fvs["UpdatedAt"] = types.Timestamp{Time: time.Now()}
   381  	// }
   382  	// tbl := db.T(m)
   383  	// res, err := db.Exec(
   384  	// builder.Update(tbl).
   385  	// Where(
   386  	// builder.And(
   387  	// tbl.ColByFieldName("ID").Eq(m.ID),
   388  	// tbl.ColByFieldName("DeletedAt").Eq(m.DeletedAt),
   389  	// ),
   390  	// builder.Comment("User.UpdateByIDWithFVs"),
   391  	// ).
   392  	// Set(tbl.AssignmentsByFieldValues(fvs)...),
   393  	// )
   394  	// if err != nil {
   395  	// return err
   396  	// }
   397  	// if affected, _ := res.RowsAffected(); affected == 0 {
   398  	// return m.FetchByID(db)
   399  	// }
   400  	// return nil
   401  	// }func (m *User) UpdateByID(db sqlx.DBExecutor, zeros ...string) error {
   402  	// fvs := builder.FieldValueFromStructByNoneZero(m, zeros...)
   403  	// return m.UpdateByIDWithFVs(db, fvs)
   404  	// }func (m *User) UpdateByNameWithFVs(db sqlx.DBExecutor, fvs builder.FieldValues) error {
   405  	//
   406  	// if _, ok := fvs["UpdatedAt"]; !ok {
   407  	// fvs["UpdatedAt"] = types.Timestamp{Time: time.Now()}
   408  	// }
   409  	// tbl := db.T(m)
   410  	// res, err := db.Exec(
   411  	// builder.Update(tbl).
   412  	// Where(
   413  	// builder.And(
   414  	// tbl.ColByFieldName("Name").Eq(m.Name),
   415  	// tbl.ColByFieldName("DeletedAt").Eq(m.DeletedAt),
   416  	// ),
   417  	// builder.Comment("User.UpdateByNameWithFVs"),
   418  	// ).
   419  	// Set(tbl.AssignmentsByFieldValues(fvs)...),
   420  	// )
   421  	// if err != nil {
   422  	// return err
   423  	// }
   424  	// if affected, _ := res.RowsAffected(); affected == 0 {
   425  	// return m.FetchByName(db)
   426  	// }
   427  	// return nil
   428  	// }func (m *User) UpdateByName(db sqlx.DBExecutor, zeros ...string) error {
   429  	// fvs := builder.FieldValueFromStructByNoneZero(m, zeros...)
   430  	// return m.UpdateByNameWithFVs(db, fvs)
   431  	// }func (m *User) Delete(db sqlx.DBExecutor) error {
   432  	// _, err := db.Exec(
   433  	// builder.Delete().
   434  	// From(
   435  	// db.T(m),
   436  	// builder.Where(m.CondByValue(db)),
   437  	// builder.Comment("User.Delete"),
   438  	// ),
   439  	// )
   440  	// return err
   441  	// }func (m *User) DeleteByID(db sqlx.DBExecutor) error {
   442  	// tbl := db.T(m)
   443  	// _, err := db.Exec(
   444  	// builder.Delete().
   445  	// From(
   446  	// tbl,
   447  	// builder.Where(
   448  	// builder.And(
   449  	// tbl.ColByFieldName("ID").Eq(m.ID),
   450  	// tbl.ColByFieldName("DeletedAt").Eq(m.DeletedAt),
   451  	// ),
   452  	// ),
   453  	// builder.Comment("User.DeleteByID"),
   454  	// ),
   455  	// )
   456  	// return err
   457  	// }func (m *User) SoftDeleteByID(db sqlx.DBExecutor) error {
   458  	// tbl := db.T(m)
   459  	// fvs := builder.FieldValues{}
   460  	//
   461  	// if _, ok := fvs["DeletedAt"]; !ok {
   462  	// fvs["DeletedAt"] = types.Timestamp{Time: time.Now()}
   463  	// }
   464  	//
   465  	// if _, ok := fvs["UpdatedAt"]; !ok {
   466  	// fvs["UpdatedAt"] = types.Timestamp{Time: time.Now()}
   467  	// }
   468  	// _, err := db.Exec(
   469  	// builder.Update(db.T(m)).
   470  	// Where(
   471  	// builder.And(
   472  	// tbl.ColByFieldName("ID").Eq(m.ID),
   473  	// tbl.ColByFieldName("DeletedAt").Eq(m.DeletedAt),
   474  	// ),
   475  	// builder.Comment("User.SoftDeleteByID"),
   476  	// ).
   477  	// Set(tbl.AssignmentsByFieldValues(fvs)...),
   478  	// )
   479  	// return err
   480  	// }func (m *User) DeleteByName(db sqlx.DBExecutor) error {
   481  	// tbl := db.T(m)
   482  	// _, err := db.Exec(
   483  	// builder.Delete().
   484  	// From(
   485  	// tbl,
   486  	// builder.Where(
   487  	// builder.And(
   488  	// tbl.ColByFieldName("Name").Eq(m.Name),
   489  	// tbl.ColByFieldName("DeletedAt").Eq(m.DeletedAt),
   490  	// ),
   491  	// ),
   492  	// builder.Comment("User.DeleteByName"),
   493  	// ),
   494  	// )
   495  	// return err
   496  	// }func (m *User) SoftDeleteByName(db sqlx.DBExecutor) error {
   497  	// tbl := db.T(m)
   498  	// fvs := builder.FieldValues{}
   499  	//
   500  	// if _, ok := fvs["DeletedAt"]; !ok {
   501  	// fvs["DeletedAt"] = types.Timestamp{Time: time.Now()}
   502  	// }
   503  	//
   504  	// if _, ok := fvs["UpdatedAt"]; !ok {
   505  	// fvs["UpdatedAt"] = types.Timestamp{Time: time.Now()}
   506  	// }
   507  	// _, err := db.Exec(
   508  	// builder.Update(db.T(m)).
   509  	// Where(
   510  	// builder.And(
   511  	// tbl.ColByFieldName("Name").Eq(m.Name),
   512  	// tbl.ColByFieldName("DeletedAt").Eq(m.DeletedAt),
   513  	// ),
   514  	// builder.Comment("User.SoftDeleteByName"),
   515  	// ).
   516  	// Set(tbl.AssignmentsByFieldValues(fvs)...),
   517  	// )
   518  	// return err
   519  	// }
   520  }