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 }