in backend/plugins/customize/service/service.go [321:414]
func (s *Service) issueHandlerFactory(boardId string, incremental bool) func(record map[string]interface{}) errors.Error {
return func(record map[string]interface{}) errors.Error {
var err errors.Error
id, err := getStringField(record, "id", true)
if err != nil {
return err
}
// Handle labels
labels, err := getStringField(record, "labels", false)
if err != nil {
return err
}
if labels != "" {
var issueLabels []*ticket.IssueLabel
appearedLabels := make(map[string]struct{}) // record the labels that have appeared
for _, label := range strings.Split(labels, ",") {
label = strings.TrimSpace(label)
if label == "" {
continue
}
if _, appeared := appearedLabels[label]; !appeared {
issueLabel := &ticket.IssueLabel{
IssueId: id,
LabelName: label,
NoPKModel: common.NoPKModel{
RawDataOrigin: common.RawDataOrigin{
RawDataParams: boardId,
},
},
}
issueLabels = append(issueLabels, issueLabel)
appearedLabels[label] = struct{}{}
}
}
if len(issueLabels) > 0 {
err = s.dal.CreateOrUpdate(issueLabels)
if err != nil {
return err
}
}
}
delete(record, "labels") // Remove labels from record map as it's handled
// Handle creator and assignee accounts
rawDataParams, err := getStringField(record, "_raw_data_params", true)
if err != nil {
// This should ideally not happen as it's set in importCSV, but good to check
return err
}
// Handle creator
creatorName, err := getStringField(record, "creator_name", false)
if err != nil {
return err
}
creatorId, err := s.createOrUpdateAccount(creatorName, rawDataParams)
if err != nil {
return err
}
if creatorId != "" {
record["creator_id"] = creatorId
}
// Handle assignee
assigneeName, err := getStringField(record, "assignee_name", false)
if err != nil {
return err
}
assigneeId, err := s.createOrUpdateAccount(assigneeName, rawDataParams)
if err != nil {
return err
}
if assigneeId != "" {
record["assignee_id"] = assigneeId
}
// Handle issues
err = s.dal.CreateWithMap(&ticket.Issue{}, record)
if err != nil {
return err
}
// Handle board_issues
err = s.dal.CreateOrUpdate(&ticket.BoardIssue{
BoardId: boardId,
IssueId: id,
})
if err != nil {
return err
}
return nil
}
}