diff options
author | Matthew Lemon <y@yulqen.org> | 2024-04-06 11:48:32 +0100 |
---|---|---|
committer | Matthew Lemon <y@yulqen.org> | 2024-04-06 11:51:12 +0100 |
commit | e7e517b822333188ea34f4a4ba83de2253cfe869 (patch) | |
tree | 7c467051ec95e13e1db3925bf80c8b27c40a97db /cmd/api/datamaps.go | |
parent | a931a4637f6d51de4059df6d0d72d147e4775018 (diff) |
Reorganises cmd/ structure for publication on pkg.go.dev
Adds key commands to Makefile
Diffstat (limited to 'cmd/api/datamaps.go')
-rw-r--r-- | cmd/api/datamaps.go | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/cmd/api/datamaps.go b/cmd/api/datamaps.go deleted file mode 100644 index 8d371ab..0000000 --- a/cmd/api/datamaps.go +++ /dev/null @@ -1,123 +0,0 @@ -// dbasik provides a service with which to convert spreadsheets containing -// data to JSON for further processing. - -// Copyright (C) 2024 M R Lemon - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <https://www.gnu.org/licenses/>. -package main - -import ( - "encoding/csv" - "encoding/json" - "fmt" - "net/http" - "strconv" - "time" -) - -// datamapLine holds the data parsed from each line of a submitted datamap CSV file. -// The fields need to be exported otherwise they won't be included when encoding -// the struct to json. -type datamapLine struct { - Key string `json:"key"` - Sheet string `json:"sheet"` - DataType string `json:"datatype"` - Cellref string `json:"cellref"` -} - -// datamap includes a slice of datamapLine objects alongside header metadata -type datamap struct { - Name string `json:"name"` - Description string `json:"description"` - Created time.Time `json:"created"` - DMLs []datamapLine `json:"datamap_lines"` -} - -func (app *application) createDatamapHandler(w http.ResponseWriter, r *http.Request) { - // Parse the multipart form - err := r.ParseMultipartForm(10 << 20) // 10Mb max - if err != nil { - app.serverErrorResponse(w, r, err) - } - - // Get form values - dmName := r.FormValue("name") - app.logger.Info("obtain value from form", "name", dmName) - dmDesc := r.FormValue("description") - app.logger.Info("obtain value from form", "description", dmDesc) - - // Get the uploaded file and name - file, _, err := r.FormFile("file") - if err != nil { - http.Error(w, "Missing file", http.StatusBadRequest) - return - } - defer file.Close() - - // parse the csv - reader := csv.NewReader(file) - var dmls []datamapLine - var dm datamap - - for { - line, err := reader.Read() - if err != nil { - if err.Error() == "EOF" { - break // end of file - } - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - if len(line) != 4 { - http.Error(w, "Invalid CSV Format", http.StatusBadRequest) - return - } - - dmls = append(dmls, datamapLine{ - Key: line[0], - Sheet: line[1], - DataType: line[2], - Cellref: line[3], - }) - } - dm = datamap{Name: dmName, Description: dmDesc, Created: time.Now(), DMLs: dmls} - - err = app.writeJSONPretty(w, http.StatusOK, envelope{"datamap": dm}, nil) - if err != nil { - app.logger.Debug("writing out csv", "err", err) - app.serverErrorResponse(w, r, err) - } - - // fmt.Fprintf(w, "file successfully uploaded") -} - -func (app *application) showDatamapHandler(w http.ResponseWriter, r *http.Request) { - id := r.PathValue("id") - app.logger.Info("the id requested", "id", id) - id_int, err := strconv.ParseInt(id, 10, 64) - if err != nil || id_int < 1 { - app.notFoundResponse(w, r) - } - fmt.Fprintf(w, "show the details for datamap %d\n", id_int) -} - -func (app *application) createDatamapLine(w http.ResponseWriter, r *http.Request) { - var input datamapLine - err := json.NewDecoder(r.Body).Decode(&input) - if err != nil { - app.errorResponse(w, r, http.StatusBadRequest, err.Error()) - return - } - fmt.Fprintf(w, "%v\n", input) -} |