Browse Source

Allow reference for time-based activity endpoints

Maarten van den Berg 6 years ago
parent
commit
589cf27399
2 changed files with 25 additions and 6 deletions
  1. 19 3
      app/controllers/api/groups_controller.rb
  2. 6 3
      app/models/group.rb

+ 19 - 3
app/controllers/api/groups_controller.rb

26
 
26
 
27
   # GET /api/groups/1/current_activities
27
   # GET /api/groups/1/current_activities
28
   def current_activities
28
   def current_activities
29
-    @activities = @group.current_activities
29
+    reference = try_parse_datetime params[:reference]
30
+    @activities = @group.current_activities reference
31
+
30
     render 'api/activities/index'
32
     render 'api/activities/index'
31
   end
33
   end
32
 
34
 
33
   # GET /api/groups/1/upcoming_activities
35
   # GET /api/groups/1/upcoming_activities
34
   def upcoming_activities
36
   def upcoming_activities
35
-    @activities = @group.upcoming_activities
37
+    reference = try_parse_datetime params[:reference]
38
+    @activities = @group.upcoming_activities reference
39
+
36
     render 'api/activities/index'
40
     render 'api/activities/index'
37
   end
41
   end
38
 
42
 
39
   # GET /api/groups/1/previous_activities
43
   # GET /api/groups/1/previous_activities
40
   def previous_activities
44
   def previous_activities
41
-    @activities = @group.previous_activities
45
+    reference = try_parse_datetime params[:reference]
46
+    @activities = @group.previous_activities reference
47
+
42
     render 'api/activities/index'
48
     render 'api/activities/index'
43
   end
49
   end
44
 
50
 
48
   def set_group
54
   def set_group
49
     @group = Group.find(params[:id])
55
     @group = Group.find(params[:id])
50
   end
56
   end
57
+
58
+  # @return [DateTime] the parsed input.
59
+  def try_parse_datetime(input = nil)
60
+    return unless input
61
+    begin
62
+      DateTime.parse input
63
+    rescue ArgumentError
64
+      nil
65
+    end
66
+  end
51
 end
67
 end

+ 6 - 3
app/models/group.rb

35
 
35
 
36
   # @return [Array<Activity>]
36
   # @return [Array<Activity>]
37
   #   all Activities that have started, and not yet ended.
37
   #   all Activities that have started, and not yet ended.
38
-  def current_activities(reference = Time.zone.now)
38
+  def current_activities(reference = nil)
39
+    reference ||= Time.zone.now
39
     activities
40
     activities
40
       .where('start < ?', reference)
41
       .where('start < ?', reference)
41
       .where('end > ?', reference)
42
       .where('end > ?', reference)
43
 
44
 
44
   # @return [Array<Activity>]
45
   # @return [Array<Activity>]
45
   #   at most 3 activities that ended recently.
46
   #   at most 3 activities that ended recently.
46
-  def previous_activities(reference = Time.zone.now)
47
+  def previous_activities(reference = nil)
48
+    reference ||= Time.zone.now
47
     activities
49
     activities
48
       .where('end < ?', reference)
50
       .where('end < ?', reference)
49
       .order(end: :desc)
51
       .order(end: :desc)
52
 
54
 
53
   # @return [Array<Activity>]
55
   # @return [Array<Activity>]
54
   #   all Activities starting within the next 48 hours.
56
   #   all Activities starting within the next 48 hours.
55
-  def upcoming_activities(reference = Time.zone.now)
57
+  def upcoming_activities(reference = nil)
58
+    reference ||= Time.zone.now
56
     activities
59
     activities
57
       .where('start > ?', reference)
60
       .where('start > ?', reference)
58
       .where('start < ?', reference.days_since(2))
61
       .where('start < ?', reference.days_since(2))