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:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user