Skip to content

Commit bec46f1

Browse files
committed
v0.5.13
1 parent 4e21c12 commit bec46f1

26 files changed

+520
-745
lines changed

adapter/database/workspace.go

+5-27
Original file line numberDiff line numberDiff line change
@@ -166,38 +166,16 @@ func (repo *WorkspaceRepository) GetByParentID(parentID int64, tx *sqlx.Tx) ([]*
166166
}
167167

168168
// Get returns workspace.
169-
func (repo *WorkspaceRepository) Get(filter *entity.WorkspaceFilter) ([]*entity.Workspace, error) {
170-
var (
171-
dto []*workspaceDTO
172-
attrs = make([]string, 0, 2)
173-
mapper = make(map[string]interface{}, 2)
174-
where string
175-
)
176-
177-
if filter != nil {
178-
if filter.ParentID != nil {
179-
attrs = append(attrs, "parent_id = :parent_id")
180-
mapper["parent_id"] = *filter.ParentID
181-
}
182-
if len(filter.Title) > 0 {
183-
attrs = append(attrs, "title = :title")
184-
mapper["title"] = filter.Title
185-
}
186-
if len(attrs) > 0 {
187-
where = "WHERE " + strings.Join(attrs, " AND ")
188-
}
189-
}
169+
func (repo *WorkspaceRepository) Get() ([]*entity.Workspace, error) {
170+
var dto []*workspaceDTO
190171

191-
query, args, err := repo.db.Connector.BindNamed(fmt.Sprintf(`
172+
err := repo.db.Connector.SelectContext(repo.ctx, &dto, fmt.Sprintf(`
192173
SELECT %s
193-
FROM %s %s
194-
ORDER BY type, sort, created_at;`, workspaceTableFields, workspaceTable, where), mapper)
174+
FROM %s
175+
ORDER BY type, sort, created_at;`, workspaceTableFields, workspaceTable))
195176
if err != nil {
196177
return nil, err
197178
}
198-
if err := repo.db.Connector.SelectContext(repo.ctx, &dto, query, args...); err != nil {
199-
return nil, err
200-
}
201179

202180
resp, err := structs.MapWithError(dto, func(w *workspaceDTO) (*entity.Workspace, error) { return w.entity() })
203181
if err != nil {

adapter/grpc/client.go

+4-8
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,9 @@ func (c *Client) getDialOptions() ([]grpc.DialOption, error) {
120120
}
121121

122122
func (c *Client) loadTLSCredentials() (credentials.TransportCredentials, error) {
123-
var pool *x509.CertPool
124-
125-
if len(c.opts.rootCertificate) != 0 {
126-
pool = x509.NewCertPool()
127-
if !pool.AppendCertsFromPEM([]byte(c.opts.rootCertificate)) {
128-
return nil, errors.New("failed to add server CA's certificate")
129-
}
123+
pool := x509.NewCertPool()
124+
if !pool.AppendCertsFromPEM([]byte(c.opts.rootCertificate)) {
125+
return nil, errors.New("failed to add server CA's certificate")
130126
}
131127

132128
// nolint:gosec
@@ -135,7 +131,7 @@ func (c *Client) loadTLSCredentials() (credentials.TransportCredentials, error)
135131
InsecureSkipVerify: c.opts.insecureSkipVerify,
136132
}
137133

138-
if len(c.opts.clientCertificate) != 0 && len(c.opts.clientKey) != 0 {
134+
if c.opts.clientCertificate != "" && c.opts.clientKey != "" {
139135
certificates, err := tls.X509KeyPair([]byte(c.opts.clientCertificate), []byte(c.opts.clientKey))
140136
if err != nil {
141137
return nil, err

adapter/grpc/proto.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ func (c *Client) LoadFromProtobuf() ([]*entity.Service, []*entity.ProtobufError,
3535

3636
var (
3737
protoWarn []*entity.ProtobufError
38+
protoErr *entity.ProtobufError
3839
)
3940

4041
warningReporter := func(err protoparse.ErrorWithPos) {
@@ -48,12 +49,13 @@ func (c *Client) LoadFromProtobuf() ([]*entity.Service, []*entity.ProtobufError,
4849
}
4950

5051
errorReporter := func(err protoparse.ErrorWithPos) error {
51-
return &entity.ProtobufError{
52+
protoErr = &entity.ProtobufError{
5253
Code: uint32(status.Code(err)),
5354
CodeDescription: status.Code(err).String(),
5455
Pos: err.GetPosition(),
5556
Err: err.Unwrap(),
5657
}
58+
return err
5759
}
5860

5961
parser := protoparse.Parser{
@@ -65,11 +67,10 @@ func (c *Client) LoadFromProtobuf() ([]*entity.Service, []*entity.ProtobufError,
6567
services := make([]*entity.Service, 0, len(c.protoPath))
6668

6769
for _, p := range c.protoPath {
68-
structs.ForEach(c.importPath, func(imp string) { p = strings.Replace(p, imp, "", 1) })
69-
70+
structs.ForEach(c.importPath, func(ip string) { p = strings.Replace(p, ip, "", -1) })
7071
fd, err := parser.ParseFiles(p)
7172
if err != nil {
72-
return nil, nil, &entity.ProtobufError{Err: err}
73+
return nil, nil, protoErr
7374
}
7475
if len(fd) != 1 {
7576
return nil, nil, &entity.ProtobufError{Err: errors.New("wrong parse result")}
@@ -217,9 +218,9 @@ func (c *Client) getFields(fd []*desc.FieldDescriptor, parent *desc.FieldDescrip
217218
fields = append(fields, mapField)
218219
} else {
219220
messageFields, fqn := c.getMessageFields(f.GetMessageType().GetFields(), fqn)
220-
//if len(messageFields) == 0 {
221-
// break
222-
//}
221+
if len(messageFields) == 0 {
222+
break
223+
}
223224

224225
loopFQN, protoFQN := getFQN(f, fqn)
225226
msgField := &entity.Field{

adapter/k8s/client.go

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ func (c *Client) PortForward(r *entity.K8SPortForward) (entity.PortForwardContro
7676
if _, err := ctrl.errOut.Write([]byte(err.Error())); err != nil {
7777
c.log.Error().Msgf("failed write to error stream: %v", err)
7878
}
79+
close(readyCh)
7980
}
8081

8182
if r.ErrHandler != nil {

business/entity/errors.go

-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,4 @@ var (
77
ErrK8SPodNotFound = errors.New("pod not found")
88
// ErrNotConnected error - server not connected.
99
ErrNotConnected = errors.New("not connected")
10-
// ErrFolderAlreadyExists - folder with the same name already exists
11-
ErrFolderAlreadyExists = errors.New("A folder with the same name already exists")
1210
)

business/entity/events.go

-4
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ const (
1010
CmdDeleteWorkspace GUICommand = "workspace.delete"
1111
CmdDuplicateWorkspace GUICommand = "workspace.duplicate"
1212
CmdExpandWorkspace GUICommand = "workspace.expand"
13-
CmdExportFileWorkspace GUICommand = "workspace.export.file"
14-
CmdImportFileWorkspace GUICommand = "workspace.import.file"
1513
CmdCreateServer GUICommand = "server.create"
1614
CmdUpdateServer GUICommand = "server.update"
1715
CmdUpdateServerRequest GUICommand = "server.update.request"
@@ -25,8 +23,6 @@ const (
2523
CmdCloseStream GUICommand = "query.close.stream"
2624
CmdQueryResponse GUICommand = "query.response"
2725
CmdDevTools GUICommand = "dev.tools.show"
28-
CmdMenuExportFile GUICommand = "menu.export.file"
29-
CmdMenuImportFile GUICommand = "menu.import.file"
3026
CmdMenuSettings GUICommand = "menu.settings"
3127
CmdMenuAbout GUICommand = "menu.about"
3228
CmdMessageInfo GUICommand = "message.info"

business/entity/workspace.go

-6
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,6 @@ type WorkspaceRequest struct {
6161
SelectedID int64 `json:"selected_id"`
6262
}
6363

64-
// WorkspaceFilter filter for workspace search.
65-
type WorkspaceFilter struct {
66-
Title string
67-
ParentID *int64
68-
}
69-
7064
// Model creates WorkspaceRequest from UI request.
7165
func (r *WorkspaceRequest) Model(payload map[string]interface{}) error {
7266
if payload == nil {

business/entity/workspace.query.go

+7-27
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,13 @@ func (r *QueryRequest) Model(req map[string]interface{}) error {
3434
}
3535

3636
if v, ok := req["id"]; ok && v != nil {
37-
if id, ok := v.(float64); !ok {
38-
return errors.New("id not a float")
39-
} else {
40-
r.ID = int64(id)
41-
}
37+
r.ID = int64(v.(float64))
4238
}
4339
if v, ok := req["server_id"]; ok && v != nil {
44-
if id, ok := v.(float64); !ok {
45-
return errors.New("server id not a float")
46-
} else {
47-
r.ID = int64(id)
48-
}
40+
r.ServerID = int64(v.(float64))
4941
}
5042
if v, ok := req["title"]; ok && v != nil {
51-
if r.Title, ok = v.(string); !ok {
52-
return errors.New("title not a string")
53-
}
43+
r.Title = v.(string)
5444
}
5545

5646
r.WorkspaceItemQuery = WorkspaceItemQuery{}
@@ -65,28 +55,18 @@ func (s *WorkspaceItemQuery) Model(req map[string]interface{}) error {
6555
}
6656

6757
if v, ok := req["service"]; ok && v != nil {
68-
if s.Service, ok = v.(string); !ok {
69-
return errors.New("service not a string")
70-
}
58+
s.Service = v.(string)
7159
}
7260
if v, ok := req["method"]; ok && v != nil {
73-
if s.Method, ok = v.(string); !ok {
74-
return errors.New("method not a string")
75-
}
61+
s.Method = v.(string)
7662
}
7763
if v, ok := req["request"]; ok && v != nil {
78-
r, ok := req["request"].(map[string]interface{})
79-
if !ok {
80-
return errors.New("request not a map[string]interface{}")
81-
}
8264
sq := &SavedQuery{}
83-
sq.Model(r)
65+
sq.Model(req["request"].(map[string]interface{}))
8466
s.Request = sq
8567
}
8668
if v, ok := req["description"]; ok && v != nil {
87-
if s.Description, ok = v.(string); !ok {
88-
return errors.New("description not a string")
89-
}
69+
s.Description = v.(string)
9070
}
9171

9272
return nil

business/usecase/grpc.forward.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ func (uc *GrpcUseCase) deletePortForward(srv entity.WorkspaceItemServer) {
5757
return
5858
}
5959

60-
if pf, ok := uc.forwardPorts[srv.K8SPortForward.LocalPort]; ok && pf.control != nil {
61-
uc.forwardPorts[srv.K8SPortForward.LocalPort].control.Close()
60+
if fp, ok := uc.forwardPorts[srv.K8SPortForward.LocalPort]; ok && fp.control != nil {
61+
fp.control.Close()
6262
}
6363

6464
delete(uc.forwardPorts, srv.K8SPortForward.LocalPort)

business/usecase/vars.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ var (
1111

1212
// WorkspaceRepo is the common interface implemented WorkspaceRepository methods.
1313
type WorkspaceRepo interface {
14-
Get(filter *entity.WorkspaceFilter) ([]*entity.Workspace, error)
14+
Get() ([]*entity.Workspace, error)
1515
GetByID(id int64) (*entity.Workspace, error)
1616
Create(in *entity.Workspace) (*entity.Workspace, error)
1717
Update(in *entity.Workspace) (*entity.Workspace, error)

business/usecase/workspace.folder.go

+7-51
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22
package usecase
33

44
import (
5-
"errors"
6-
75
"github.com/forest33/warthog/business/entity"
8-
"github.com/forest33/warthog/pkg/structs"
96
)
107

118
// CreateFolder creates folder on workspace.
@@ -15,17 +12,6 @@ func (uc *WorkspaceUseCase) CreateFolder(payload map[string]interface{}) *entity
1512
return entity.ErrorGUIResponse(err)
1613
}
1714

18-
check, err := uc.workspaceRepo.Get(&entity.WorkspaceFilter{
19-
Title: req.Title,
20-
ParentID: req.ParentID,
21-
})
22-
if err != nil {
23-
uc.log.Error().Msgf("failed to get folder: %v", err)
24-
return entity.ErrorGUIResponse(err)
25-
} else if check != nil {
26-
return uc.folderResponse(nil, req.TypeFilter, entity.ErrFolderAlreadyExists)
27-
}
28-
2915
folder, err := uc.workspaceRepo.Create(&entity.Workspace{
3016
ParentID: req.ParentID,
3117
Type: entity.WorkspaceTypeFolder,
@@ -36,7 +22,7 @@ func (uc *WorkspaceUseCase) CreateFolder(payload map[string]interface{}) *entity
3622
return entity.ErrorGUIResponse(err)
3723
}
3824

39-
return uc.folderResponse(folder, req.TypeFilter, nil)
25+
return uc.successFolderResponse(folder, req.TypeFilter)
4026
}
4127

4228
// UpdateFolder updates folder on workspace.
@@ -46,26 +32,6 @@ func (uc *WorkspaceUseCase) UpdateFolder(payload map[string]interface{}) *entity
4632
return entity.ErrorGUIResponse(err)
4733
}
4834

49-
existsFolder, err := uc.workspaceRepo.GetByID(req.ID)
50-
if err != nil {
51-
uc.log.Error().Msgf("failed to get folder: %v", err)
52-
return entity.ErrorGUIResponse(err)
53-
} else if existsFolder == nil {
54-
uc.log.Error().Msgf("failed to get folder: %v", err)
55-
return entity.ErrorGUIResponse(errors.New("failed to get folder"))
56-
}
57-
58-
check, err := uc.workspaceRepo.Get(&entity.WorkspaceFilter{
59-
Title: req.Title,
60-
ParentID: existsFolder.ParentID,
61-
})
62-
if err != nil {
63-
uc.log.Error().Msgf("failed to get folder: %v", err)
64-
return entity.ErrorGUIResponse(err)
65-
} else if check != nil {
66-
return uc.folderResponse(nil, req.TypeFilter, entity.ErrFolderAlreadyExists)
67-
}
68-
6935
folder, err := uc.workspaceRepo.Update(&entity.Workspace{
7036
ID: req.ID,
7137
ParentID: req.ParentID,
@@ -76,7 +42,7 @@ func (uc *WorkspaceUseCase) UpdateFolder(payload map[string]interface{}) *entity
7642
return entity.ErrorGUIResponse(err)
7743
}
7844

79-
return uc.folderResponse(folder, req.TypeFilter, nil)
45+
return uc.successFolderResponse(folder, req.TypeFilter)
8046
}
8147

8248
// DeleteFolder deletes folder on workspace.
@@ -96,28 +62,18 @@ func (uc *WorkspaceUseCase) DeleteFolder(payload map[string]interface{}) *entity
9662
}
9763
}
9864

99-
func (uc *WorkspaceUseCase) folderResponse(folder *entity.Workspace, typeFilter []entity.WorkspaceType, actionErr error) *entity.GUIResponse {
100-
w, err := uc.workspaceRepo.Get(nil)
65+
func (uc *WorkspaceUseCase) successFolderResponse(folder *entity.Workspace, typeFilter []entity.WorkspaceType) *entity.GUIResponse {
66+
w, err := uc.workspaceRepo.Get()
10167
if err != nil {
10268
uc.log.Error().Msgf("failed to get workspace: %v", err)
10369
return entity.ErrorGUIResponse(err)
10470
}
10571

106-
if actionErr == nil {
107-
return &entity.GUIResponse{
108-
Status: entity.GUIResponseStatusOK,
109-
Payload: &entity.FolderResponse{
110-
Folder: folder,
111-
Tree: entity.MakeWorkspaceTree(w, &entity.WorkspaceTreeFilter{Type: typeFilter}, folder.ID),
112-
},
113-
}
114-
}
115-
11672
return &entity.GUIResponse{
117-
Status: structs.If(actionErr == nil, entity.GUIResponseStatusOK, entity.GUIResponseStatusError),
73+
Status: entity.GUIResponseStatusOK,
11874
Payload: &entity.FolderResponse{
119-
Tree: entity.MakeWorkspaceTree(w, &entity.WorkspaceTreeFilter{Type: typeFilter}, 0),
75+
Folder: folder,
76+
Tree: entity.MakeWorkspaceTree(w, &entity.WorkspaceTreeFilter{Type: typeFilter}, folder.ID),
12077
},
121-
Error: entity.ErrorGUIResponse(actionErr).Error,
12278
}
12379
}

business/usecase/workspace.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (uc *WorkspaceUseCase) Get(payload map[string]interface{}) *entity.GUIRespo
4343
filter.Type = req.Type
4444
}
4545

46-
w, err := uc.workspaceRepo.Get(nil)
46+
w, err := uc.workspaceRepo.Get()
4747
if err != nil {
4848
uc.log.Error().Msgf("failed to get workspace: %v", err)
4949
return entity.ErrorGUIResponse(err)
@@ -100,7 +100,7 @@ func (uc *WorkspaceUseCase) Expand(payload map[string]interface{}) *entity.GUIRe
100100

101101
// GetState returns count of folders/servers/queries.
102102
func (uc *WorkspaceUseCase) GetState() (*entity.WorkspaceState, error) {
103-
workspaces, err := uc.workspaceRepo.Get(nil)
103+
workspaces, err := uc.workspaceRepo.Get()
104104
if err != nil {
105105
uc.log.Error().Msgf("failed to get workspace: %v", err)
106106
return nil, err
@@ -166,7 +166,7 @@ func (uc *WorkspaceUseCase) Duplicate(payload map[string]interface{}) *entity.GU
166166

167167
// GetBreadcrumb returns the breadcrumbs.
168168
func (uc *WorkspaceUseCase) GetBreadcrumb(id int64) ([]string, error) {
169-
w, err := uc.workspaceRepo.Get(nil)
169+
w, err := uc.workspaceRepo.Get()
170170
if err != nil {
171171
return nil, err
172172
}

business/usecase/workspace.query.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (uc *WorkspaceUseCase) UpdateQuery(payload map[string]interface{}) *entity.
3636
return entity.ErrorGUIResponse(err)
3737
}
3838

39-
w, err := uc.workspaceRepo.Get(nil)
39+
w, err := uc.workspaceRepo.Get()
4040
if err != nil {
4141
uc.log.Error().Msgf("failed to get workspace: %v", err)
4242
return entity.ErrorGUIResponse(err)

business/usecase/workspace.server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (uc *WorkspaceUseCase) UpdateServerRequest(payload map[string]interface{})
9696
}
9797

9898
func (uc *WorkspaceUseCase) successServerResponse(server *entity.Workspace) *entity.GUIResponse {
99-
w, err := uc.workspaceRepo.Get(nil)
99+
w, err := uc.workspaceRepo.Get()
100100
if err != nil {
101101
uc.log.Error().Msgf("failed to get workspace: %v", err)
102102
return entity.ErrorGUIResponse(err)

0 commit comments

Comments
 (0)