5
5
*/
6
6
7
7
import { Code , ConnectError , ServiceImpl } from "@bufbuild/connect" ;
8
- import { injectable } from "inversify" ;
8
+ import { inject , injectable } from "inversify" ;
9
9
import { TeamsService as TeamServiceInterface } from "@gitpod/public-api/lib/gitpod/experimental/v1/teams_connectweb" ;
10
10
import {
11
11
CreateTeamRequest ,
@@ -22,17 +22,43 @@ import {
22
22
ListTeamsResponse ,
23
23
ResetTeamInvitationRequest ,
24
24
ResetTeamInvitationResponse ,
25
+ Team ,
26
+ TeamInvitation ,
27
+ TeamMember ,
28
+ TeamRole ,
25
29
UpdateTeamMemberRequest ,
26
30
UpdateTeamMemberResponse ,
27
31
} from "@gitpod/public-api/lib/gitpod/experimental/v1/teams_pb" ;
32
+ import { TeamDB } from "@gitpod/gitpod-db/lib" ;
33
+ import { validate } from "uuid" ;
34
+ import { OrgMemberInfo , Organization , TeamMembershipInvite } from "@gitpod/gitpod-protocol" ;
35
+ import { Timestamp } from "@bufbuild/protobuf" ;
28
36
29
37
@injectable ( )
30
38
export class APITeamService implements ServiceImpl < typeof TeamServiceInterface > {
39
+ @inject ( TeamDB ) protected readonly teamDB : TeamDB ;
40
+
31
41
public async createTeam ( req : CreateTeamRequest ) : Promise < CreateTeamResponse > {
32
42
throw new ConnectError ( "unimplemented" , Code . Unimplemented ) ;
33
43
}
34
44
public async getTeam ( req : GetTeamRequest ) : Promise < GetTeamResponse > {
35
- throw new ConnectError ( "unimplemented" , Code . Unimplemented ) ;
45
+ const { teamId } = req ;
46
+
47
+ if ( ! teamId || ! validate ( teamId ) ) {
48
+ throw new ConnectError ( "Invalid argument: teamId" , Code . InvalidArgument ) ;
49
+ }
50
+
51
+ const team = await this . teamDB . findTeamById ( teamId ) ;
52
+ if ( ! team ) {
53
+ throw new ConnectError ( `Team (ID: ${ teamId } ) does not exist` , Code . NotFound ) ;
54
+ }
55
+
56
+ const members = await this . teamDB . findMembersByTeam ( teamId ) ;
57
+ let invite = await this . teamDB . findGenericInviteByTeamId ( teamId ) ;
58
+
59
+ return new GetTeamResponse ( {
60
+ team : toAPITeam ( team , members , invite ) ,
61
+ } ) ;
36
62
}
37
63
public async listTeams ( req : ListTeamsRequest ) : Promise < ListTeamsResponse > {
38
64
throw new ConnectError ( "unimplemented" , Code . Unimplemented ) ;
@@ -53,3 +79,25 @@ export class APITeamService implements ServiceImpl<typeof TeamServiceInterface>
53
79
throw new ConnectError ( "unimplemented" , Code . Unimplemented ) ;
54
80
}
55
81
}
82
+
83
+ function toAPITeam ( team : Organization , members : OrgMemberInfo [ ] , invite : TeamMembershipInvite ) : Team {
84
+ return new Team ( {
85
+ id : team . id ,
86
+ name : team . name ,
87
+ slug : team . slug ,
88
+ teamInvitation : new TeamInvitation ( {
89
+ id : invite . id ,
90
+ } ) ,
91
+ members : members . map (
92
+ ( m ) =>
93
+ new TeamMember ( {
94
+ avatarUrl : m . avatarUrl ,
95
+ fullName : m . fullName ,
96
+ memberSince : Timestamp . fromDate ( new Date ( m . memberSince ) ) ,
97
+ primaryEmail : m . primaryEmail ,
98
+ role : m . role === "owner" ? TeamRole . OWNER : TeamRole . MEMBER ,
99
+ userId : m . userId ,
100
+ } ) ,
101
+ ) ,
102
+ } ) ;
103
+ }
0 commit comments