/
sprint_task_member.go
117 lines (93 loc) · 3.36 KB
/
sprint_task_member.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package v1
import (
"net/http"
"strconv"
"github.com/gin-gonic/gin"
retroSerializers "github.com/iReflect/reflect-app/apps/retrospective/serializers"
retroServices "github.com/iReflect/reflect-app/apps/retrospective/services"
"github.com/iReflect/reflect-app/constants"
)
// SprintTaskMemberController ...
type SprintTaskMemberController struct {
SprintTaskMemberService retroServices.SprintTaskMemberService
PermissionService retroServices.PermissionService
TrailService retroServices.TrailService
}
// Routes for Tasks
func (ctrl SprintTaskMemberController) Routes(r *gin.RouterGroup) {
r.GET("/", ctrl.GetMembers)
r.POST("/", ctrl.AddMember)
r.PATCH("/:smtID/", ctrl.UpdateTaskMember)
}
// GetMembers ...
func (ctrl SprintTaskMemberController) GetMembers(c *gin.Context) {
id := c.Param("sprintTaskID")
retroID := c.Param("retroID")
sprintID := c.Param("sprintID")
userID, _ := c.Get("userID")
if !ctrl.PermissionService.UserCanAccessSprintTask(retroID, sprintID, id, userID.(uint)) {
c.AbortWithStatusJSON(http.StatusForbidden, gin.H{})
return
}
members, status, err := ctrl.SprintTaskMemberService.GetMembers(id, retroID, sprintID)
if err != nil {
c.AbortWithStatusJSON(status, gin.H{"error": err.Error()})
return
}
c.JSON(status, members)
}
// AddMember adds a member for a task in a particular sprint of a retro
func (ctrl SprintTaskMemberController) AddMember(c *gin.Context) {
sprintTaskID := c.Param("sprintTaskID")
retroID := c.Param("retroID")
sprintID := c.Param("sprintID")
userID, _ := c.Get("userID")
if !ctrl.PermissionService.UserCanEditSprintTask(retroID, sprintID, sprintTaskID, userID.(uint)) {
c.AbortWithStatusJSON(http.StatusForbidden, gin.H{})
return
}
addTaskMemberData := retroSerializers.AddSprintTaskMemberSerializer{}
if err := c.BindJSON(&addTaskMemberData); err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "invalid request data"})
return
}
members, status, err := ctrl.SprintTaskMemberService.AddMember(sprintTaskID, retroID, sprintID, addTaskMemberData.MemberID)
if err != nil {
c.AbortWithStatusJSON(status, gin.H{"error": err.Error()})
return
}
ctrl.TrailService.Add(
constants.AddedSprintMemberTask,
constants.SprintMemberTask,
sprintTaskID,
userID.(uint))
c.JSON(status, members)
}
// UpdateTaskMember updates a member for a task in a particular sprint of a retro
func (ctrl SprintTaskMemberController) UpdateTaskMember(c *gin.Context) {
sprintTaskID := c.Param("sprintTaskID")
retroID := c.Param("retroID")
sprintID := c.Param("sprintID")
smtID := c.Param("smtID")
userID, _ := c.Get("userID")
if !ctrl.PermissionService.UserCanEditSprintTask(retroID, sprintID, sprintTaskID, userID.(uint)) {
c.AbortWithStatusJSON(http.StatusForbidden, gin.H{})
return
}
taskMemberData := retroSerializers.SprintTaskMemberUpdate{}
if err := c.BindJSON(&taskMemberData); err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "invalid request data"})
return
}
taskMember, status, err := ctrl.SprintTaskMemberService.UpdateTaskMember(sprintTaskID, retroID, sprintID, smtID, &taskMemberData)
if err != nil {
c.AbortWithStatusJSON(status, gin.H{"error": err.Error()})
return
}
ctrl.TrailService.Add(
constants.UpdatedSprintMemberTask,
constants.SprintMemberTask,
strconv.Itoa(int(taskMember.ID)),
userID.(uint))
c.JSON(status, taskMember)
}