@@ -324,35 +324,38 @@ public function get(GroupHelper $groupHelper, UserSettings $userSettings, $user,
324324 * @throws \OutOfBoundsException If $since is not owned by $user
325325 */
326326 protected function setOffsetFromSince (IQueryBuilder $ query , $ user , $ since , $ sort ) {
327- if ($ since ) {
328- $ queryBuilder = $ this ->connection ->getQueryBuilder ();
329- $ queryBuilder ->select (['affecteduser ' , 'timestamp ' ])
330- ->from ('activity ' )
331- ->where ($ queryBuilder ->expr ()->eq ('activity_id ' , $ queryBuilder ->createNamedParameter ((int )$ since )));
332- $ result = $ queryBuilder ->executeQuery ();
333- $ activity = $ result ->fetch ();
334- $ result ->closeCursor ();
335-
336- if ($ activity ) {
337- if ($ activity ['affecteduser ' ] !== $ user ) {
338- throw new \OutOfBoundsException ('Invalid since ' , 2 );
339- }
340- $ timestamp = (int )$ activity ['timestamp ' ];
341-
342- if ($ sort === 'DESC ' ) {
343- $ query ->andWhere ($ query ->expr ()->lte ('timestamp ' , $ query ->createNamedParameter ($ timestamp )));
344- $ query ->andWhere ($ query ->expr ()->lt ('activity_id ' , $ query ->createNamedParameter ($ since )));
345- } else {
346- $ query ->andWhere ($ query ->expr ()->gte ('timestamp ' , $ query ->createNamedParameter ($ timestamp )));
347- $ query ->andWhere ($ query ->expr ()->gt ('activity_id ' , $ query ->createNamedParameter ($ since )));
348- }
349- return [];
350- }
327+ if (!$ since ) {
328+ return $ this ->getFirstKnownActivityHeader ($ user , $ sort );
351329 }
352330
353- /**
354- * Couldn't find the since, so find the oldest one and set the header
355- */
331+ $ queryBuilder = $ this ->connection ->getQueryBuilder ();
332+ $ queryBuilder ->select (['affecteduser ' , 'timestamp ' ])
333+ ->from ('activity ' )
334+ ->where ($ queryBuilder ->expr ()->eq ('activity_id ' , $ queryBuilder ->createNamedParameter ((int )$ since )));
335+ $ result = $ queryBuilder ->executeQuery ();
336+ $ activity = $ result ->fetch ();
337+ $ result ->closeCursor ();
338+
339+ if (!$ activity ) {
340+ return $ this ->getFirstKnownActivityHeader ($ user , $ sort );
341+ }
342+
343+ if ($ activity ['affecteduser ' ] !== $ user ) {
344+ throw new \OutOfBoundsException ('Invalid since ' , 2 );
345+ }
346+
347+ $ timestamp = (int )$ activity ['timestamp ' ];
348+ if ($ sort === 'DESC ' ) {
349+ $ query ->andWhere ($ query ->expr ()->lte ('timestamp ' , $ query ->createNamedParameter ($ timestamp )));
350+ $ query ->andWhere ($ query ->expr ()->lt ('activity_id ' , $ query ->createNamedParameter ($ since )));
351+ } else {
352+ $ query ->andWhere ($ query ->expr ()->gte ('timestamp ' , $ query ->createNamedParameter ($ timestamp )));
353+ $ query ->andWhere ($ query ->expr ()->gt ('activity_id ' , $ query ->createNamedParameter ($ since )));
354+ }
355+ return [];
356+ }
357+
358+ private function getFirstKnownActivityHeader (string $ user , string $ sort ): array {
356359 $ fetchQuery = $ this ->connection ->getQueryBuilder ();
357360 $ fetchQuery ->select ('activity_id ' )
358361 ->from ('activity ' )
@@ -364,11 +367,8 @@ protected function setOffsetFromSince(IQueryBuilder $query, $user, $since, $sort
364367 $ result ->closeCursor ();
365368
366369 if ($ activity !== false ) {
367- return [
368- 'X-Activity-First-Known ' => (int )$ activity ['activity_id ' ],
369- ];
370+ return ['X-Activity-First-Known ' => (int )$ activity ['activity_id ' ]];
370371 }
371-
372372 return [];
373373 }
374374
0 commit comments