|
5 | 5 | "errors" |
6 | 6 | "fmt" |
7 | 7 | "net/http" |
8 | | - "strconv" |
9 | 8 | "testing_system/common/connectors/storageconn" |
10 | 9 | "testing_system/common/constants/resource" |
11 | 10 |
|
@@ -49,12 +48,12 @@ func parseRequest(c *gin.Context) (*storageconn.Request, error) { |
49 | 48 | var requestJSON string |
50 | 49 |
|
51 | 50 | switch c.Request.Method { |
52 | | - case http.MethodGet, http.MethodDelete: |
| 51 | + case http.MethodGet: |
53 | 52 | requestJSON = c.Query("request") |
54 | 53 | if requestJSON == "" { |
55 | 54 | return nil, errors.New("missing request parameter in query") |
56 | 55 | } |
57 | | - case http.MethodPost, http.MethodPut: |
| 56 | + case http.MethodPost, http.MethodPut, http.MethodDelete: |
58 | 57 | requestJSON = c.PostForm("request") |
59 | 58 | if requestJSON == "" { |
60 | 59 | return nil, errors.New("missing request parameter in form data") |
@@ -105,16 +104,52 @@ func getDataId(dataType resource.DataType, request *storageconn.Request) (uint64 |
105 | 104 | } |
106 | 105 |
|
107 | 106 | func getFilepath(request *storageconn.Request) (string, error) { |
108 | | - if request.StorageFilename == "" { |
109 | | - return "", errors.New("StorageFilename is not specified") |
110 | | - } |
111 | 107 | switch request.Resource { |
112 | | - case resource.TestInput, resource.TestOutput, resource.TestAnswer, resource.TestStderr: |
| 108 | + case resource.SourceCode: |
| 109 | + if request.StorageFilename == "" { |
| 110 | + return "", errors.New("StorageFilename should be specified for SourceCode") |
| 111 | + } |
| 112 | + return fmt.Sprintf("source/%s", request.StorageFilename), nil |
| 113 | + case resource.CompiledBinary: |
| 114 | + return "solution", nil |
| 115 | + case resource.CompileOutput: |
| 116 | + return "compile.out", nil |
| 117 | + case resource.TestInput: |
| 118 | + if request.TestID == 0 { |
| 119 | + return "", errors.New("TestID is not specified for TestInput") |
| 120 | + } |
| 121 | + return fmt.Sprintf("%02d", request.TestID), nil |
| 122 | + case resource.TestAnswer: |
| 123 | + if request.TestID == 0 { |
| 124 | + return "", errors.New("TestID is not specified for TestAnswer") |
| 125 | + } |
| 126 | + return fmt.Sprintf("%02d.a", request.TestID), nil |
| 127 | + case resource.TestOutput: |
113 | 128 | if request.TestID == 0 { |
114 | | - return "", errors.New("TestID is not specified for test resource") |
| 129 | + return "", errors.New("TestID is not specified for TestOutput") |
| 130 | + } |
| 131 | + return fmt.Sprintf("%02d.out", request.TestID), nil |
| 132 | + case resource.TestStderr: |
| 133 | + if request.TestID == 0 { |
| 134 | + return "", errors.New("TestID is not specified for TestOTestStderrutput") |
| 135 | + } |
| 136 | + return fmt.Sprintf("%02d.err", request.TestID), nil |
| 137 | + case resource.CheckerOutput: |
| 138 | + if request.TestID == 0 { |
| 139 | + return "", errors.New("TestID is not specified for CheckerOutput") |
| 140 | + } |
| 141 | + return fmt.Sprintf("%02d.check", request.TestID), nil |
| 142 | + case resource.Checker: |
| 143 | + if request.StorageFilename == "" { |
| 144 | + return "checkers/checker", nil |
| 145 | + } |
| 146 | + return fmt.Sprintf("checkers/%s", request.StorageFilename), nil |
| 147 | + case resource.Interactor: |
| 148 | + if request.StorageFilename == "" { |
| 149 | + return "interactors/interactor", nil |
115 | 150 | } |
116 | | - return fmt.Sprintf("tests/%s/%s", strconv.FormatUint(request.TestID, 10), request.StorageFilename), nil |
| 151 | + return fmt.Sprintf("interactors/%s", request.StorageFilename), nil |
117 | 152 | default: |
118 | | - return fmt.Sprintf("%s", request.StorageFilename), nil |
| 153 | + return "", errors.New("Unknown resource type") |
119 | 154 | } |
120 | 155 | } |
0 commit comments