diff --git a/cmd/workshop.go b/cmd/workshop.go index cf3e28f..62ef4c8 100644 --- a/cmd/workshop.go +++ b/cmd/workshop.go @@ -15,6 +15,7 @@ func main() { router.HandleFunc("/service/new", controllers.CreateService).Methods("POST") router.HandleFunc("/service/accept", controllers.AcceptVehicle).Methods("POST") router.HandleFunc("/service/all", controllers.GetServices).Methods("GET") + router.HandleFunc("/service/calculate", controllers.Calculate).Methods("POST") //Vehicle router.HandleFunc("/vehicle/new", controllers.CreateVehicle).Methods("POST") diff --git a/internal/api/idRequest.go b/internal/api/idRequest.go new file mode 100644 index 0000000..5f30c65 --- /dev/null +++ b/internal/api/idRequest.go @@ -0,0 +1,5 @@ +package api + +type IdRequest struct { + Ids []int `json:"ids"` +} \ No newline at end of file diff --git a/internal/controllers/serviceController.go b/internal/controllers/serviceController.go index d85cd48..2879040 100644 --- a/internal/controllers/serviceController.go +++ b/internal/controllers/serviceController.go @@ -1,6 +1,7 @@ package controllers import ( + "gocommunity.ru/workshop/internal/api" "gocommunity.ru/workshop/internal/models" u "gocommunity.ru/workshop/internal/utils" "encoding/json" @@ -35,3 +36,21 @@ var AcceptVehicle = func(w http.ResponseWriter, r *http.Request) { resp := serviceVehicle.AcceptVehicle() u.Respond(w, resp) } + +var Calculate = func(w http.ResponseWriter, r *http.Request) { + + ids := &api.IdRequest{} + + service := &models.Service{} + + err := json.NewDecoder(r.Body).Decode(ids) + if err != nil { + u.Respond(w, u.Message(false, "Invalid request!")) + return + } + + data := service.Calculate(ids.Ids) + resp := u.Message(true, "success") + resp["data"] = data + u.Respond(w, resp) +} diff --git a/internal/models/service.go b/internal/models/service.go index efe097a..b9d48c6 100644 --- a/internal/models/service.go +++ b/internal/models/service.go @@ -34,4 +34,25 @@ func GetServices() []*Service { } return servicesSlice -} \ No newline at end of file +} + +type ServiceSum struct { + Sum int `json:"sum"` +} + +func (service *Service) Calculate(ids []int) []*ServiceSum { + + serviceSum := make([]*ServiceSum, 0) + + err := GetDB().Table("services"). + Select("sum(price) as sum"). + Where("id in (?)", ids). + Find(&serviceSum).Error + + if err != nil { + fmt.Println(err) + return nil + } + + return serviceSum +}