Skip to content

Commit afa69e8

Browse files
Artem TitovArtem Titov
authored andcommitted
Merge remote-tracking branch 'origin/main' into dev/storage
1 parent aa19956 commit afa69e8

File tree

10 files changed

+154
-86
lines changed

10 files changed

+154
-86
lines changed

common/connectors/storageconn/connector.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ func (s *Connector) Download(request *Request) *FileResponse {
2727
response := NewFileResponse(*request)
2828
if request.StorageFilename == "" {
2929
response.Error = fmt.Errorf("storage filename not specified")
30+
return response
3031
}
3132

3233
if err := os.MkdirAll(request.BaseFolder, 0775); err != nil {
@@ -99,10 +100,6 @@ func (s *Connector) Download(request *Request) *FileResponse {
99100

100101
func (s *Connector) Upload(request *Request) *Response {
101102
response := &Response{R: *request}
102-
if request.StorageFilename == "" {
103-
response.Error = fmt.Errorf("storage filename not specified")
104-
return response
105-
}
106103

107104
if request.File == nil {
108105
response.Error = fmt.Errorf("file for upload is not specified")
@@ -121,6 +118,8 @@ func (s *Connector) Upload(request *Request) *Response {
121118
r.SetFormData(map[string]string{
122119
"request": string(requestJSON),
123120
})
121+
122+
// request.StorageFilename can be empty
124123
r.SetFileReader("file", request.StorageFilename, request.File)
125124

126125
resp, err := r.Post(path)
@@ -153,7 +152,7 @@ func (s *Connector) Delete(request *Request) *Response {
153152
return response
154153
}
155154

156-
r.SetQueryParams(map[string]string{
155+
r.SetFormData(map[string]string{
157156
"request": string(requestJSON),
158157
})
159158

common/connectors/storageconn/structs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type Request struct {
3434
// For uploads, File should be specified
3535
File io.Reader `json:"-"`
3636

37-
// StorageFilename should be always specified
37+
// If StorageFilename is not specified, Storage tries to get the filename automatically
3838
StorageFilename string `json:"storageFilename"`
3939
}
4040

common/constants/resource/resource_type.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const (
1717
CheckerOutput
1818
Interactor
1919
// Will be increased
20+
// Don't forget to add a new type to storage/helpers.go
2021
)
2122

2223
type DataType int

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func main() {
3434
if ts.Config.Storage != nil {
3535
err := storage.SetupStorage(ts)
3636
if err != nil {
37-
logger.Panic(err.Error())
37+
logger.Panic("Can not setup storage, error: %v", err.Error())
3838
}
3939
} else {
4040
logger.Info("storage is not configured, skipping storage component")

storage/filesystem/filesystem.go

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"mime/multipart"
66
"os"
77
"path/filepath"
8+
"strconv"
89
"strings"
910
"testing_system/common/config"
1011
"testing_system/lib/logger"
@@ -22,17 +23,16 @@ func NewFilesystem(storageConfig *config.StorageConfig) IFilesystem {
2223
}
2324

2425
func (filesystem *Filesystem) generatePathFromID(prefix string, id string) string {
25-
var parts []string
26-
parts = append(parts, prefix)
26+
parts := []string{prefix}
2727
for i := 0; i < len(id); i += int(filesystem.BlockSize) {
2828
end := min(i+int(filesystem.BlockSize), len(id))
2929
parts = append(parts, id[i:end])
3030
}
3131
return filepath.Join(parts...)
3232
}
3333

34-
func (filesystem *Filesystem) SaveFile(c *gin.Context, prefix string, id string, filename string, file *multipart.FileHeader) error {
35-
fullPath, err := filesystem.GetFilePath(prefix, id, filename)
34+
func (filesystem *Filesystem) SaveFile(c *gin.Context, resourceInfo *ResourceInfo, file *multipart.FileHeader) error {
35+
fullPath, err := filesystem.GetFilePath(resourceInfo)
3636
if err != nil {
3737
return err
3838
}
@@ -49,8 +49,8 @@ func (filesystem *Filesystem) SaveFile(c *gin.Context, prefix string, id string,
4949
return c.SaveUploadedFile(file, fullPath)
5050
}
5151

52-
func (filesystem *Filesystem) RemoveFile(prefix string, id string, filename string) error {
53-
fullPath, err := filesystem.GetFilePath(prefix, id, filename)
52+
func (filesystem *Filesystem) RemoveFile(resourceInfo *ResourceInfo) error {
53+
fullPath, err := filesystem.GetFilePath(resourceInfo)
5454
if err != nil {
5555
return err
5656
}
@@ -82,14 +82,10 @@ func (filesystem *Filesystem) RemoveFile(prefix string, id string, filename stri
8282
return nil
8383
}
8484

85-
func (filesystem *Filesystem) GetFilePath(prefix, id, filename string) (string, error) {
86-
if prefix == "" || id == "" || filename == "" {
87-
return "", fmt.Errorf("prefix, id, and filename cannot be empty")
88-
}
89-
90-
cleanFilename := filepath.Base(filename)
85+
func (filesystem *Filesystem) GetFilePath(resourceInfo *ResourceInfo) (string, error) {
86+
cleanFilename := filepath.Base(resourceInfo.Filepath)
9187

92-
subpath := filesystem.generatePathFromID(prefix, id)
88+
subpath := filesystem.generatePathFromID(resourceInfo.DataType.String(), strconv.FormatUint(resourceInfo.ID, 10))
9389
fullPath := filepath.Join(filesystem.Basepath, subpath, cleanFilename)
9490

9591
absBasepath, err := filepath.Abs(filesystem.Basepath)

storage/filesystem/interface.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
)
88

99
type IFilesystem interface {
10-
SaveFile(c *gin.Context, prefix string, id string, filename string, file *multipart.FileHeader) error
11-
RemoveFile(prefix string, id string, filename string) error
12-
GetFilePath(prefix string, id string, filename string) (string, error)
10+
SaveFile(c *gin.Context, resourceInfo *ResourceInfo, file *multipart.FileHeader) error
11+
RemoveFile(resourceInfo *ResourceInfo) error
12+
GetFilePath(resourceInfo *ResourceInfo) (string, error)
1313
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package filesystem
2+
3+
import (
4+
"testing_system/common/connectors/storageconn"
5+
"testing_system/common/constants/resource"
6+
)
7+
8+
type ResourceInfo struct {
9+
Request *storageconn.Request
10+
ID uint64
11+
Filepath string
12+
DataType resource.DataType
13+
}

storage/handlers.go

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@ import (
44
"mime"
55
"net/http"
66
"path/filepath"
7-
"strconv"
87
"testing_system/lib/connector"
98
"testing_system/lib/logger"
109

1110
"github.com/gin-gonic/gin"
1211
)
1312

1413
func (s *Storage) HandleUpload(c *gin.Context) {
15-
info, err := getInfoFromRequest(c)
14+
resourceInfo, err := getInfoFromRequest(c)
1615
if err != nil {
1716
connector.RespErr(c, http.StatusBadRequest, "Invalid request parameters: %v", err)
1817
logger.Error("Invalid request parameters in HandleUpload: %v", err)
@@ -26,14 +25,11 @@ func (s *Storage) HandleUpload(c *gin.Context) {
2625
return
2726
}
2827

29-
dataTypeStr := info.dataType.String()
30-
idStr := strconv.FormatUint(info.id, 10)
31-
32-
err = s.filesystem.SaveFile(c, dataTypeStr, idStr, info.filepath, file)
28+
err = s.filesystem.SaveFile(c, resourceInfo, file)
3329
if err != nil {
3430
connector.RespErr(c, http.StatusInternalServerError, "Failed to save file: %v", err)
35-
logger.Error("Failed to save file: id=%s, dataType=%s, filepath=%s\n %v",
36-
idStr, dataTypeStr, info.filepath, err)
31+
logger.Error("Failed to save file: id=%d, dataType=%s, filepath=%s\n %v",
32+
resourceInfo.ID, resourceInfo.DataType.String(), resourceInfo.Filepath, err)
3733
return
3834
}
3935

@@ -42,27 +38,24 @@ func (s *Storage) HandleUpload(c *gin.Context) {
4238
Filename string `json:"filename"`
4339
}{
4440
Message: "File uploaded successfully",
45-
Filename: filepath.Base(file.Filename),
41+
Filename: filepath.Base(resourceInfo.Filepath),
4642
}
4743
connector.RespOK(c, &response)
4844
}
4945

5046
func (s *Storage) HandleRemove(c *gin.Context) {
51-
info, err := getInfoFromRequest(c)
47+
resourceInfo, err := getInfoFromRequest(c)
5248
if err != nil {
5349
connector.RespErr(c, http.StatusBadRequest, "Invalid request parameters: %v", err)
5450
logger.Error("Invalid request parameters in HandleRemove: %v", err)
5551
return
5652
}
5753

58-
dataTypeStr := info.dataType.String()
59-
idStr := strconv.FormatUint(info.id, 10)
60-
61-
err = s.filesystem.RemoveFile(dataTypeStr, idStr, info.filepath)
54+
err = s.filesystem.RemoveFile(resourceInfo)
6255
if err != nil {
6356
connector.RespErr(c, http.StatusInternalServerError, "Failed to remove file: %v", err)
64-
logger.Error("Failed to remove file: id=%s, dataType=%s, filepath=%s\n %v",
65-
idStr, dataTypeStr, info.filepath, err)
57+
logger.Error("Failed to remove file: id=%d, dataType=%s, filepath=%s\n %v",
58+
resourceInfo.ID, resourceInfo.DataType.String(), resourceInfo.Filepath, err)
6659
return
6760
}
6861

@@ -71,27 +64,24 @@ func (s *Storage) HandleRemove(c *gin.Context) {
7164
Filename string `json:"filename"`
7265
}{
7366
Message: "File removed successfully",
74-
Filename: info.filepath,
67+
Filename: filepath.Base(resourceInfo.Filepath),
7568
}
7669
connector.RespOK(c, &response)
7770
}
7871

7972
func (s *Storage) HandleGet(c *gin.Context) {
80-
info, err := getInfoFromRequest(c)
73+
resourceInfo, err := getInfoFromRequest(c)
8174
if err != nil {
8275
connector.RespErr(c, http.StatusBadRequest, "Invalid request parameters: %v", err)
8376
logger.Error("Invalid request parameters in HandleGet: %v", err)
8477
return
8578
}
8679

87-
dataTypeStr := info.dataType.String()
88-
idStr := strconv.FormatUint(info.id, 10)
89-
90-
fullPath, err := s.filesystem.GetFilePath(dataTypeStr, idStr, info.filepath)
80+
fullPath, err := s.filesystem.GetFilePath(resourceInfo)
9181
if err != nil {
9282
connector.RespErr(c, http.StatusInternalServerError, "Failed to get file: %v", err)
93-
logger.Error("Failed to get file: id=%s, dataType=%s, filePath=%s\n %v",
94-
idStr, dataTypeStr, info.filepath, err)
83+
logger.Error("Failed to get file: id=%d, dataType=%s, filePath=%s\n %v",
84+
resourceInfo.ID, resourceInfo.DataType.String(), resourceInfo.Filepath, err)
9585
return
9686
}
9787

0 commit comments

Comments
 (0)