package operations import "gorm.io/gorm" type Conditions struct { queries []string queryArgs [][]any } func NewConditions() *Conditions { return &Conditions{ queries: make([]string, 0), queryArgs: make([][]any, 0), } } func (clause *Conditions) Equal(columnName string, value any) *Conditions { clause.queries = append(clause.queries, columnName+" = ?") clause.queryArgs = append(clause.queryArgs, []any{value}) return clause } func (clause *Conditions) Like(columnName string, value any) *Conditions { clause.queries = append(clause.queries, columnName+" LIKE ?") clause.queryArgs = append(clause.queryArgs, []any{value}) return clause } func (clause *Conditions) In(columnName string, value any) *Conditions { clause.queries = append(clause.queries, columnName+" IN ?") clause.queryArgs = append(clause.queryArgs, []any{value}) return clause } func (clause *Conditions) NotIn(columnName string, value any) *Conditions { clause.queries = append(clause.queries, columnName+" NOT IN ?") clause.queryArgs = append(clause.queryArgs, []any{value}) return clause } func (clause *Conditions) Not(columnName string, value any) *Conditions { clause.queries = append(clause.queries, columnName+" != ?") clause.queryArgs = append(clause.queryArgs, []any{value}) return clause } func (clause *Conditions) LessThan(columnName string, value any) *Conditions { clause.queries = append(clause.queries, columnName+" < ?") clause.queryArgs = append(clause.queryArgs, []any{value}) return clause } func (clause *Conditions) LessThanAndEqual(columnName string, value any) *Conditions { clause.queries = append(clause.queries, columnName+" <= ?") clause.queryArgs = append(clause.queryArgs, []any{value}) return clause } func (clause *Conditions) GreaterThan(columnName string, value any) *Conditions { clause.queries = append(clause.queries, columnName+" > ?") clause.queryArgs = append(clause.queryArgs, []any{value}) return clause } func (clause *Conditions) GreaterThanAndEqual(columnName string, value any) *Conditions { clause.queries = append(clause.queries, columnName+" >= ?") clause.queryArgs = append(clause.queryArgs, []any{value}) return clause } func (clause *Conditions) where(db *gorm.DB) *gorm.DB { for i, query := range clause.queries { db = db.Where(query, clause.queryArgs[i]...) } return db } func (clause *Conditions) or(db *gorm.DB) *gorm.DB { for i, query := range clause.queries { db = db.Or(query, clause.queryArgs[i]...) } return db } func (clause *Conditions) having(db *gorm.DB) *gorm.DB { for i, query := range clause.queries { db = db.Having(query, clause.queryArgs[i]...) } return db }