@@ -21,6 +21,7 @@ import (
2121 "github.com/rokwire/logging-library-go/v2/errors"
2222 "github.com/rokwire/logging-library-go/v2/logutils"
2323 "go.mongodb.org/mongo-driver/bson"
24+ "go.mongodb.org/mongo-driver/bson/primitive"
2425 "go.mongodb.org/mongo-driver/mongo/options"
2526)
2627
@@ -36,19 +37,37 @@ func (a *Adapter) GetSurvey(id string, orgID string, appID string) (*model.Surve
3637}
3738
3839// GetSurveys gets matching surveys
39- func (a * Adapter ) GetSurveys (orgID string , appID string , creatorID * string , surveyIDs []string , surveyTypes []string , calendarEventID string , limit * int , offset * int ) ([]model.Survey , error ) {
40- filter := bson.M {"org_id" : orgID , "app_id" : appID }
40+ func (a * Adapter ) GetSurveys (orgID string , appID string , creatorID * string , surveyIDs []string , surveyTypes []string , calendarEventID string , limit * int , offset * int , timeFilter * model.SurveyTimeFilter ) ([]model.Survey , error ) {
41+ filter := bson.D {
42+ {Key : "org_id" , Value : orgID },
43+ {Key : "app_id" , Value : appID },
44+ }
45+
4146 if creatorID != nil {
42- filter [ "creator_id" ] = * creatorID
47+ filter = append ( filter , bson. E { Key : "creator_id" , Value : * creatorID })
4348 }
4449 if len (surveyIDs ) > 0 {
45- filter [ "_id" ] = bson.M {"$in" : surveyIDs }
50+ filter = append ( filter , bson. E { Key : "_id" , Value : bson.M {"$in" : surveyIDs }})
4651 }
4752 if len (surveyTypes ) > 0 {
48- filter ["type" ] = bson.M {"$in" : surveyTypes }
53+ filter = append (filter , bson.E {Key : "type" , Value : bson.M {"$in" : surveyTypes }})
54+ }
55+ if calendarEventID != "" {
56+ filter = append (filter , bson.E {Key : "calendar_event_id" , Value : calendarEventID })
57+ }
58+
59+ if timeFilter .StartTimeAfter != nil {
60+ filter = append (filter , primitive.E {Key : "start_date" , Value : primitive.M {"$gte" : * timeFilter .StartTimeAfter }})
61+ }
62+ if timeFilter .StartTimeBefore != nil {
63+ filter = append (filter , primitive.E {Key : "start_date" , Value : primitive.M {"$lte" : * timeFilter .StartTimeBefore }})
64+ }
65+
66+ if timeFilter .EndTimeAfter != nil {
67+ filter = append (filter , primitive.E {Key : "end_date" , Value : primitive.M {"$gte" : * timeFilter .EndTimeAfter }})
4968 }
50- if len ( calendarEventID ) > 0 {
51- filter [ "calendar_event_id" ] = calendarEventID
69+ if timeFilter . EndTimeBefore != nil {
70+ filter = append ( filter , primitive. E { Key : "end_date" , Value : primitive. M { "$lte" : * timeFilter . EndTimeBefore }})
5271 }
5372
5473 opts := options .Find ()
@@ -58,10 +77,23 @@ func (a *Adapter) GetSurveys(orgID string, appID string, creatorID *string, surv
5877 if offset != nil {
5978 opts .SetSkip (int64 (* offset ))
6079 }
80+ if timeFilter .StartTimeBefore != nil {
81+ opts .SetSort (bson.D {{Key : "start_date" , Value : - 1 }})
82+ } else if timeFilter .StartTimeAfter != nil {
83+ opts .SetSort (bson.D {{Key : "start_date" , Value : 1 }})
84+ }
85+
86+ if timeFilter .EndTimeBefore != nil {
87+ opts .SetSort (bson.D {{Key : "end_date" , Value : - 1 }})
88+ } else if timeFilter .EndTimeAfter != nil {
89+ opts .SetSort (bson.D {{Key : "end_date" , Value : 1 }})
90+
91+ }
92+
6193 var results []model.Survey
6294 err := a .db .surveys .Find (a .context , filter , & results , opts )
6395 if err != nil {
64- return nil , errors . WrapErrorAction ( logutils . ActionFind , model . TypeSurvey , filterArgs ( filter ), err )
96+ return nil , err
6597 }
6698 return results , nil
6799}
@@ -97,6 +129,8 @@ func (a *Adapter) UpdateSurvey(survey model.Survey, admin bool) error {
97129 "constants" : survey .Constants ,
98130 "strings" : survey .Strings ,
99131 "sub_rules" : survey .SubRules ,
132+ "start_date" : survey .StartDate ,
133+ "end_date" : survey .EndDate ,
100134 "date_updated" : now ,
101135 }}
102136
0 commit comments