INFRA-2873 : Team Management V2 - Update team, remove member, make manager, get team details Phase 2 changes (#381)

* INFRA-2873 : Completed till update team and remove member flow

* INFRA-2873 : Complete make manager, remove member, get teams flow

* INFRA-2873 : Minor auth service and rebase changes

* INFRA-2873 : Minor changes

* INFRA-2873 : Minor changes

* INFRA-2873 : PR Review changes

* INFRA-2873 : Added UTs

* INFRA-2873 : Second round review changes
This commit is contained in:
Vijay Joshi
2024-02-27 17:02:22 +05:30
committed by GitHub
parent 9b1ff52994
commit 983c743609
28 changed files with 1558 additions and 43 deletions

View File

@@ -51,6 +51,22 @@ func (handler *TeamHandler) HandleGetAllTeams(c *gin.Context) {
c.JSON(http.StatusOK, common.SuccessResponse(teamResponses, http.StatusOK))
}
func (handler *TeamHandler) HandleGetTeam(c *gin.Context) {
teamId, err := validateGetTeamParams(c)
if err != nil {
handler.handleErrorResponse(c, err)
return
}
teamResponse, err := handler.service.GetTeam(teamId)
if err != nil {
handler.handleErrorResponse(c, err)
return
}
c.JSON(http.StatusOK, common.SuccessResponse(teamResponse, http.StatusOK))
}
func (handler *TeamHandler) handleErrorResponse(c *gin.Context, err error) {
var dataAccessError *customErrors.DataAccessError
if errors.As(err, &dataAccessError) {
@@ -95,6 +111,53 @@ func (handler *TeamHandler) HandleAddTeam(c *gin.Context) {
c.JSON(http.StatusCreated, common.SuccessResponse(addTeamResponse, http.StatusCreated))
}
func (handler *TeamHandler) HandleUpdateTeam(c *gin.Context, updateTeamRequest team.UpdateTeamRequest) {
if err := validateUpdateTeamRequest(updateTeamRequest); err != nil {
handler.handleErrorResponse(c, err)
return
}
err := handler.service.UpdateTeam(updateTeamRequest, c.GetHeader(util.UserEmailHeader))
if err != nil {
handler.handleErrorResponse(c, err)
return
}
c.JSON(http.StatusOK, common.SuccessResponse("Team Updated Successfully", http.StatusOK))
}
func (handler *TeamHandler) HandleRemoveMember(c *gin.Context) {
teamId, userId, err := validateRemoveMemberParams(c)
if err != nil {
handler.handleErrorResponse(c, err)
return
}
err = handler.service.RemoveTeamMember(teamId, userId, c.GetHeader(util.UserEmailHeader))
if err != nil {
handler.handleErrorResponse(c, err)
return
}
c.JSON(http.StatusOK, common.SuccessResponse("Member removed successfully", http.StatusOK))
}
func (handler *TeamHandler) HandleMakeManager(c *gin.Context) {
teamId, memberToMakeManagerId, err := validateMakeManagerParams(c)
if err != nil {
handler.handleErrorResponse(c, err)
return
}
err = handler.service.MakeManager(teamId, memberToMakeManagerId, c.GetHeader(util.UserEmailHeader))
if err != nil {
handler.handleErrorResponse(c, err)
return
}
c.JSON(http.StatusOK, common.SuccessResponse("Team manager updated successfully", http.StatusOK))
}
func validateAddTeamRequest(request team.AddTeamRequest) error {
teamName := request.Name
minLength := viper.GetInt("TEAM_NAME_MIN_LENGTH")
@@ -118,3 +181,63 @@ func validateAddTeamRequest(request team.AddTeamRequest) error {
return nil
}
func validateUpdateTeamRequest(request team.UpdateTeamRequest) error {
if request.Id == 0 {
return customErrors.NewInvalidInputError("Team id not provided")
}
if request.Members == nil && util.IsBlank(request.PseOnCallId) &&
util.IsBlank(request.OnCallId) && util.IsBlank(request.SlackChannel) {
return customErrors.NewInvalidInputError("No fields provided to update")
}
if request.Members != nil {
if request.Members.SeverityId == 0 {
return customErrors.NewInvalidInputError("Severity id not provided for members to add")
}
if len(request.Members.UserEmailIds) == 0 {
return customErrors.NewInvalidInputError("No user email ids provided for members to add")
}
}
return nil
}
func validateRemoveMemberParams(c *gin.Context) (uint, uint, error) {
teamId, err := strconv.Atoi(c.Param(util.IdParam))
if err != nil || teamId == 0 {
return 0, 0, customErrors.NewInvalidInputError("Invalid team id")
}
userId, err := strconv.Atoi(c.Param(util.UserIdParam))
if err != nil || userId == 0 {
return 0, 0, customErrors.NewInvalidInputError("Invalid user id")
}
return uint(teamId), uint(userId), nil
}
func validateMakeManagerParams(c *gin.Context) (uint, uint, error) {
teamId, err := strconv.Atoi(c.Param(util.IdParam))
if err != nil || teamId == 0 {
return 0, 0, customErrors.NewInvalidInputError("Invalid team id")
}
userId, err := strconv.Atoi(c.Param(util.UserIdParam))
if err != nil || userId == 0 {
return 0, 0, customErrors.NewInvalidInputError("Invalid user id to make manager")
}
return uint(teamId), uint(userId), nil
}
func validateGetTeamParams(c *gin.Context) (uint, error) {
teamId, err := strconv.Atoi(c.Param(util.IdParam))
if err != nil || teamId == 0 {
return 0, customErrors.NewInvalidInputError("Invalid team id")
}
return uint(teamId), nil
}

View File

@@ -104,11 +104,15 @@ func (s *Server) teamHandler(houstonGroup *gin.RouterGroup) {
houstonGroup.GET("/teams", teamHandler.GetTeams)
houstonGroup.GET("/teams/:id", teamHandler.GetTeams)
}
houstonGroup.GET("/teams-v2/:id", teamHandlerV2.HandleGetTeam)
houstonGroup.POST("/teams/add", teamHandler.AddTeam)
houstonGroup.POST("/teams-v2/add", s.authService.IfAdmin(teamHandlerV2.HandleAddTeam))
houstonGroup.POST("/teams-v2", s.authService.IfMemberOrAdmin(teamHandlerV2.HandleUpdateTeam))
houstonGroup.POST("/teams", teamHandler.UpdateTeam)
houstonGroup.PATCH("/teams/:id/manager/:userId", teamHandler.MakeManager)
houstonGroup.PATCH("/teams-v2/:id/manager/:userId", s.authService.IfManagerOrAdmin(teamHandlerV2.HandleMakeManager))
houstonGroup.DELETE("/teams/:id/members/:userId", teamHandler.RemoveTeamMember)
houstonGroup.DELETE("/teams-v2/:id/members/:userId", s.authService.IfManagerOrAdmin(teamHandlerV2.HandleRemoveMember))
houstonGroup.DELETE("/teams/:id", teamHandler.RemoveTeam)
}