add filter logic when getting tasks
continuous-integration/drone/pr Build is failing
Details
continuous-integration/drone/pr Build is failing
Details
Signed-off-by: kolaente <k@knt.li>
This commit is contained in:
parent
8a7a560604
commit
015442b81e
|
@ -27,6 +27,7 @@ const (
|
|||
taskFilterComparatorGreateEquals taskFilterComparator = ">="
|
||||
taskFilterComparatorLess taskFilterComparator = "<"
|
||||
taskFilterComparatorLessEquals taskFilterComparator = "<="
|
||||
taskFilterComparatorNotEquals taskFilterComparator = "!="
|
||||
)
|
||||
|
||||
type taskFilter struct {
|
||||
|
@ -47,7 +48,8 @@ func (tf *taskFilter) validate() (err error) {
|
|||
taskFilterComparatorGreater,
|
||||
taskFilterComparatorGreateEquals,
|
||||
taskFilterComparatorLess,
|
||||
taskFilterComparatorLessEquals:
|
||||
taskFilterComparatorLessEquals,
|
||||
taskFilterComparatorNotEquals:
|
||||
return nil
|
||||
default:
|
||||
return ErrInvalidTaskFilterComparator{Comparator: tf.comparator}
|
||||
|
@ -66,6 +68,8 @@ func getFilterComparatorFromString(comparator string) (taskFilterComparator, err
|
|||
return taskFilterComparatorLess, nil
|
||||
case "less_equals":
|
||||
return taskFilterComparatorLessEquals, nil
|
||||
case "not_equals":
|
||||
return taskFilterComparatorNotEquals, nil
|
||||
default:
|
||||
return taskFilterComparatorInvalid, ErrInvalidTaskFilterComparator{Comparator: taskFilterComparator(comparator)}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import (
|
|||
"sort"
|
||||
"strconv"
|
||||
"time"
|
||||
"xorm.io/builder"
|
||||
)
|
||||
|
||||
// Task represents an task in a todolist
|
||||
|
@ -164,27 +165,32 @@ func getRawTasksForLists(lists []*List, opts *taskOptions) (taskMap map[int64]*T
|
|||
}
|
||||
}
|
||||
|
||||
var filters = make([]builder.Cond, 0, len(opts.filters))
|
||||
for _, f := range opts.filters {
|
||||
switch f.comparator {
|
||||
case taskFilterComparatorEquals:
|
||||
filters = append(filters, &builder.Eq{f.field: f.value})
|
||||
case taskFilterComparatorNotEquals:
|
||||
filters = append(filters, &builder.Neq{f.field: f.value})
|
||||
case taskFilterComparatorGreater:
|
||||
filters = append(filters, &builder.Gt{f.field: f.value})
|
||||
case taskFilterComparatorGreateEquals:
|
||||
filters = append(filters, &builder.Gte{f.field: f.value})
|
||||
case taskFilterComparatorLess:
|
||||
filters = append(filters, &builder.Lt{f.field: f.value})
|
||||
case taskFilterComparatorLessEquals:
|
||||
filters = append(filters, &builder.Lte{f.field: f.value})
|
||||
}
|
||||
}
|
||||
|
||||
taskMap = make(map[int64]*Task)
|
||||
|
||||
// Then return all tasks for that lists
|
||||
if opts.startDate.Unix() != 0 || opts.endDate.Unix() != 0 {
|
||||
|
||||
startDateUnix := time.Now().Unix()
|
||||
if opts.startDate.Unix() != 0 {
|
||||
startDateUnix = opts.startDate.Unix()
|
||||
}
|
||||
|
||||
endDateUnix := time.Now().Unix()
|
||||
if opts.endDate.Unix() != 0 {
|
||||
endDateUnix = opts.endDate.Unix()
|
||||
}
|
||||
if len(filters) > 0 {
|
||||
|
||||
err := x.In("list_id", listIDs).
|
||||
Where("text LIKE ?", "%"+opts.search+"%").
|
||||
// TODO: Remove this in favour of filters
|
||||
And("((due_date_unix BETWEEN ? AND ?) OR "+
|
||||
"(start_date_unix BETWEEN ? and ?) OR "+
|
||||
"(end_date_unix BETWEEN ? and ?))", startDateUnix, endDateUnix, startDateUnix, endDateUnix, startDateUnix, endDateUnix).
|
||||
And(filters).
|
||||
OrderBy(orderby).
|
||||
Limit(getLimitFromPageIndex(opts.page, opts.perPage)).
|
||||
Find(&taskMap)
|
||||
|
@ -194,9 +200,7 @@ func getRawTasksForLists(lists []*List, opts *taskOptions) (taskMap map[int64]*T
|
|||
|
||||
totalItems, err = x.In("list_id", listIDs).
|
||||
Where("text LIKE ?", "%"+opts.search+"%").
|
||||
And("((due_date_unix BETWEEN ? AND ?) OR "+
|
||||
"(start_date_unix BETWEEN ? and ?) OR "+
|
||||
"(end_date_unix BETWEEN ? and ?))", startDateUnix, endDateUnix, startDateUnix, endDateUnix, startDateUnix, endDateUnix).
|
||||
And(filters).
|
||||
Count(&Task{})
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
|
|
Loading…
Reference in New Issue