Updated teams service
This commit is contained in:
parent
55c89d47e8
commit
16362e85e5
3 changed files with 69 additions and 62 deletions
|
@ -67,58 +67,6 @@ $utopia->get('/v1/teams/:teamId')
|
|||
}
|
||||
);
|
||||
|
||||
$utopia->get('/v1/teams/:teamId/members')
|
||||
->desc('Get Team Members')
|
||||
->label('scope', 'teams.read')
|
||||
->label('sdk.namespace', 'teams')
|
||||
->label('sdk.method', 'getTeamMembers')
|
||||
->label('sdk.description', '/docs/references/teams/get-team-members.md')
|
||||
->param('teamId', '', function () { return new UID(); }, 'Team unique ID.')
|
||||
->action(
|
||||
function ($teamId) use ($response, $projectDB) {
|
||||
$team = $projectDB->getDocument($teamId);
|
||||
|
||||
if (empty($team->getUid()) || Database::SYSTEM_COLLECTION_TEAMS != $team->getCollection()) {
|
||||
throw new Exception('Team not found', 404);
|
||||
}
|
||||
|
||||
$memberships = $projectDB->getCollection([
|
||||
'limit' => 50,
|
||||
'offset' => 0,
|
||||
'filters' => [
|
||||
'$collection='.Database::SYSTEM_COLLECTION_MEMBERSHIPS,
|
||||
'teamId='.$teamId,
|
||||
],
|
||||
]);
|
||||
|
||||
$users = [];
|
||||
|
||||
foreach ($memberships as $member) {
|
||||
if (empty($member->getAttribute('userId', null))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$temp = $projectDB->getDocument($member->getAttribute('userId', null))->getArrayCopy(['$uid', 'email', 'name']);
|
||||
|
||||
$temp['inviteId'] = $member->getUid();
|
||||
$temp['roles'] = $member->getAttribute('roles', []);
|
||||
$temp['confirm'] = $member->getAttribute('confirm', false);
|
||||
$temp['joined'] = $member->getAttribute('joined', 0);
|
||||
$users[] = $temp;
|
||||
}
|
||||
|
||||
usort($users, function ($a, $b) {
|
||||
if ($a['joined'] === 0 || $b['joined'] === 0) {
|
||||
return $b['joined'] - $a['joined'];
|
||||
}
|
||||
|
||||
return $a['joined'] - $b['joined'];
|
||||
});
|
||||
|
||||
$response->json($users);
|
||||
}
|
||||
);
|
||||
|
||||
$utopia->post('/v1/teams')
|
||||
->desc('Create Team')
|
||||
->label('scope', 'teams.write')
|
||||
|
@ -247,7 +195,61 @@ $utopia->delete('/v1/teams/:teamId')
|
|||
}
|
||||
);
|
||||
|
||||
// Memberships
|
||||
$utopia->get('/v1/teams/:teamId/memberships')
|
||||
->desc('Get Team Memberships')
|
||||
->label('scope', 'teams.read')
|
||||
->label('sdk.namespace', 'teams')
|
||||
->label('sdk.method', 'getTeamMemberships')
|
||||
->label('sdk.description', '/docs/references/teams/get-team-members.md')
|
||||
->param('teamId', '', function () { return new UID(); }, 'Team unique ID.')
|
||||
->action(
|
||||
function ($teamId) use ($response, $projectDB) {
|
||||
$team = $projectDB->getDocument($teamId);
|
||||
|
||||
if (empty($team->getUid()) || Database::SYSTEM_COLLECTION_TEAMS != $team->getCollection()) {
|
||||
throw new Exception('Team not found', 404);
|
||||
}
|
||||
|
||||
$memberships = $projectDB->getCollection([
|
||||
'limit' => 50,
|
||||
'offset' => 0,
|
||||
'filters' => [
|
||||
'$collection='.Database::SYSTEM_COLLECTION_MEMBERSHIPS,
|
||||
'teamId='.$teamId,
|
||||
],
|
||||
]);
|
||||
|
||||
$users = [];
|
||||
|
||||
foreach ($memberships as $membership) {
|
||||
if (empty($membership->getAttribute('userId', null))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$temp = $projectDB->getDocument($membership->getAttribute('userId', null))->getArrayCopy(['email', 'name']);
|
||||
|
||||
$users[] = array_merge($temp, $membership->getArrayCopy([
|
||||
'$uid',
|
||||
'userId',
|
||||
'teamId',
|
||||
'roles',
|
||||
'invited',
|
||||
'joined',
|
||||
'confirm',
|
||||
]));
|
||||
}
|
||||
|
||||
usort($users, function ($a, $b) {
|
||||
if ($a['joined'] === 0 || $b['joined'] === 0) {
|
||||
return $b['joined'] - $a['joined'];
|
||||
}
|
||||
|
||||
return $a['joined'] - $b['joined'];
|
||||
});
|
||||
|
||||
$response->json($users);
|
||||
}
|
||||
);
|
||||
|
||||
$utopia->post('/v1/teams/:teamId/memberships')
|
||||
->desc('Create Team Membership')
|
||||
|
@ -388,7 +390,7 @@ $utopia->post('/v1/teams/:teamId/memberships')
|
|||
|
||||
$response
|
||||
->setStatusCode(Response::STATUS_CODE_CREATED) // TODO change response of this endpoint
|
||||
->json($membership->getArrayCopy([
|
||||
->json(array_merge($membership->getArrayCopy([
|
||||
'$uid',
|
||||
'userId',
|
||||
'teamId',
|
||||
|
@ -396,6 +398,9 @@ $utopia->post('/v1/teams/:teamId/memberships')
|
|||
'invited',
|
||||
'joined',
|
||||
'confirm',
|
||||
]), [
|
||||
'email' => $email,
|
||||
'name' => $name,
|
||||
]))
|
||||
;
|
||||
}
|
||||
|
@ -509,7 +514,7 @@ $utopia->patch('/v1/teams/:teamId/memberships/:inviteId/status')
|
|||
$response
|
||||
->addCookie(Auth::$cookieName.'_legacy', Auth::encodeSession($user->getUid(), $secret), $expiry, '/', COOKIE_DOMAIN, ('https' == $request->getServer('REQUEST_SCHEME', 'https')), true, null)
|
||||
->addCookie(Auth::$cookieName, Auth::encodeSession($user->getUid(), $secret), $expiry, '/', COOKIE_DOMAIN, ('https' == $request->getServer('REQUEST_SCHEME', 'https')), true, COOKIE_SAMESITE)
|
||||
->json($membership->getArrayCopy([
|
||||
->json(array_merge($membership->getArrayCopy([
|
||||
'$uid',
|
||||
'userId',
|
||||
'teamId',
|
||||
|
@ -517,6 +522,9 @@ $utopia->patch('/v1/teams/:teamId/memberships/:inviteId/status')
|
|||
'invited',
|
||||
'joined',
|
||||
'confirm',
|
||||
]), [
|
||||
'email' => $user->getAttribute('email'),
|
||||
'name' => $user->getAttribute('name'),
|
||||
]))
|
||||
;
|
||||
}
|
||||
|
|
|
@ -9,21 +9,20 @@ trait TeamsBaseClient
|
|||
/**
|
||||
* @depends testCreateTeam
|
||||
*/
|
||||
public function testGetTeamMembers($data):array
|
||||
public function testGetTeamMemberships($data):array
|
||||
{
|
||||
$teamUid = (isset($data['teamUid'])) ? $data['teamUid'] : '';
|
||||
|
||||
/**
|
||||
* Test for SUCCESS
|
||||
*/
|
||||
$response = $this->client->call(Client::METHOD_GET, '/teams/'.$teamUid.'/members', array_merge([
|
||||
$response = $this->client->call(Client::METHOD_GET, '/teams/'.$teamUid.'/memberships', array_merge([
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $this->getProject()['$uid'],
|
||||
], $this->getHeaders()));
|
||||
|
||||
$this->assertEquals(200, $response['headers']['status-code']);
|
||||
$this->assertNotEmpty($response['body'][0]['$uid']);
|
||||
$this->assertEquals($this->getUser()['$uid'], $response['body'][0]['$uid']);
|
||||
$this->assertEquals($this->getUser()['name'], $response['body'][0]['name']);
|
||||
$this->assertEquals($this->getUser()['email'], $response['body'][0]['email']);
|
||||
$this->assertEquals('owner', $response['body'][0]['roles'][0]);
|
||||
|
|
|
@ -9,14 +9,14 @@ trait TeamsBaseServer
|
|||
/**
|
||||
* @depends testCreateTeam
|
||||
*/
|
||||
public function testGetTeamMembers($data):array
|
||||
public function testGetTeamMemberships($data):array
|
||||
{
|
||||
$uid = (isset($data['teamUid'])) ? $data['teamUid'] : '';
|
||||
|
||||
/**
|
||||
* Test for SUCCESS
|
||||
*/
|
||||
$response = $this->client->call(Client::METHOD_GET, '/teams/'.$uid.'/members', array_merge([
|
||||
$response = $this->client->call(Client::METHOD_GET, '/teams/'.$uid.'/memberships', array_merge([
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $this->getProject()['$uid'],
|
||||
], $this->getHeaders()));
|
||||
|
|
Loading…
Reference in a new issue