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" "github.com/google/uuid" "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 *uuid.UUID `filterfield:"field=id,operator=EQ"` Ids *[]uuid.UUID `filterfield:"field=id,operator=IN"` IdsNot *[]string `filterfield:"field=id,operator=NOT_IN"` CreatedAt_Lt *time.Time `filterfield:"field=created_at,operator=LT"` Timestamps *[]time.Time `filterfield:"field=created_at,operator=IN"` } 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) id1, _ := uuid.Parse("eb2bcac6-5173-4dbb-93b7-e7c03b924a03") id2, _ := uuid.Parse("db9fb837-3483-4736-819d-f427dc8cda23") id3, _ := uuid.Parse("1fece5e7-8e8d-4828-8298-3b1f07fd29ff") ids := []uuid.UUID{id1, id2, id3} 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, nil) filter := CertFilter{ Alive: &TRUE, } certs, err := repo.List(filter, 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 doCount(db *gorm.DB) { repo := repository.RepoBase[models.Cert]{} repo.Init(db, nil) filter := CertFilter{ Alive: &TRUE, } count, err := repo.Count(filter) if err != nil { panic(err) } fmt.Printf(">>> count: %d\n", count) } func doGet(db *gorm.DB) { repo := repository.RepoBase[models.Cert]{} repo.Init(db, nil) id, _ := uuid.Parse("db9fb837-3483-4736-819d-f427dc8cda23") filter := CertFilter{ Id: &id, } cert, err := repo.Get(filter, nil) 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, nil) id, _ := uuid.Parse("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) doCount(db) // doGet(db) // doExists(db) // inheritance.DoInheritanceTest() }