func()

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
}