1616use OCP \IRequest ;
1717use OCP \Teams \ITeamManager ;
1818use OCP \Teams \Team ;
19+ use OCP \Teams \TeamResource ;
1920
2021/**
2122 * @psalm-import-type CoreTeamResource from ResponseDefinitions
2223 * @psalm-import-type CoreTeam from ResponseDefinitions
24+ * @psalm-import-type CoreTeamWithResources from ResponseDefinitions
2325 * @property $userId string
2426 */
2527class TeamsApiController extends \OCP \AppFramework \OCSController {
@@ -43,21 +45,18 @@ public function __construct(
4345 #[NoAdminRequired]
4446 #[ApiRoute(verb: 'GET ' , url: '/{teamId}/resources ' , root: '/teams ' )]
4547 public function resolveOne (string $ teamId ): DataResponse {
46- /**
47- * @var list<CoreTeamResource> $resolvedResources
48- * @psalm-suppress PossiblyNullArgument The route is limited to logged-in users
49- */
48+ /** @psalm-suppress PossiblyNullArgument The route is limited to logged-in users */
5049 $ resolvedResources = $ this ->teamManager ->getSharedWith ($ teamId , $ this ->userId );
5150
52- return new DataResponse (['resources ' => $ resolvedResources ]);
51+ return new DataResponse (['resources ' => array_map ( static fn ( TeamResource $ resource ) => $ resource -> jsonSerialize (), $ resolvedResources) ]);
5352 }
5453
5554 /**
5655 * Get all teams of a resource
5756 *
5857 * @param string $providerId Identifier of the provider (e.g. deck, talk, collectives)
5958 * @param string $resourceId Unique id of the resource to list teams for (e.g. deck board id)
60- * @return DataResponse<Http::STATUS_OK, array{teams: list<CoreTeam >}, array{}>
59+ * @return DataResponse<Http::STATUS_OK, array{teams: list<CoreTeamWithResources >}, array{}>
6160 *
6261 * 200: Teams returned
6362 */
@@ -66,16 +65,16 @@ public function resolveOne(string $teamId): DataResponse {
6665 public function listTeams (string $ providerId , string $ resourceId ): DataResponse {
6766 /** @psalm-suppress PossiblyNullArgument The route is limited to logged-in users */
6867 $ teams = $ this ->teamManager ->getTeamsForResource ($ providerId , $ resourceId , $ this ->userId );
69- /** @var list<CoreTeam> $ teams */
70- $ teams = array_values (array_map (function (Team $ team ) {
68+ $ sharesPerTeams = $ this -> teamManager -> getSharedWithList ( array_map ( fn ( Team $ team ): string => $ team -> getId (), $ teams), $ this -> userId );
69+ $ listTeams = array_values (array_map (function (Team $ team) use ( $ sharesPerTeams ) {
7170 $ response = $ team ->jsonSerialize ();
7271 /** @psalm-suppress PossiblyNullArgument The route is limited to logged in users */
73- $ response ['resources ' ] = $ this -> teamManager -> getSharedWith ( $ team ->getId (), $ this -> userId );
72+ $ response ['resources ' ] = array_map ( static fn ( TeamResource $ resource ) => $ resource -> jsonSerialize (), $ sharesPerTeams [ $ team ->getId ()] ?? [] );
7473 return $ response ;
7574 }, $ teams ));
7675
7776 return new DataResponse ([
78- 'teams ' => $ teams ,
77+ 'teams ' => $ listTeams ,
7978 ]);
8079 }
8180}
0 commit comments