Adding page to create votes and view the votes, rearanging some methods
This commit is contained in:
@@ -5,9 +5,14 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"io/ioutil"
|
||||
"encoding/json"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"go-sjles-pta-vote/server/common"
|
||||
"go-sjles-pta-vote/server/db"
|
||||
)
|
||||
|
||||
@@ -18,6 +23,80 @@ type Member struct {
|
||||
|
||||
const BATCH_SIZE = 100
|
||||
|
||||
func AdminMembersHandler(resWriter http.ResponseWriter, request *http.Request) {
|
||||
if request.Method != http.MethodPost {
|
||||
resWriter.WriteHeader(http.StatusMethodNotAllowed)
|
||||
return
|
||||
}
|
||||
|
||||
var year int
|
||||
var err error
|
||||
|
||||
if err = request.ParseMultipartForm(10 << 20); err != nil {
|
||||
common.SendError(resWriter, "Failed to parse multipart form", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
year_from_form := request.FormValue("year")
|
||||
if year_from_form == "" {
|
||||
common.SendError(resWriter, "Year is required", http.StatusBadRequest)
|
||||
return
|
||||
} else {
|
||||
year, err = strconv.Atoi(year_from_form)
|
||||
if err != nil {
|
||||
common.SendError(resWriter, "Invalid year", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
file, _, err := request.FormFile("members.csv")
|
||||
if err != nil {
|
||||
common.SendError(resWriter, "Failed to read members.csv file", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
fileBytes, err := ioutil.ReadAll(file)
|
||||
if err != nil {
|
||||
common.SendError(resWriter, "Failed to read members.csv file", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if err = ParseMembersFromBytes(year, fileBytes); err != nil {
|
||||
common.SendError(resWriter, "Failed to parse members from CSV", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
resWriter.WriteHeader(http.StatusOK)
|
||||
json.NewEncoder(resWriter).Encode(map[string]bool{"success": true})
|
||||
}
|
||||
|
||||
func AdminMembersView(resWriter http.ResponseWriter, request *http.Request) {
|
||||
yearStr := request.URL.Query().Get("year")
|
||||
if yearStr == "" {
|
||||
common.SendError(resWriter, "Year is required", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
year, err := strconv.Atoi(yearStr)
|
||||
if err != nil {
|
||||
common.SendError(resWriter, "Invalid year", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
members, err := GetMembersByYear(year)
|
||||
if err != nil {
|
||||
common.SendError(resWriter, "Failed to get members", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
resWriter.WriteHeader(http.StatusOK)
|
||||
json.NewEncoder(resWriter).Encode(map[string]interface{}{
|
||||
"success": true,
|
||||
"members": members,
|
||||
})
|
||||
}
|
||||
|
||||
func ParseMembersFromBytes(year int, fileBytes []byte) error {
|
||||
reader := csv.NewReader(strings.NewReader(string(fileBytes)))
|
||||
reader.FieldsPerRecord = -1 // Allow variable number of fields per record
|
||||
|
||||
Reference in New Issue
Block a user