func()

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
	}
}