@@ -8,16 +8,15 @@ import (
8
8
"context"
9
9
"fmt"
10
10
11
- protocol "github.com/gitpod-io/gitpod/gitpod-protocol"
12
- "github.com/relvacode/iso8601"
13
- "google.golang.org/protobuf/types/known/timestamppb"
14
-
15
11
connect "github.com/bufbuild/connect-go"
16
12
"github.com/gitpod-io/gitpod/common-go/log"
13
+ protocol "github.com/gitpod-io/gitpod/gitpod-protocol"
17
14
"github.com/gitpod-io/gitpod/public-api-server/pkg/auth"
18
15
"github.com/gitpod-io/gitpod/public-api-server/pkg/proxy"
19
16
v1 "github.com/gitpod-io/gitpod/public-api/experimental/v1"
20
17
"github.com/gitpod-io/gitpod/public-api/experimental/v1/v1connect"
18
+ "github.com/relvacode/iso8601"
19
+ "google.golang.org/protobuf/types/known/timestamppb"
21
20
)
22
21
23
22
func NewTeamsService (pool proxy.ServerConnectionPool ) * TeamService {
@@ -41,38 +40,82 @@ func (s *TeamService) CreateTeam(ctx context.Context, req *connect.Request[v1.Cr
41
40
return nil , connect .NewError (connect .CodeInvalidArgument , fmt .Errorf ("Name is a required argument when creating a team." ))
42
41
}
43
42
44
- server , err := s .connectionPool .Get (ctx , token )
43
+ conn , err := s .connectionPool .Get (ctx , token )
45
44
if err != nil {
46
45
log .Log .WithError (err ).Error ("Failed to get connection to server." )
47
46
return nil , connect .NewError (connect .CodeInternal , err )
48
47
}
49
48
50
- team , err := server .CreateTeam (ctx , req .Msg .GetName ())
49
+ created , err := conn .CreateTeam (ctx , req .Msg .GetName ())
51
50
if err != nil {
51
+ log .WithError (err ).Error ("Failed to create team." )
52
52
return nil , proxy .ConvertError (err )
53
53
}
54
54
55
- members , err := server . GetTeamMembers (ctx , team . ID )
55
+ team , err := s . toTeamAPIResponse (ctx , conn , created )
56
56
if err != nil {
57
+ log .WithError (err ).Error ("Failed to populate team with details." )
58
+ return nil , err
59
+ }
60
+
61
+ return connect .NewResponse (& v1.CreateTeamResponse {
62
+ Team : team ,
63
+ }), nil
64
+ }
65
+
66
+ func (s * TeamService ) ListTeams (ctx context.Context , req * connect.Request [v1.ListTeamsRequest ]) (* connect.Response [v1.ListTeamsResponse ], error ) {
67
+ token := auth .TokenFromContext (ctx )
68
+
69
+ conn , err := s .connectionPool .Get (ctx , token )
70
+ if err != nil {
71
+ log .Log .WithError (err ).Error ("Failed to get connection to server." )
72
+ return nil , connect .NewError (connect .CodeInternal , err )
73
+ }
74
+
75
+ teams , err := conn .GetTeams (ctx )
76
+ if err != nil {
77
+ log .WithError (err ).Error ("Failed to list teams from server." )
78
+ return nil , proxy .ConvertError (err )
79
+ }
80
+
81
+ var response []* v1.Team
82
+ for _ , t := range teams {
83
+ team , err := s .toTeamAPIResponse (ctx , conn , t )
84
+ if err != nil {
85
+ log .WithError (err ).Error ("Failed to populate team with details." )
86
+ return nil , err
87
+ }
88
+
89
+ response = append (response , team )
90
+ }
91
+
92
+ return connect .NewResponse (& v1.ListTeamsResponse {
93
+ Teams : response ,
94
+ }), nil
95
+ }
96
+
97
+ func (s * TeamService ) toTeamAPIResponse (ctx context.Context , conn protocol.APIInterface , team * protocol.Team ) (* v1.Team , error ) {
98
+ members , err := conn .GetTeamMembers (ctx , team .ID )
99
+ if err != nil {
100
+ log .WithError (err ).Error ("Failed to get team members." )
57
101
return nil , proxy .ConvertError (err )
58
102
}
59
103
60
- invite , err := server .GetGenericInvite (ctx , team .ID )
104
+ invite , err := conn .GetGenericInvite (ctx , team .ID )
61
105
if err != nil {
106
+ log .WithError (err ).Error ("Failed to get generic invite." )
62
107
return nil , proxy .ConvertError (err )
63
108
}
64
109
65
- return connect .NewResponse (& v1.CreateTeamResponse {
66
- Team : & v1.Team {
67
- Id : team .ID ,
68
- Name : team .Name ,
69
- Slug : team .Slug ,
70
- Members : teamMembersToAPIResponse (members ),
71
- TeamInvitation : & v1.TeamInvitation {
72
- Id : invite .ID ,
73
- },
110
+ return & v1.Team {
111
+ Id : team .ID ,
112
+ Name : team .Name ,
113
+ Slug : team .Slug ,
114
+ Members : teamMembersToAPIResponse (members ),
115
+ TeamInvitation : & v1.TeamInvitation {
116
+ Id : invite .ID ,
74
117
},
75
- }) , nil
118
+ }, nil
76
119
}
77
120
78
121
func teamMembersToAPIResponse (members []* protocol.TeamMemberInfo ) []* v1.TeamMember {
0 commit comments