Skip to content

Commit

Permalink
add jira sprint support in release plan
Browse files Browse the repository at this point in the history
Signed-off-by: Patrick Zhao <[email protected]>
  • Loading branch information
PetrusZ committed Jul 5, 2024
1 parent 91f774f commit fd9cc44
Show file tree
Hide file tree
Showing 13 changed files with 1,122 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,16 @@ type ReleasePlan struct {
Name string `bson:"name" yaml:"name" json:"name"`
Manager string `bson:"manager" yaml:"manager" json:"manager"`
// ManagerID is the user id of the manager
ManagerID string `bson:"manager_id" yaml:"manager_id" json:"manager_id"`
StartTime int64 `bson:"start_time" yaml:"start_time" json:"start_time"`
EndTime int64 `bson:"end_time" yaml:"end_time" json:"end_time"`
ScheduleExecuteTime int64 `bson:"schedule_execute_time" yaml:"schedule_execute_time" json:"schedule_execute_time"`
Description string `bson:"description" yaml:"description" json:"description"`
CreatedBy string `bson:"created_by" yaml:"created_by" json:"created_by"`
CreateTime int64 `bson:"create_time" yaml:"create_time" json:"create_time"`
UpdatedBy string `bson:"updated_by" yaml:"updated_by" json:"updated_by"`
UpdateTime int64 `bson:"update_time" yaml:"update_time" json:"update_time"`
ManagerID string `bson:"manager_id" yaml:"manager_id" json:"manager_id"`
StartTime int64 `bson:"start_time" yaml:"start_time" json:"start_time"`
EndTime int64 `bson:"end_time" yaml:"end_time" json:"end_time"`
ScheduleExecuteTime int64 `bson:"schedule_execute_time" yaml:"schedule_execute_time" json:"schedule_execute_time"`
Description string `bson:"description" yaml:"description" json:"description"`
CreatedBy string `bson:"created_by" yaml:"created_by" json:"created_by"`
CreateTime int64 `bson:"create_time" yaml:"create_time" json:"create_time"`
UpdatedBy string `bson:"updated_by" yaml:"updated_by" json:"updated_by"`
UpdateTime int64 `bson:"update_time" yaml:"update_time" json:"update_time"`
JiraSprintAssociation *ReleasePlanJiraSprintAssociation `bson:"jira_sprint_association" yaml:"jira_sprint_association" json:"jira_sprint_association"`

Approval *Approval `bson:"approval" yaml:"approval" json:"approval,omitempty"`

Expand All @@ -50,6 +51,18 @@ type ReleasePlan struct {
SuccessTime int64 `bson:"success_time" yaml:"success_time" json:"success_time"`
}

type ReleasePlanJiraSprintAssociation struct {
JiraID string `bson:"jira_id" yaml:"jira_id" json:"jira_id"`
Sprints []ReleasePlanJiraSprint `bson:"sprints" yaml:"sprints" json:"sprints"`
}

type ReleasePlanJiraSprint struct {
ProjectName string `bson:"project_name" yaml:"project_name" json:"project_name"`
ProjectKey string `bson:"project_key" yaml:"project_key" json:"project_key"`
BoardID int `bson:"board_id" yaml:"board_id" json:"board_id"`
SprintID int `bson:"sprint_id" yaml:"sprint_id" json:"sprint_id"`
}

func (ReleasePlan) TableName() string {
return "release_plan"
}
Expand Down
37 changes: 37 additions & 0 deletions pkg/microservice/aslan/core/release_plan/service/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ const (
VerbUpdateTimeRange = "update_time_range"
VerbUpdateScheduleExecuteTime = "update_schedule_execute_time"
VerbUpdateManager = "update_manager"
VerbUpdateJiraSprint = "update_jira_sprint"

VerbCreateReleaseJob = "create_release_job"
VerbUpdateReleaseJob = "update_release_job"
Expand Down Expand Up @@ -92,6 +93,8 @@ func NewPlanUpdater(args *UpdateReleasePlanArgs) (PlanUpdater, error) {
return NewUpdateApprovalUpdater(args)
case VerbDeleteApproval:
return NewDeleteApprovalUpdater(args)
case VerbUpdateJiraSprint:
return NewJiraSprintUpdater(args)
default:
return nil, fmt.Errorf("invalid verb: %s", args.Verb)
}
Expand Down Expand Up @@ -571,3 +574,37 @@ func (u *ScheduleExecuteTimeUpdater) TargetType() string {
func (u *ScheduleExecuteTimeUpdater) Verb() string {
return VerbUpdate
}

type JiraSprintUpdater struct {
JiraSprintAssociation *models.ReleasePlanJiraSprintAssociation `json:"jira_sprint_association"`
}

func NewJiraSprintUpdater(args *UpdateReleasePlanArgs) (*JiraSprintUpdater, error) {
var updater JiraSprintUpdater
if err := models.IToi(args.Spec, &updater); err != nil {
return nil, errors.Wrap(err, "invalid spec")
}
return &updater, nil
}

func (u *JiraSprintUpdater) Update(plan *models.ReleasePlan) (before interface{}, after interface{}, err error) {
before, after = plan.JiraSprintAssociation, u.JiraSprintAssociation
plan.JiraSprintAssociation = u.JiraSprintAssociation
return
}

func (u *JiraSprintUpdater) Lint() error {
return nil
}

func (u *JiraSprintUpdater) TargetName() string {
return "需求关联"
}

func (u *JiraSprintUpdater) TargetType() string {
return TargetTypeDescription
}

func (u *JiraSprintUpdater) Verb() string {
return VerbUpdate
}
87 changes: 86 additions & 1 deletion pkg/microservice/aslan/core/system/handler/project_management.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package handler

import (
"fmt"
"strconv"
"strings"

"github.com/gin-gonic/gin"
Expand Down Expand Up @@ -203,14 +204,98 @@ func Validate(c *gin.Context) {
// @Accept json
// @Produce json
// @Param id path string true "jira id"
// @Success 200 {array} service.JiraProjectsResp
// @Success 200 {array} service.JiraProjectResp
// @Router /api/aslan/system/project_management/{id}/jira/project [get]
func ListJiraProjects(c *gin.Context) {
ctx := internalhandler.NewContext(c)
defer func() { internalhandler.JSONResponse(c, ctx) }()
ctx.Resp, ctx.Err = service.ListJiraProjects(c.Param("id"))
}

// @Summary List Jira Boards
// @Description List Jira Boards
// @Tags system
// @Accept json
// @Produce json
// @Param id path string true "jira id"
// @Param projectKey query string true "jira project key"
// @Success 200 {array} service.JiraBoardResp
// @Router /api/aslan/system/project_management/{id}/jira/board [get]
func ListJiraBoards(c *gin.Context) {
ctx := internalhandler.NewContext(c)
defer func() { internalhandler.JSONResponse(c, ctx) }()
ctx.Resp, ctx.Err = service.ListJiraBoards(c.Param("id"), c.Query("projectKey"))
}

// @Summary List Jira Sprints
// @Description List Jira Sprints
// @Tags system
// @Accept json
// @Produce json
// @Param id path string true "jira id"
// @Param boardID path string true "jira board id"
// @Success 200 {array} service.JiraSprintResp
// @Router /api/aslan/system/project_management/{id}/jira/board/:boardID/sprint [get]
func ListJiraSprints(c *gin.Context) {
ctx := internalhandler.NewContext(c)
defer func() { internalhandler.JSONResponse(c, ctx) }()

boardID, err := strconv.Atoi(c.Param("boardID"))
if err != nil {
ctx.Err = e.ErrInvalidParam.AddDesc("invalid board id")
return

}

ctx.Resp, ctx.Err = service.ListJiraSprints(c.Param("id"), boardID)
}

// @Summary Get Jira Sprint
// @Description Get Jira Sprint
// @Tags system
// @Accept json
// @Produce json
// @Param id path string true "jira id"
// @Param sprintID path string true "jira sprint id"
// @Success 200 {object} service.JiraSprintResp
// @Router /api/aslan/system/project_management/{id}/jira/sprint/:sprintID [get]
func GetJiraSprint(c *gin.Context) {
ctx := internalhandler.NewContext(c)
defer func() { internalhandler.JSONResponse(c, ctx) }()

sprintID, err := strconv.Atoi(c.Param("sprintID"))
if err != nil {
ctx.Err = e.ErrInvalidParam.AddDesc("invalid sprint id")
return

}

ctx.Resp, ctx.Err = service.GetJiraSprint(c.Param("id"), sprintID)
}

// @Summary List Jira Sprint Issues
// @Description List Jira Sprint Issues
// @Tags system
// @Accept json
// @Produce json
// @Param id path string true "jira id"
// @Param sprintID path string true "jira sprint id"
// @Success 200 {object} service.JiraSprintResp
// @Router /api/aslan/system/project_management/{id}/jira/sprint/:sprintID/issue [get]
func ListJiraSprintIssues(c *gin.Context) {
ctx := internalhandler.NewContext(c)
defer func() { internalhandler.JSONResponse(c, ctx) }()

sprintID, err := strconv.Atoi(c.Param("sprintID"))
if err != nil {
ctx.Err = e.ErrInvalidParam.AddDesc("invalid sprint id")
return

}

ctx.Resp, ctx.Err = service.ListJiraSprintIssues(c.Param("id"), sprintID)
}

func SearchJiraIssues(c *gin.Context) {
ctx := internalhandler.NewContext(c)
defer func() { internalhandler.JSONResponse(c, ctx) }()
Expand Down
4 changes: 4 additions & 0 deletions pkg/microservice/aslan/core/system/handler/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,10 @@ func (*Router) Inject(router *gin.RouterGroup) {
pm.PATCH("/:id", UpdateProjectManagement)
pm.DELETE("/:id", DeleteProjectManagement)
pm.GET("/:id/jira/project", ListJiraProjects)
pm.GET("/:id/jira/board", ListJiraBoards)
pm.GET("/:id/jira/board/:boardID/sprint", ListJiraSprints)
pm.GET("/:id/jira/sprint/:sprintID", GetJiraSprint)
pm.GET("/:id/jira/sprint/:sprintID/issue", ListJiraSprintIssues)
pm.GET("/:id/jira/issue", SearchJiraIssues)
pm.GET("/:id/jira/issue/jql", SearchJiraProjectIssuesWithJQL)
pm.GET("/:id/jira/type", GetJiraTypes)
Expand Down
Loading

0 comments on commit fd9cc44

Please sign in to comment.