in eventbase/datasource/mongo/task/task_dao.go [83:122]
func (d *Dao) List(ctx context.Context, options ...datasource.TaskFindOption) ([]*sync.Task, error) {
opts := datasource.NewTaskFindOptions()
for _, o := range options {
o(&opts)
}
collection := dmongo.GetClient().GetDB().Collection(model.CollectionTask)
filter := bson.M{}
if opts.Domain != "" {
filter[model.ColumnDomain] = opts.Domain
}
if opts.Project != "" {
filter[model.ColumnProject] = opts.Project
}
if opts.Action != "" {
filter[model.ColumnAction] = opts.Action
}
if opts.ResourceType != "" {
filter[model.ColumnResourceType] = opts.ResourceType
}
if opts.Status != "" {
filter[model.ColumnStatus] = opts.Status
}
opt := mopts.Find().SetSort(map[string]interface{}{
model.ColumnTimestamp: 1,
})
cur, err := collection.Find(ctx, filter, opt)
if err != nil {
return nil, err
}
defer cur.Close(ctx)
tasks := make([]*sync.Task, 0)
for cur.Next(ctx) {
task := &sync.Task{}
if err := cur.Decode(task); err != nil {
return nil, err
}
tasks = append(tasks, task)
}
return tasks, nil
}