From 593631ab34a48922d27f928686a5134fc45fb882 Mon Sep 17 00:00:00 2001 From: Daffa Fathani Adila Date: Sun, 20 Mar 2022 21:04:31 +0800 Subject: [PATCH 1/3] create quotation model --- models.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/models.go b/models.go index 5577cfc..9d443e2 100644 --- a/models.go +++ b/models.go @@ -10,6 +10,15 @@ type user struct { Role int `json:"role"` } +type quotation struct { + Quotation_id int `json:"quotation_id"` + Event_name string `json:"event_name"` + Item_description string `json:"item_description"` + Item_quantity int `json:"item_quantity"` + Student_name string `json:"student_name"` + Status int `json:"status"` +} + // type role struct { // Role_id int `json:"role_id"` // Role_name string `json:"role_name"` From 63028151eaefa414b8c345ad0a716a149fa2f13c Mon Sep 17 00:00:00 2001 From: Daffa Fathani Adila Date: Sun, 20 Mar 2022 21:28:33 +0800 Subject: [PATCH 2/3] create get all quotations handler --- handlers.go | 54 ++++++++++++++++++++++++++++++++++++++++++++--------- models.go | 3 +++ routes.go | 1 + 3 files changed, 49 insertions(+), 9 deletions(-) diff --git a/handlers.go b/handlers.go index ba71c77..71c12ee 100644 --- a/handlers.go +++ b/handlers.go @@ -43,11 +43,6 @@ func (s *server) handleHelloWord() http.HandlerFunc { } func (s *server) handleUserSignUp() func(w http.ResponseWriter, r *http.Request) { - - type response struct { - Message string `json:"message"` - } - return func(w http.ResponseWriter, r *http.Request) { decoder := json.NewDecoder(r.Body) @@ -84,10 +79,6 @@ func (s *server) handleUserSignIn() func(w http.ResponseWriter, r *http.Request) Message string `json:"token"` } - type response struct { - Message string `json:"message"` - } - return func(w http.ResponseWriter, r *http.Request) { decoder := json.NewDecoder(r.Body) @@ -124,6 +115,51 @@ func (s *server) handleUserSignIn() func(w http.ResponseWriter, r *http.Request) } } +func (s *server) handleQuotationGetAll() func(w http.ResponseWriter, r *http.Request) { + + type responseQuotation struct { + Quotations []quotation `json:"quotattions"` + } + + return func(w http.ResponseWriter, r *http.Request) { + var quotations []quotation + + sqlQuery := " SELECT quotation_id, event_name, item_description, item_quantity, student_name, status FROM Quotations" + + rows, err := s.db.Query(sqlQuery) + + if err != nil { + respondErr(w, r, err, http.StatusInternalServerError) + return + } + + for rows.Next() { + var qtn quotation + + err = rows.Scan( + &qtn.Quotation_id, + &qtn.Event_name, + &qtn.Item_description, + &qtn.Item_quantity, + &qtn.Student_name, + &qtn.Status, + ) + + if err != nil { + respondErr(w, r, err, http.StatusInternalServerError) + return + } + + quotations = append(quotations, qtn) + } + + responseQuotation := responseQuotation{Quotations: quotations} + + respond(w, r, responseQuotation, http.StatusOK) + + } +} + func generateToken(u user) (string, error) { atClaim := jwt.MapClaims{} atClaim["authorized"] = true diff --git a/models.go b/models.go index 9d443e2..eff9f0f 100644 --- a/models.go +++ b/models.go @@ -1,6 +1,9 @@ package main // Define your models here +type response struct { + Message string `json:"message"` +} type user struct { User_id int `json:"user_id"` Name string `json:"name"` diff --git a/routes.go b/routes.go index 0f80369..72c4edf 100644 --- a/routes.go +++ b/routes.go @@ -8,4 +8,5 @@ func (s *server) routes() { s.router.HandleFunc("/", s.handleHelloWord()).Methods("GET") s.router.HandleFunc("/user/signup", s.handleUserSignUp()).Methods("POST") s.router.HandleFunc("/user/signin", s.handleUserSignIn()).Methods("POST") + s.router.HandleFunc("/quotation", s.handleQuotationGetAll()).Methods("GET") } From e46ddffd8842345c712e26ef77fa3d95b9612ddd Mon Sep 17 00:00:00 2001 From: Daffa Fathani Adila Date: Sun, 20 Mar 2022 21:48:56 +0800 Subject: [PATCH 3/3] implement handler function for udpating quotation status to rejected/ approved --- handlers.go | 41 ++++++++++++++++++++++++++++++++++++++++- routes.go | 1 + 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/handlers.go b/handlers.go index 71c12ee..dcb6ddd 100644 --- a/handlers.go +++ b/handlers.go @@ -124,7 +124,13 @@ func (s *server) handleQuotationGetAll() func(w http.ResponseWriter, r *http.Req return func(w http.ResponseWriter, r *http.Request) { var quotations []quotation - sqlQuery := " SELECT quotation_id, event_name, item_description, item_quantity, student_name, status FROM Quotations" + sqlQuery := `SELECT quotation_id, + event_name, + item_description, + item_quantity, + student_name, + status + FROM Quotations` rows, err := s.db.Query(sqlQuery) @@ -160,6 +166,39 @@ func (s *server) handleQuotationGetAll() func(w http.ResponseWriter, r *http.Req } } +// Handler function to change status to approved/rejected +// Resubmit quotation could also be done by changing the status (?) +func (s *server) handleQuotationUpdateStatus() func(w http.ResponseWriter, r *http.Request) { + + type request struct { + Quotation_id int `json:"quotation_id"` + New_status int `json:"new_status"` + } + + return func(w http.ResponseWriter, r *http.Request) { + decoder := json.NewDecoder(r.Body) + + var quotationRequest request + + if err := decoder.Decode("ationRequest); err != nil { + respondErr(w, r, err, http.StatusInternalServerError) + } + + sqlQuery := `UPDATE Quotations + SET status = $1 + WHERE quotation_id = $2` + + if _, err := s.db.Exec(sqlQuery, quotationRequest.New_status, quotationRequest.Quotation_id); err != nil { + respondErr(w, r, err, http.StatusInternalServerError) + return + } + + response := response{"Status has been changed"} + respond(w, r, response, http.StatusOK) + } + +} + func generateToken(u user) (string, error) { atClaim := jwt.MapClaims{} atClaim["authorized"] = true diff --git a/routes.go b/routes.go index 72c4edf..a494f55 100644 --- a/routes.go +++ b/routes.go @@ -9,4 +9,5 @@ func (s *server) routes() { s.router.HandleFunc("/user/signup", s.handleUserSignUp()).Methods("POST") s.router.HandleFunc("/user/signin", s.handleUserSignIn()).Methods("POST") s.router.HandleFunc("/quotation", s.handleQuotationGetAll()).Methods("GET") + s.router.HandleFunc("/quotation/update-status", s.handleQuotationUpdateStatus()).Methods("POST") }