@@ -131,7 +131,11 @@ public function find($id, bool $enhance = true): Card {
131131 return $ card ;
132132 }
133133
134- public function findAll ($ stackId , $ limit = null , $ offset = null , $ since = -1 ) {
134+ /**
135+ * @return Card[]
136+ * @throws \OCP\DB\Exception
137+ */
138+ public function findAll ($ stackId , ?int $ limit = null , ?int $ offset = null , int $ since = -1 ) {
135139 $ qb = $ this ->db ->getQueryBuilder ();
136140 $ qb ->select ('* ' )
137141 ->from ('deck_cards ' )
@@ -146,6 +150,32 @@ public function findAll($stackId, $limit = null, $offset = null, $since = -1) {
146150 return $ this ->findEntities ($ qb );
147151 }
148152
153+ /**
154+ * @param int[] $stackIds
155+ * @return array<int, null|Card[]>
156+ * @throws \OCP\DB\Exception
157+ */
158+ public function findAllForStacks (array $ stackIds , ?int $ limit = null , ?int $ offset = null , int $ since = -1 ): array {
159+ $ qb = $ this ->db ->getQueryBuilder ();
160+ $ qb ->select ('* ' )
161+ ->from ('deck_cards ' )
162+ ->where ($ qb ->expr ()->in ('stack_id ' , $ qb ->createNamedParameter ($ stackIds , IQueryBuilder::PARAM_INT_ARRAY )))
163+ ->andWhere ($ qb ->expr ()->eq ('archived ' , $ qb ->createNamedParameter (false , IQueryBuilder::PARAM_BOOL )))
164+ ->andWhere ($ qb ->expr ()->eq ('deleted_at ' , $ qb ->createNamedParameter (0 , IQueryBuilder::PARAM_INT )))
165+ ->andWhere ($ qb ->expr ()->gt ('last_modified ' , $ qb ->createNamedParameter ($ since , IQueryBuilder::PARAM_INT )))
166+ ->setMaxResults ($ limit )
167+ ->setFirstResult ($ offset )
168+ ->orderBy ('order ' )
169+ ->addOrderBy ('id ' );
170+
171+ $ rawCards = $ this ->findEntities ($ qb );
172+ $ cards = array_fill_keys ($ stackIds , null );
173+ foreach ($ rawCards as $ card ) {
174+ $ cards [$ card ->getStackId ()][] = $ card ;
175+ }
176+ return $ cards ;
177+ }
178+
149179 public function queryCardsByBoard (int $ boardId ): IQueryBuilder {
150180 $ qb = $ this ->db ->getQueryBuilder ();
151181 $ qb ->select ('c.* ' )
0 commit comments