Skip to content

Commit a3a9166

Browse files
authored
fix: modules and runs api (#1364)
1 parent 67593b8 commit a3a9166

File tree

11 files changed

+83
-17
lines changed

11 files changed

+83
-17
lines changed

api/openapispec/docs.go

+12
Original file line numberDiff line numberDiff line change
@@ -1602,6 +1602,18 @@ const docTemplate = `{
16021602
"name": "status",
16031603
"in": "query"
16041604
},
1605+
{
1606+
"type": "integer",
1607+
"description": "StackID to filter runs by. Default to all",
1608+
"name": "stackID",
1609+
"in": "query"
1610+
},
1611+
{
1612+
"type": "string",
1613+
"description": "Workspace to filter runs by. Default to all",
1614+
"name": "workspace",
1615+
"in": "query"
1616+
},
16051617
{
16061618
"type": "string",
16071619
"description": "StartTime to filter runs by. Default to all. Format: RFC3339",

api/openapispec/swagger.json

+12
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,18 @@
15911591
"name": "status",
15921592
"in": "query"
15931593
},
1594+
{
1595+
"type": "integer",
1596+
"description": "StackID to filter runs by. Default to all",
1597+
"name": "stackID",
1598+
"in": "query"
1599+
},
1600+
{
1601+
"type": "string",
1602+
"description": "Workspace to filter runs by. Default to all",
1603+
"name": "workspace",
1604+
"in": "query"
1605+
},
15941606
{
15951607
"type": "string",
15961608
"description": "StartTime to filter runs by. Default to all. Format: RFC3339",

api/openapispec/swagger.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -2456,6 +2456,14 @@ paths:
24562456
type: string
24572457
name: status
24582458
type: array
2459+
- description: StackID to filter runs by. Default to all
2460+
in: query
2461+
name: stackID
2462+
type: integer
2463+
- description: Workspace to filter runs by. Default to all
2464+
in: query
2465+
name: workspace
2466+
type: string
24592467
- description: 'StartTime to filter runs by. Default to all. Format: RFC3339'
24602468
in: query
24612469
name: startTime

pkg/cmd/server/database_access.go

-4
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ func (o *DatabaseAccessOptions) InstallDB() (*gorm.DB, error) {
4040
config.Net = "tcp"
4141
config.ParseTime = true
4242
config.InterpolateParams = true
43-
config.Params = map[string]string{
44-
"charset": "utf8",
45-
"loc": "Asia/Shanghai",
46-
}
4743
dsn := config.FormatDSN()
4844
// silence log output
4945
cfg := &gorm.Config{

pkg/infra/persistence/module_model.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (m *ModuleModel) ToEntity() (*entity.Module, error) {
3333
return nil, ErrModuleModelNil
3434
}
3535

36-
url, err := url.Parse(m.URL)
36+
address, err := url.Parse(m.URL)
3737
if err != nil {
3838
return nil, ErrFailedToGetModuleRemote
3939
}
@@ -45,7 +45,7 @@ func (m *ModuleModel) ToEntity() (*entity.Module, error) {
4545

4646
return &entity.Module{
4747
Name: m.Name,
48-
URL: url,
48+
URL: address,
4949
Description: m.Description,
5050
Owners: []string(m.Owners),
5151
Doc: doc,

pkg/infra/persistence/resource.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ func (r *resourceRepository) GetByKusionResourceURN(ctx context.Context, id stri
151151
}
152152

153153
// List retrieves all resources.
154-
// TODO: add `disablePagination` for resource list method.
155154
func (r *resourceRepository) List(ctx context.Context, filter *entity.ResourceFilter) (*entity.ResourceListResult, error) {
156155
var dataModel []ResourceModel
157156
resourceEntityList := make([]*entity.Resource, 0)
@@ -167,11 +166,17 @@ func (r *resourceRepository) List(ctx context.Context, filter *entity.ResourceFi
167166
searchResult.Model(dataModel).Count(&totalRows)
168167

169168
// Fetch paginated data from searchResult with offset and limit
170-
offset := (filter.Pagination.Page - 1) * filter.Pagination.PageSize
171-
result := searchResult.Offset(offset).Limit(filter.Pagination.PageSize).Find(&dataModel)
169+
var result *gorm.DB
170+
if filter.Pagination != nil {
171+
offset := (filter.Pagination.Page - 1) * filter.Pagination.PageSize
172+
result = searchResult.Offset(offset).Limit(filter.Pagination.PageSize).Find(&dataModel)
173+
} else {
174+
result = searchResult.Find(&dataModel)
175+
}
172176
if result.Error != nil {
173177
return nil, result.Error
174178
}
179+
175180
for _, resource := range dataModel {
176181
resourceEntity, err := resource.ToEntity()
177182
if err != nil {

pkg/server/handler/resource/handler.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func (h *Handler) GetResourceGraph() http.HandlerFunc {
108108
logger := logutil.GetLogger(ctx)
109109
logger.Info("Getting resource graph...")
110110
query := r.URL.Query()
111-
filter, err := h.resourceManager.BuildResourceFilter(ctx, &query)
111+
filter, err := h.resourceManager.BuildResourceGraphFilter(ctx, &query)
112112
if err != nil {
113113
render.Render(w, r, handler.FailureResponse(ctx, err))
114114
return

pkg/server/handler/resource/handler_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func TestResourceHandler(t *testing.T) {
116116
AddRow(1, "test-project"))
117117

118118
// Create a new HTTP request
119-
req, err := http.NewRequest("GET", "/resources", nil)
119+
req, err := http.NewRequest("GET", "/resources/graph?stackID=1", nil)
120120
assert.NoError(t, err)
121121

122122
rctx := chi.NewRouteContext()

pkg/server/handler/stack/run.go

+2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ func (h *Handler) GetRunResult() http.HandlerFunc {
8585
// @Param env query string false "Environment to filter runs by. Default to all"
8686
// @Param type query []string false "RunType to filter runs by. Default to all"
8787
// @Param status query []string false "RunStatus to filter runs by. Default to all"
88+
// @Param stackID query uint false "StackID to filter runs by. Default to all"
89+
// @Param workspace query string false "Workspace to filter runs by. Default to all"
8890
// @Param startTime query string false "StartTime to filter runs by. Default to all. Format: RFC3339"
8991
// @Param endTime query string false "EndTime to filter runs by. Default to all. Format: RFC3339"
9092
// @Param page query uint false "The current page to fetch. Default to 1"

pkg/server/manager/module/module_manager.go

+14-6
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,25 @@ func (m *ModuleManager) CreateModule(ctx context.Context, requestPayload request
2424
}
2525

2626
// Parse remote string of `URL` and `Doc`.
27-
url, err := url.Parse(requestPayload.URL)
27+
address, err := url.Parse(requestPayload.URL)
2828
if err != nil {
2929
return nil, err
3030
}
31-
createdEntity.URL = url
31+
if address.Scheme == "" {
32+
address.Scheme = "https"
33+
}
34+
createdEntity.URL = address
3235

33-
doc, err := url.Parse(requestPayload.URL)
34-
if err != nil {
35-
return nil, err
36+
if requestPayload.Doc != "" {
37+
doc, err := url.Parse(requestPayload.Doc)
38+
if err != nil {
39+
return nil, err
40+
}
41+
if doc.Scheme == "" {
42+
doc.Scheme = "https"
43+
}
44+
createdEntity.Doc = doc
3645
}
37-
createdEntity.Doc = doc
3846

3947
// Create module with repository
4048
err = m.moduleRepo.Create(ctx, &createdEntity)

pkg/server/manager/resource/util.go

+23
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package resource
22

33
import (
44
"context"
5+
"errors"
56
"net/url"
67
"strconv"
78

@@ -70,3 +71,25 @@ func (m *ResourceManager) BuildResourceFilter(ctx context.Context, query *url.Va
7071

7172
return &filter, nil
7273
}
74+
75+
func (m *ResourceManager) BuildResourceGraphFilter(ctx context.Context, query *url.Values) (*entity.ResourceFilter, error) {
76+
logger := logutil.GetLogger(ctx)
77+
logger.Info("Building resource graph filter...")
78+
79+
filter := entity.ResourceFilter{}
80+
81+
stackIDParam := query.Get("stackID")
82+
83+
if stackIDParam != "" {
84+
// if stack id is present, use stack id
85+
stackID, err := strconv.Atoi(stackIDParam)
86+
if err != nil {
87+
return nil, constant.ErrInvalidStackID
88+
}
89+
filter.StackID = uint(stackID)
90+
} else {
91+
return nil, errors.New("stackID is required")
92+
}
93+
94+
return &filter, nil
95+
}

0 commit comments

Comments
 (0)