@@ -298,6 +298,7 @@ func (client *Client) ListAllRoles(ctx context.Context) ([]RolesAPIData, error)
298298// GetUser
299299// Returns specific users.
300300func (client * Client ) GetUser (ctx context.Context , userName string ) (jira.User , error ) {
301+ l := ctxzap .Extract (ctx )
301302 var usersAPIData []UsersAPIData
302303 req , err := getRequest (ctx , client , allUsersV2 , Query {
303304 "username" : userName ,
@@ -308,16 +309,27 @@ func (client *Client) GetUser(ctx context.Context, userName string) (jira.User,
308309
309310 resp , err := client .httpClient .Do (req , uhttp .WithJSONResponse (& usersAPIData ))
310311 if err != nil {
312+ l .Debug ("error fetching user" , zap .String ("username" , userName ), zap .Error (err ))
311313 return jira.User {}, err
312314 }
313315
314316 defer resp .Body .Close ()
315317
316318 if len (usersAPIData ) == 0 {
319+ l .Debug ("user not found error" , zap .String ("username" , userName ))
317320 return jira.User {}, fmt .Errorf ("%w: %s" , ErrUserNotFound , userName )
318321 }
319322
323+ if len (usersAPIData ) > 1 {
324+ l .Debug ("multiple users found for username" , zap .String ("username" , userName ))
325+ return jira.User {}, fmt .Errorf ("%w: more than one result for %s" , ErrUserNotFound , userName )
326+ }
327+
320328 user := usersAPIData [0 ]
329+ if user .Name != userName && user .EmailAddress != userName {
330+ l .Debug ("user not found error, no exact match for username" , zap .String ("username" , userName ))
331+ return jira.User {}, fmt .Errorf ("%w: no exact match for username %s" , ErrUserNotFound , userName )
332+ }
321333
322334 return jira.User {
323335 Self : user .Self ,
@@ -374,6 +386,27 @@ func (client *Client) GetProjectRoles(ctx context.Context, projectId string) (ma
374386 return projectRolesAPIData , err
375387}
376388
389+ func (client * Client ) GetProjectRoleDetailsById (ctx context.Context , projectId string , roleId string ) (* RolesAPIData , error ) {
390+ var projectRoleDetailsAPIData RolesAPIData
391+ endpointUrl , err := url .JoinPath (allProjects , projectId , "role" , roleId )
392+ if err != nil {
393+ return nil , err
394+ }
395+
396+ req , err := getRequest (ctx , client , endpointUrl , nil )
397+ if err != nil {
398+ return nil , err
399+ }
400+
401+ resp , err := client .httpClient .Do (req , uhttp .WithJSONResponse (& projectRoleDetailsAPIData ))
402+ if err != nil {
403+ return nil , err
404+ }
405+
406+ defer resp .Body .Close ()
407+ return & projectRoleDetailsAPIData , err
408+ }
409+
377410// GetProjectRoleDetails
378411// Returns all role details that are present in specific project.
379412func (client * Client ) GetProjectRoleDetails (ctx context.Context , urlApi string ) (RolesAPIData , error ) {
0 commit comments