package main import ( "fmt" "repo-pattern/app/lib/cfg" "repo-pattern/app/lib/db" "repo-pattern/app/lib/logging" "repo-pattern/app/models" "repo-pattern/app/repository" "repo-pattern/app/repository/smartfilter" "time" "gorm.io/gorm" ) var ( TRUE = true FALSE = false ) type CertFilter struct { Alive *bool `filterfield:"field=alive,operator=EQ"` SerialNumber *string `filterfield:"field=serial_number,operator=NE"` SerialNumberContains *string `filterfield:"field=serial_number,operator=LIKE"` IssuerContains *string `filterfield:"field=issuer,operator=ILIKE"` Id *string `filterfield:"field=id,operator=EQ"` Ids *[]string `filterfield:"field=id,operator=IN"` IdsNot *[]string `filterfield:"field=id,operator=NOT_IN"` CreatedAt_Lt *time.Time `filterfield:"field=created_at,operator=LT"` } func doMagic(db *gorm.DB) { var err error query := db // id := "6dc096ab-5c03-427e-b808-c669f7446131" // serialNumber := "222" // serialNumberContains := "323" // issuer := "FINA" // location, _ := time.LoadLocation("UTC") // createdTime := time.Date(2024, 5, 26, 16, 8, 0, 0, location) ids := []string{"eb2bcac6-5173-4dbb-93b7-e7c03b924a03", "db9fb837-3483-4736-819d-f427dc8cda23", "1fece5e7-8e8d-4828-8298-3b1f07fd29ff"} filter := CertFilter{ // Alive: &FALSE, // Id: &id, // SerialNumber: &serialNumber, // SerialNumberContains: &serialNumberContains, Ids: &ids, // IssuerContains: &issuer, // CreatedAt_Lt: &createdTime, } query, err = smartfilter.ToQuery(models.Cert{}, filter, query) if err != nil { panic(err) } var certs []models.Cert query.Order("created_at").Find(&certs) for n, cert := range certs { fmt.Printf(">> [%d] %+v %s\n", n, cert.Id, cert.CreatedAt) } } func doList(db *gorm.DB) { repo := repository.RepoBase[models.Cert]{} repo.Init(db) filter := CertFilter{ Alive: &TRUE, } certs, err := repo.List(filter, nil, nil) if err != nil { panic(err) } for n, cert := range *certs { fmt.Printf(">> [%d] %+v %s (alive %t)\n", n, cert.Id, cert.CreatedAt, cert.Alive) } } func doGet(db *gorm.DB) { repo := repository.RepoBase[models.Cert]{} repo.Init(db) id := "db9fb837-3483-4736-819d-f427dc8cda23" filter := CertFilter{ Id: &id, } cert, err := repo.Get(filter) if err != nil { panic(err) } fmt.Printf(">> %+v %s (alive %t)\n", cert.Id, cert.CreatedAt, cert.Alive) } func doExists(db *gorm.DB) { repo := repository.RepoBase[models.Cert]{} repo.Init(db) id := "db9fb837-3483-4736-819d-f427dc8cda23" filter := CertFilter{ Id: &id, } exists, err := repo.Exists(filter) if err != nil { panic(err) } fmt.Printf(">> EXISTS: %t\n", exists) } func main() { cfg.Init() logging.Init() defer logging.Log.Sync() db := db.InitDB() doMagic(db) // doList(db) // doGet(db) // doExists(db) // inheritance.DoInheritanceTest() }