This is an automated email from the ASF dual-hosted git repository.
warren pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/main by this push:
new d2815d5ff feat: add sonarqube scope and fix some models (#4369)
d2815d5ff is described below
commit d2815d5ffe4168d0080237f3c0f5ebc2240032b6
Author: abeizn <[email protected]>
AuthorDate: Thu Feb 9 18:54:36 2023 +0800
feat: add sonarqube scope and fix some models (#4369)
* feat: add sonarqube scope and fix some models
* feat: add sonarqube scope and fix some models
* feat: add sonarqube scope and fix some models
---
backend/plugins/sonarqube/api/scope.go | 183 +++++++++++++++++++++
backend/plugins/sonarqube/api/swagger.go | 2 +-
backend/plugins/sonarqube/impl/impl.go | 11 +-
.../migrationscripts/20230111_add_init_tables.go | 2 +-
.../archived/sonarqube_file_metrics.go | 44 ++---
.../migrationscripts/archived/sonarqube_hotspot.go | 30 ++--
.../migrationscripts/archived/sonarqube_issue.go | 46 +++---
.../archived/sonarqube_issue_code_block.go | 14 +-
.../migrationscripts/archived/sonarqube_project.go | 5 +-
.../sonarqube/models/sonarqube_file_metrics.go | 44 ++---
.../plugins/sonarqube/models/sonarqube_hotspot.go | 30 ++--
.../plugins/sonarqube/models/sonarqube_issue.go | 46 +++---
.../sonarqube/models/sonarqube_issue_code_block.go | 14 +-
.../plugins/sonarqube/models/sonarqube_project.go | 4 +-
14 files changed, 334 insertions(+), 141 deletions(-)
diff --git a/backend/plugins/sonarqube/api/scope.go
b/backend/plugins/sonarqube/api/scope.go
new file mode 100644
index 000000000..d8ed6336b
--- /dev/null
+++ b/backend/plugins/sonarqube/api/scope.go
@@ -0,0 +1,183 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package api
+
+import (
+ "net/http"
+ "strconv"
+
+ "github.com/apache/incubator-devlake/core/dal"
+ "github.com/apache/incubator-devlake/core/errors"
+ "github.com/apache/incubator-devlake/core/plugin"
+ "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
+ "github.com/apache/incubator-devlake/plugins/sonarqube/models"
+
+ "github.com/mitchellh/mapstructure"
+)
+
+type req struct {
+ Data []*models.SonarqubeProject `json:"data"`
+}
+
+// PutScope create or update sonarqube project
+// @Summary create or update sonarqube project
+// @Description Create or update sonarqube project
+// @Tags plugins/sonarqube
+// @Accept application/json
+// @Param connectionId path int false "connection ID"
+// @Param scope body req true "json"
+// @Success 200 {object} []models.SonarqubeProject
+// @Failure 400 {object} shared.ApiBody "Bad Request"
+// @Failure 500 {object} shared.ApiBody "Internal Error"
+// @Router /plugins/sonarqube/connections/{connectionId}/scopes [PUT]
+func PutScope(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput,
errors.Error) {
+ connectionId, _ := extractParam(input.Params)
+ if connectionId == 0 {
+ return nil, errors.BadInput.New("invalid connectionId")
+ }
+ var projects req
+ err := errors.Convert(mapstructure.Decode(input.Body, &projects))
+ if err != nil {
+ return nil, errors.BadInput.Wrap(err, "decoding Sonarqube
project error")
+ }
+ keeper := make(map[string]struct{})
+ for _, project := range projects.Data {
+ if _, ok := keeper[project.ProjectKey]; ok {
+ return nil, errors.BadInput.New("duplicated item")
+ } else {
+ keeper[project.ProjectKey] = struct{}{}
+ }
+ project.ConnectionId = connectionId
+ err = verifyProject(project)
+ if err != nil {
+ return nil, err
+ }
+ }
+ err = basicRes.GetDal().CreateOrUpdate(projects.Data)
+ if err != nil {
+ return nil, errors.Default.Wrap(err, "error on saving
SonarqubeProject")
+ }
+ return &plugin.ApiResourceOutput{Body: projects.Data, Status:
http.StatusOK}, nil
+}
+
+// UpdateScope patch to sonarqube project
+// @Summary patch to sonarqube project
+// @Description patch to sonarqube project
+// @Tags plugins/sonarqube
+// @Accept application/json
+// @Param connectionId path int false "connection ID"
+// @Param projectKey path string false "project Key"
+// @Param scope body models.SonarqubeProject true "json"
+// @Success 200 {object} models.SonarqubeProject
+// @Failure 400 {object} shared.ApiBody "Bad Request"
+// @Failure 500 {object} shared.ApiBody "Internal Error"
+// @Router /plugins/sonarqube/connections/{connectionId}/scopes/{projectKey}
[PATCH]
+func UpdateScope(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput,
errors.Error) {
+ connectionId, projectKey := extractParam(input.Params)
+ if connectionId*uint64(len(projectKey)) == 0 {
+ return nil, errors.BadInput.New("invalid connectionId or
projectKey")
+ }
+ var project models.SonarqubeProject
+ err := basicRes.GetDal().First(&project, dal.Where("connection_id = ?
AND project_key = ?", connectionId, projectKey))
+ if err != nil {
+ return nil, errors.Default.Wrap(err, "getting SonarqubeProject
error")
+ }
+ err = api.DecodeMapStruct(input.Body, &project)
+ if err != nil {
+ return nil, errors.Default.Wrap(err, "patch sonarqube project
error")
+ }
+ err = verifyProject(&project)
+ if err != nil {
+ return nil, err
+ }
+ err = basicRes.GetDal().Update(project)
+ if err != nil {
+ return nil, errors.Default.Wrap(err, "error on saving
SonarqubeProject")
+ }
+ return &plugin.ApiResourceOutput{Body: project, Status: http.StatusOK},
nil
+}
+
+// GetScopeList get Sonarqube projects
+// @Summary get Sonarqube projects
+// @Description get Sonarqube projects
+// @Tags plugins/sonarqube
+// @Param connectionId path int false "connection ID"
+// @Success 200 {object} []apiProject
+// @Failure 400 {object} shared.ApiBody "Bad Request"
+// @Failure 500 {object} shared.ApiBody "Internal Error"
+// @Router /plugins/sonarqube/connections/{connectionId}/scopes/ [GET]
+func GetScopeList(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput,
errors.Error) {
+ var projects []models.SonarqubeProject
+ connectionId, _ := extractParam(input.Params)
+ if connectionId == 0 {
+ return nil, errors.BadInput.New("invalid path params")
+ }
+ limit, offset := api.GetLimitOffset(input.Query, "pageSize", "page")
+ err := basicRes.GetDal().All(&projects, dal.Where("connection_id = ?",
connectionId), dal.Limit(limit), dal.Offset(offset))
+ if err != nil {
+ return nil, err
+ }
+
+ return &plugin.ApiResourceOutput{Body: projects, Status:
http.StatusOK}, nil
+}
+
+// GetScope get one Sonarqube project
+// @Summary get one Sonarqube project
+// @Description get one Sonarqube project
+// @Tags plugins/sonarqube
+// @Param connectionId path int false "connection ID"
+// @Param projectKey path string false "project key"
+// @Param pageSize query int false "page size, default 50"
+// @Param page query int false "page size, default 1"
+// @Success 200 {object} apiProject
+// @Failure 400 {object} shared.ApiBody "Bad Request"
+// @Failure 500 {object} shared.ApiBody "Internal Error"
+// @Router /plugins/sonarqube/connections/{connectionId}/scopes/{projectKey}
[GET]
+func GetScope(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput,
errors.Error) {
+ var project models.SonarqubeProject
+ connectionId, projectKey := extractParam(input.Params)
+ if connectionId*uint64(len(projectKey)) == 0 {
+ return nil, errors.BadInput.New("invalid path params")
+ }
+ db := basicRes.GetDal()
+ err := db.First(&project, dal.Where("connection_id = ? AND project_key
= ?", connectionId, projectKey))
+ if db.IsErrorNotFound(err) {
+ return nil, errors.NotFound.New("record not found")
+ }
+ if err != nil {
+ return nil, err
+ }
+
+ return &plugin.ApiResourceOutput{Body: project, Status: http.StatusOK},
nil
+}
+
+func extractParam(params map[string]string) (uint64, string) {
+ connectionId, _ := strconv.ParseUint(params["connectionId"], 10, 64)
+ projectKey := params["projectKey"]
+ return connectionId, projectKey
+}
+
+func verifyProject(project *models.SonarqubeProject) errors.Error {
+ if project.ConnectionId == 0 {
+ return errors.BadInput.New("invalid connectionId")
+ }
+ if len(project.ProjectKey) == 0 {
+ return errors.BadInput.New("invalid project key")
+ }
+ return nil
+}
diff --git a/backend/plugins/sonarqube/api/swagger.go
b/backend/plugins/sonarqube/api/swagger.go
index 4164e0fbd..74c89ee80 100644
--- a/backend/plugins/sonarqube/api/swagger.go
+++ b/backend/plugins/sonarqube/api/swagger.go
@@ -32,7 +32,7 @@ type SonarqubeBlueprintSetting []struct {
ConnectionID int `json:"connectionId"`
Scope []struct {
Options struct {
- Id int `json:"id"`
+ ProjectKey string `json:"projectKey"`
} `json:"options"`
Entities []string `json:"entities"`
} `json:"scopes"`
diff --git a/backend/plugins/sonarqube/impl/impl.go
b/backend/plugins/sonarqube/impl/impl.go
index 38358d462..d96b843be 100644
--- a/backend/plugins/sonarqube/impl/impl.go
+++ b/backend/plugins/sonarqube/impl/impl.go
@@ -19,9 +19,10 @@ package impl
import (
"fmt"
- "github.com/apache/incubator-devlake/core/dal"
"time"
+ "github.com/apache/incubator-devlake/core/dal"
+
"github.com/apache/incubator-devlake/core/context"
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/plugin"
@@ -161,6 +162,14 @@ func (p Sonarqube) ApiResources()
map[string]map[string]plugin.ApiResourceHandle
"PATCH": api.PatchConnection,
"DELETE": api.DeleteConnection,
},
+ "connections/:connectionId/scopes/:projectKey": {
+ "GET": api.GetScope,
+ "PATCH": api.UpdateScope,
+ },
+ "connections/:connectionId/scopes": {
+ "GET": api.GetScopeList,
+ "PUT": api.PutScope,
+ },
}
}
diff --git
a/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
b/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
index 3ed9ccda5..d61ee253a 100644
---
a/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
+++
b/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
@@ -40,7 +40,7 @@ func (*addInitTables) Up(basicRes context.BasicRes)
errors.Error {
}
func (*addInitTables) Version() uint64 {
- return 20230207220025
+ return 20230208220025
}
func (*addInitTables) Name() string {
diff --git
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
index 9d1ee07aa..ab779ef11 100644
---
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
+++
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
@@ -22,28 +22,28 @@ import (
)
type SonarqubeFileMetrics struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- FileMetricsKey string `json:"component_key"
gorm:"primaryKey"`
- ProjectKey string `json:"project" gorm:"index"`
- BatchID string `json:"batch_id"`
- FileName string `json:"file_name"`
- FilePath string `json:"file_path"`
- FileLanguage string `json:"file_language"`
- CodeSmells int `json:"code_smells"`
- SqaleIndex string `json:"sqale_index"`
- SqaleRating string `json:"sqale_rating"`
- Bugs int `json:"bugs"`
- ReliabilityRating string `json:"reliability_rating"`
- Vulnerabilities int `json:"vulnerabilities"`
- SecurityRating string `json:"security_rating"`
- SecurityHotspots int `json:"security_hotspots"`
- SecurityHotspotsReviewed float64 `json:"security_hotspots_reviewed"`
- SecurityReviewRating string `json:"security_review_rating"`
- Ncloc int `json:"ncloc"`
- Coverage float64 `json:"coverage"`
- LinesToCover int `json:"lines_to_cover"`
- DuplicatedLinesDensity float64 `json:"duplicated_lines_density"`
- DuplicatedBlocks int `json:"duplicated_blocks"`
+ ConnectionId uint64 `gorm:"primaryKey"`
+ FileMetricsKey string `gorm:"primaryKey"`
+ ProjectKey string `gorm:"index"`
+ BatchID string
+ FileName string
+ FilePath string
+ FileLanguage string
+ CodeSmells int
+ SqaleIndex string
+ SqaleRating string
+ Bugs int
+ ReliabilityRating string
+ Vulnerabilities int
+ SecurityRating string
+ SecurityHotspots int
+ SecurityHotspotsReviewed float64
+ SecurityReviewRating string
+ Ncloc int
+ Coverage float64
+ LinesToCover int
+ DuplicatedLinesDensity float64
+ DuplicatedBlocks int
archived.NoPKModel
}
diff --git
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
index 89ea9efe3..8ac27b491 100644
---
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
+++
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
@@ -23,21 +23,21 @@ import (
)
type SonarqubeHotspot struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- HotspotKey string `json:"key" gorm:"primaryKey"`
- RuleKey string `json:"ruleKey"`
- Component string `json:"component"
gorm:"index"`
- ProjectKey string `json:"project" gorm:"index"`
- BatchId string `json:"batchId"
gorm:"type:varchar(100)"` // from collection time
- Line int `json:"line"`
- Status string `json:"status"`
- Message string `json:"message"`
- Author string `json:"author"`
- Assignee string `json:"assignee"`
- SecurityCategory string `json:"securityCategory"`
- VulnerabilityProbability string
`json:"vulnerabilityProbability"`
- CreationDate *api.Iso8601Time `json:"creationDate"`
- UpdateDate *api.Iso8601Time `json:"updateDate"`
+ ConnectionId uint64 `gorm:"primaryKey"`
+ HotspotKey string `gorm:"primaryKey"`
+ RuleKey string
+ Component string `gorm:"index"`
+ ProjectKey string `gorm:"index"`
+ BatchId string `gorm:"type:varchar(100)"` // from
collection time
+ Line int
+ Status string
+ Message string
+ Author string
+ Assignee string
+ SecurityCategory string
+ VulnerabilityProbability string
+ CreationDate *api.Iso8601Time
+ UpdateDate *api.Iso8601Time
archived.NoPKModel
}
diff --git
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue.go
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue.go
index a12e1a434..f4fc781b0 100644
---
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue.go
+++
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue.go
@@ -23,29 +23,29 @@ import (
)
type SonarqubeIssue struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- IssueKey string `json:"key" gorm:"primaryKey"`
- Rule string `json:"rule" gorm:"type:varchar(255)"`
- Severity string `json:"severity" gorm:"type:varchar(255)"`
- Component string `json:"component"
gorm:"type:varchar(255)"`
- ProjectKey string `gorm:"index;type:varchar(255)"`
//domain project key
- BatchId string `json:"batchId" gorm:"type:varchar(100)"`
// from collection time
- Line int `json:"line"`
- Status string `json:"status"`
- Message string `json:"message"`
- Debt string `json:"debt"`
- Effort string `json:"effort"`
- Author string `json:"author"`
- Hash string `json:"hash"`
- Tags string `json:"tags"`
- Type string `json:"type"`
- Scope string `json:"scope"`
- StartLine int `json:"startLine"`
- EndLine int `json:"endLine"`
- StartOffset int `json:"startOffset"`
- EndOffset int `json:"endOffset"`
- CreationDate *api.Iso8601Time `json:"creationDate"`
- UpdateDate *api.Iso8601Time `json:"updateDate"`
+ ConnectionId uint64 `gorm:"primaryKey"`
+ IssueKey string `gorm:"primaryKey"`
+ Rule string `gorm:"type:varchar(255)"`
+ Severity string `gorm:"type:varchar(255)"`
+ Component string `gorm:"type:varchar(255)"`
+ ProjectKey string `gorm:"index;type:varchar(255)"` //domain project
key
+ BatchId string `gorm:"type:varchar(100)"` // from collection
time
+ Line int
+ Status string
+ Message string
+ Debt string
+ Effort string
+ Author string
+ Hash string
+ Tags string
+ Type string
+ Scope string
+ StartLine int
+ EndLine int
+ StartOffset int
+ EndOffset int
+ CreationDate *api.Iso8601Time
+ UpdateDate *api.Iso8601Time
archived.NoPKModel
}
diff --git
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue_code_block.go
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue_code_block.go
index d94d911ea..0cbedc14b 100644
---
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue_code_block.go
+++
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_issue_code_block.go
@@ -22,13 +22,13 @@ import
"github.com/apache/incubator-devlake/core/models/migrationscripts/archive
type SonarqubeIssueCodeBlock struct {
ConnectionId uint64 `gorm:"primaryKey"`
Id string `gorm:"primaryKey"`
- IssueKey string `json:"key" gorm:"index"`
- Component string `json:"component" gorm:"index"`
- StartLine int `json:"startLine" `
- EndLine int `json:"endLine" `
- StartOffset int `json:"startOffset" `
- EndOffset int `json:"endOffset" `
- Msg string `json:"msg" `
+ IssueKey string `gorm:"index"`
+ Component string `gorm:"index"`
+ StartLine int
+ EndLine int
+ StartOffset int
+ EndOffset int
+ Msg string
archived.NoPKModel
}
diff --git
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_project.go
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_project.go
index 210619981..030e78d80 100644
---
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_project.go
+++
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_project.go
@@ -18,13 +18,14 @@ limitations under the License.
package archived
import (
-
"github.com/apache/incubator-devlake/core/models/migrationscripts/archived"
"time"
+
+
"github.com/apache/incubator-devlake/core/models/migrationscripts/archived"
)
type SonarqubeProject struct {
ConnectionId uint64 `gorm:"primaryKey"`
- ProjectKey string `json:"key"
gorm:"type:varchar(64);primaryKey"`
+ ProjectKey string `json:"projectKey"
gorm:"type:varchar(64);primaryKey"`
Name string `json:"name" gorm:"type:varchar(255)"`
Qualifier string `json:"qualifier" gorm:"type:varchar(255)"`
Visibility string `json:"visibility" gorm:"type:varchar(64)"`
diff --git a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
index 10b0292c0..4050f4916 100644
--- a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
+++ b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
@@ -22,28 +22,28 @@ import (
)
type SonarqubeFileMetrics struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- FileMetricsKey string `json:"component_key"
gorm:"primaryKey"`
- ProjectKey string `json:"project" gorm:"index"`
- BatchID string `json:"batch_id"`
- FileName string `json:"file_name"`
- FilePath string `json:"file_path"`
- FileLanguage string `json:"file_language"`
- CodeSmells int `json:"code_smells"`
- SqaleIndex string `json:"sqale_index"`
- SqaleRating string `json:"sqale_rating"`
- Bugs int `json:"bugs"`
- ReliabilityRating string `json:"reliability_rating"`
- Vulnerabilities int `json:"vulnerabilities"`
- SecurityRating string `json:"security_rating"`
- SecurityHotspots int `json:"security_hotspots"`
- SecurityHotspotsReviewed float64 `json:"security_hotspots_reviewed"`
- SecurityReviewRating string `json:"security_review_rating"`
- Ncloc int `json:"ncloc"`
- Coverage float64 `json:"coverage"`
- LinesToCover int `json:"lines_to_cover"`
- DuplicatedLinesDensity float64 `json:"duplicated_lines_density"`
- DuplicatedBlocks int `json:"duplicated_blocks"`
+ ConnectionId uint64 `gorm:"primaryKey"`
+ FileMetricsKey string `gorm:"primaryKey"`
+ ProjectKey string `gorm:"index"`
+ BatchID string
+ FileName string
+ FilePath string
+ FileLanguage string
+ CodeSmells int
+ SqaleIndex string
+ SqaleRating string
+ Bugs int
+ ReliabilityRating string
+ Vulnerabilities int
+ SecurityRating string
+ SecurityHotspots int
+ SecurityHotspotsReviewed float64
+ SecurityReviewRating string
+ Ncloc int
+ Coverage float64
+ LinesToCover int
+ DuplicatedLinesDensity float64
+ DuplicatedBlocks int
common.NoPKModel
}
diff --git a/backend/plugins/sonarqube/models/sonarqube_hotspot.go
b/backend/plugins/sonarqube/models/sonarqube_hotspot.go
index e72acf190..8b032051c 100644
--- a/backend/plugins/sonarqube/models/sonarqube_hotspot.go
+++ b/backend/plugins/sonarqube/models/sonarqube_hotspot.go
@@ -23,21 +23,21 @@ import (
)
type SonarqubeHotspot struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- HotspotKey string `json:"key" gorm:"primaryKey"`
- RuleKey string `json:"ruleKey"`
- Component string `json:"component"
gorm:"index"`
- ProjectKey string `json:"project" gorm:"index"`
- BatchId string `json:"batchId"
gorm:"type:varchar(100)"` // from collection time
- Line int `json:"line"`
- Status string `json:"status"`
- Message string `json:"message"`
- Author string `json:"author"`
- Assignee string `json:"assignee"`
- SecurityCategory string `json:"securityCategory"`
- VulnerabilityProbability string
`json:"vulnerabilityProbability"`
- CreationDate *api.Iso8601Time `json:"creationDate"`
- UpdateDate *api.Iso8601Time `json:"updateDate"`
+ ConnectionId uint64 `gorm:"primaryKey"`
+ HotspotKey string `gorm:"primaryKey"`
+ RuleKey string
+ Component string `gorm:"index"`
+ ProjectKey string `gorm:"index"`
+ BatchId string `gorm:"type:varchar(100)"` // from
collection time
+ Line int
+ Status string
+ Message string
+ Author string
+ Assignee string
+ SecurityCategory string
+ VulnerabilityProbability string
+ CreationDate *api.Iso8601Time
+ UpdateDate *api.Iso8601Time
common.NoPKModel
}
diff --git a/backend/plugins/sonarqube/models/sonarqube_issue.go
b/backend/plugins/sonarqube/models/sonarqube_issue.go
index 91233aa03..8d39561a4 100644
--- a/backend/plugins/sonarqube/models/sonarqube_issue.go
+++ b/backend/plugins/sonarqube/models/sonarqube_issue.go
@@ -23,29 +23,29 @@ import (
)
type SonarqubeIssue struct {
- ConnectionId uint64 `gorm:"primaryKey"`
- IssueKey string `json:"key" gorm:"primaryKey"`
- Rule string `json:"rule" gorm:"type:varchar(255)"`
- Severity string `json:"severity" gorm:"type:varchar(255)"`
- Component string `json:"component"
gorm:"type:varchar(255)"`
- ProjectKey string `gorm:"index;type:varchar(255)"`
//domain project key
- BatchId string `json:"batchId" gorm:"type:varchar(100)"`
// from collection time
- Line int `json:"line"`
- Status string `json:"status"`
- Message string `json:"message"`
- Debt string `json:"debt"`
- Effort string `json:"effort"`
- Author string `json:"author"`
- Hash string `json:"hash"`
- Tags string `json:"tags"`
- Type string `json:"type"`
- Scope string `json:"scope"`
- StartLine int `json:"startLine"`
- EndLine int `json:"endLine"`
- StartOffset int `json:"startOffset"`
- EndOffset int `json:"endOffset"`
- CreationDate *api.Iso8601Time `json:"creationDate"`
- UpdateDate *api.Iso8601Time `json:"updateDate"`
+ ConnectionId uint64 `gorm:"primaryKey"`
+ IssueKey string `gorm:"primaryKey"`
+ Rule string `gorm:"type:varchar(255)"`
+ Severity string `gorm:"type:varchar(255)"`
+ Component string `gorm:"type:varchar(255)"`
+ ProjectKey string `gorm:"index;type:varchar(255)"` //domain project
key
+ BatchId string `gorm:"type:varchar(100)"` // from collection
time
+ Line int
+ Status string
+ Message string
+ Debt string
+ Effort string
+ Author string
+ Hash string
+ Tags string
+ Type string
+ Scope string
+ StartLine int
+ EndLine int
+ StartOffset int
+ EndOffset int
+ CreationDate *api.Iso8601Time
+ UpdateDate *api.Iso8601Time
common.NoPKModel
}
diff --git a/backend/plugins/sonarqube/models/sonarqube_issue_code_block.go
b/backend/plugins/sonarqube/models/sonarqube_issue_code_block.go
index 8e4e7ea86..31236a16b 100644
--- a/backend/plugins/sonarqube/models/sonarqube_issue_code_block.go
+++ b/backend/plugins/sonarqube/models/sonarqube_issue_code_block.go
@@ -22,13 +22,13 @@ import
"github.com/apache/incubator-devlake/core/models/common"
type SonarqubeIssueCodeBlock struct {
ConnectionId uint64 `gorm:"primaryKey"`
Id string `gorm:"primaryKey"`
- IssueKey string `json:"key" gorm:"index"`
- Component string `json:"component" gorm:"index"`
- StartLine int `json:"startLine" `
- EndLine int `json:"endLine" `
- StartOffset int `json:"startOffset" `
- EndOffset int `json:"endOffset" `
- Msg string `json:"msg" `
+ IssueKey string `gorm:"index"`
+ Component string `gorm:"index"`
+ StartLine int
+ EndLine int
+ StartOffset int
+ EndOffset int
+ Msg string
common.NoPKModel
}
diff --git a/backend/plugins/sonarqube/models/sonarqube_project.go
b/backend/plugins/sonarqube/models/sonarqube_project.go
index 2a817c5a8..0c44075dd 100644
--- a/backend/plugins/sonarqube/models/sonarqube_project.go
+++ b/backend/plugins/sonarqube/models/sonarqube_project.go
@@ -23,9 +23,9 @@ import (
)
type SonarqubeProject struct {
- common.NoPKModel
+ common.NoPKModel `json:"-" mapstructure:"-"`
ConnectionId uint64 `gorm:"primaryKey"`
- ProjectKey string `json:"key"
gorm:"type:varchar(64);primaryKey"`
+ ProjectKey string `json:"projectKey"
gorm:"type:varchar(64);primaryKey"`
Name string `json:"name" gorm:"type:varchar(255)"`
Qualifier string `json:"qualifier"
gorm:"type:varchar(255)"`
Visibility string `json:"visibility"
gorm:"type:varchar(64)"`