Merge pull request #5 from Selly-Modules/response-total-in-query-all
update query - response total to pagination
This commit is contained in:
		
						commit
						39e37bde08
					
				| 
						 | 
				
			
			@ -2,6 +2,7 @@ package audit
 | 
			
		|||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"go.mongodb.org/mongo-driver/bson"
 | 
			
		||||
	"go.mongodb.org/mongo-driver/mongo/options"
 | 
			
		||||
| 
						 | 
				
			
			@ -17,27 +18,39 @@ type AllQuery struct {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// All ...
 | 
			
		||||
func (s Service) All(query AllQuery) []Audit {
 | 
			
		||||
func (s Service) All(query AllQuery) (result []Audit, total int64) {
 | 
			
		||||
	var (
 | 
			
		||||
		ctx     = context.Background()
 | 
			
		||||
		colName = getColName(query.Target)
 | 
			
		||||
		skip    = query.Page * query.Limit
 | 
			
		||||
		result  = make([]Audit, 0)
 | 
			
		||||
		wg      sync.WaitGroup
 | 
			
		||||
	)
 | 
			
		||||
	cond := bson.D{
 | 
			
		||||
		{"target", query.Target},
 | 
			
		||||
		{"targetId", query.TargetID},
 | 
			
		||||
	}
 | 
			
		||||
	wg.Add(1)
 | 
			
		||||
	go func() {
 | 
			
		||||
		defer wg.Done()
 | 
			
		||||
		opts := options.Find().SetLimit(query.Limit).SetSkip(skip).SetSort(bson.M{"_id": -1})
 | 
			
		||||
		if query.Sort != nil {
 | 
			
		||||
			opts.SetSort(query.Sort)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Find db
 | 
			
		||||
	cursor, err := s.DB.Collection(colName).Find(ctx, bson.D{
 | 
			
		||||
		{"target", query.Target},
 | 
			
		||||
		{"targetId", query.TargetID},
 | 
			
		||||
	}, opts)
 | 
			
		||||
		cursor, err := s.DB.Collection(colName).Find(ctx, cond, opts)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
		return result
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		defer cursor.Close(ctx)
 | 
			
		||||
		cursor.All(ctx, &result)
 | 
			
		||||
	return result
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	wg.Add(1)
 | 
			
		||||
	go func() {
 | 
			
		||||
		defer wg.Done()
 | 
			
		||||
		total, _ = s.DB.Collection(colName).CountDocuments(ctx, cond)
 | 
			
		||||
	}()
 | 
			
		||||
	wg.Wait()
 | 
			
		||||
	return result, total
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue