aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/api/datamaps.go
diff options
context:
space:
mode:
authorMatthew Lemon <y@yulqen.org>2024-04-06 11:48:32 +0100
committerMatthew Lemon <y@yulqen.org>2024-04-06 11:51:12 +0100
commite7e517b822333188ea34f4a4ba83de2253cfe869 (patch)
tree7c467051ec95e13e1db3925bf80c8b27c40a97db /cmd/api/datamaps.go
parenta931a4637f6d51de4059df6d0d72d147e4775018 (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.go123
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)
-}