feat: get multiple users by id (#6210)

* feat: introduce InTextQuery, and the ability to get multiple users by id

* added in query tests

* remove append call

* fix lints
This commit is contained in:
Ahmed Fwela
2023-08-12 16:37:42 +03:00
committed by GitHub
parent faf547f090
commit 133789fee9
5 changed files with 163 additions and 1 deletions

View File

@@ -156,6 +156,10 @@ const (
columnCompareMax
)
type InTextQuery struct {
Column Column
Values []string
}
type TextQuery struct {
Column Column
Text string
@@ -167,8 +171,22 @@ var (
ErrInvalidCompare = errors.New("invalid compare")
ErrMissingColumn = errors.New("missing column")
ErrInvalidNumber = errors.New("value is no number")
ErrEmptyValues = errors.New("values array must not be empty")
)
func NewInTextQuery(col Column, values []string) (*InTextQuery, error) {
if len(values) == 0 {
return nil, ErrEmptyValues
}
if col.isZero() {
return nil, ErrMissingColumn
}
return &InTextQuery{
Column: col,
Values: values,
}, nil
}
func NewTextQuery(col Column, value string, compare TextComparison) (*TextQuery, error) {
if compare < 0 || compare >= textCompareMax {
return nil, ErrInvalidCompare
@@ -183,6 +201,15 @@ func NewTextQuery(col Column, value string, compare TextComparison) (*TextQuery,
}, nil
}
func (q *InTextQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
return query.Where(q.comp())
}
func (s *InTextQuery) comp() sq.Sqlizer {
// This translates to an IN query
return sq.Eq{s.Column.identifier(): s.Values}
}
func (q *TextQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
return query.Where(q.comp())
}
@@ -269,7 +296,7 @@ func NewNumberQuery(c Column, value interface{}, compare NumberComparison) (*Num
}
switch reflect.TypeOf(value).Kind() {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64:
//everything fine
// everything fine
default:
return nil, ErrInvalidNumber
}