1717use OCP \IRequest ;
1818use OCP \Teams \ITeamManager ;
1919use OCP \Teams \Team ;
20+ use OCP \Teams \TeamResource ;
2021
2122/**
2223 * @psalm-import-type CoreTeamResource from ResponseDefinitions
2324 * @psalm-import-type CoreTeam from ResponseDefinitions
25+ * @psalm-import-type CoreTeamWithResources from ResponseDefinitions
2426 * @property $userId string
2527 */
2628class TeamsApiController extends OCSController {
@@ -44,21 +46,18 @@ public function __construct(
4446 #[NoAdminRequired]
4547 #[ApiRoute(verb: 'GET ' , url: '/{teamId}/resources ' , root: '/teams ' )]
4648 public function resolveOne (string $ teamId ): DataResponse {
47- /**
48- * @var list<CoreTeamResource> $resolvedResources
49- * @psalm-suppress PossiblyNullArgument The route is limited to logged-in users
50- */
49+ /** @psalm-suppress PossiblyNullArgument The route is limited to logged-in users */
5150 $ resolvedResources = $ this ->teamManager ->getSharedWith ($ teamId , $ this ->userId );
5251
53- return new DataResponse (['resources ' => $ resolvedResources ]);
52+ return new DataResponse (['resources ' => array_map ( static fn ( TeamResource $ resource ) => $ resource -> jsonSerialize (), $ resolvedResources) ]);
5453 }
5554
5655 /**
5756 * Get all teams of a resource
5857 *
5958 * @param string $providerId Identifier of the provider (e.g. deck, talk, collectives)
6059 * @param string $resourceId Unique id of the resource to list teams for (e.g. deck board id)
61- * @return DataResponse<Http::STATUS_OK, array{teams: list<CoreTeam >}, array{}>
60+ * @return DataResponse<Http::STATUS_OK, array{teams: list<CoreTeamWithResources >}, array{}>
6261 *
6362 * 200: Teams returned
6463 */
@@ -67,16 +66,15 @@ public function resolveOne(string $teamId): DataResponse {
6766 public function listTeams (string $ providerId , string $ resourceId ): DataResponse {
6867 /** @psalm-suppress PossiblyNullArgument The route is limited to logged-in users */
6968 $ teams = $ this ->teamManager ->getTeamsForResource ($ providerId , $ resourceId , $ this ->userId );
70- /** @var list<CoreTeam> $ teams */
71- $ teams = array_values (array_map (function (Team $ team ) {
69+ $ sharesPerTeams = $ this -> teamManager -> getSharedWithList ( array_map ( fn ( Team $ team ): string => $ team -> getId (), $ teams), $ this -> userId );
70+ $ listTeams = array_values (array_map (function (Team $ team) use ( $ sharesPerTeams ) {
7271 $ response = $ team ->jsonSerialize ();
73- /** @psalm-suppress PossiblyNullArgument The route is limited to logged in users */
74- $ response ['resources ' ] = $ this ->teamManager ->getSharedWith ($ team ->getId (), $ this ->userId );
72+ $ response ['resources ' ] = array_map (static fn (TeamResource $ resource ) => $ resource ->jsonSerialize (), $ sharesPerTeams [$ team ->getId ()] ?? []);
7573 return $ response ;
7674 }, $ teams ));
7775
7876 return new DataResponse ([
79- 'teams ' => $ teams ,
77+ 'teams ' => $ listTeams ,
8078 ]);
8179 }
8280}
0 commit comments