diff --git a/cmd/workshop.go b/cmd/workshop.go index 1e391b4..f56c248 100644 --- a/cmd/workshop.go +++ b/cmd/workshop.go @@ -12,7 +12,15 @@ func main() { router := mux.NewRouter() - router.HandleFunc("/user/new", controllers.CreateService).Methods("POST") + router.HandleFunc("/service/new", controllers.CreateService).Methods("POST") + router.HandleFunc("/service/accept", controllers.AcceptVehicle).Methods("POST") + router.HandleFunc("/service/all", controllers.GetServices).Methods("GET") + + //Vehicle + router.HandleFunc("/vehicle/new", controllers.CreateVehicle).Methods("POST") + router.HandleFunc("/vehicle/all", controllers.GetvehiclesInService).Methods("GET") + + router.HandleFunc("/contacts/new", controllers.CreateContact).Methods("POST") router.HandleFunc("/me/contacts", controllers.GetContacts).Methods("GET") diff --git a/internal/api/acceptVehicleRequest.go b/internal/api/acceptVehicleRequest.go new file mode 100644 index 0000000..82488c0 --- /dev/null +++ b/internal/api/acceptVehicleRequest.go @@ -0,0 +1,7 @@ +package api + +type AcceptVehicleRequest struct { + ServiceId string `json:"service_id"` + VehicleId string `json:"vehicle_id"` + EmployeeId uint `json:"employee_id"` +} \ No newline at end of file diff --git a/internal/controllers/serviceController.go b/internal/controllers/serviceController.go index ca4b89e..d85cd48 100644 --- a/internal/controllers/serviceController.go +++ b/internal/controllers/serviceController.go @@ -8,12 +8,30 @@ import ( ) var CreateService = func(w http.ResponseWriter, r *http.Request) { - account := &models.Service{} - err := json.NewDecoder(r.Body).Decode(account) + service := &models.Service{} + err := json.NewDecoder(r.Body).Decode(service) if err != nil { u.Respond(w, u.Message(false, "Invalid request!")) return } - resp := account.CreateService() + resp := service.CreateService() + u.Respond(w, resp) +} + +var GetServices = func(w http.ResponseWriter, r *http.Request) { + data := models.GetServices() + resp := u.Message(true, "success") + resp["data"] = data + u.Respond(w, resp) +} + +var AcceptVehicle = func(w http.ResponseWriter, r *http.Request) { + serviceVehicle := &models.ServiceVehicle{} + err := json.NewDecoder(r.Body).Decode(serviceVehicle) + if err != nil { + u.Respond(w, u.Message(false, "Invalid request!")) + return + } + resp := serviceVehicle.AcceptVehicle() u.Respond(w, resp) } diff --git a/internal/controllers/vehicleController.go b/internal/controllers/vehicleController.go new file mode 100644 index 0000000..69fabdd --- /dev/null +++ b/internal/controllers/vehicleController.go @@ -0,0 +1,34 @@ +package controllers + +import ( + "gocommunity.ru/workshop/internal/models" + u "gocommunity.ru/workshop/internal/utils" + "encoding/json" + "net/http" +) + +var CreateVehicle = func(w http.ResponseWriter, r *http.Request) { + vehicle := &models.Vehicle{} + err := json.NewDecoder(r.Body).Decode(vehicle) + if err != nil { + u.Respond(w, u.Message(false, "Invalid request!")) + return + } + resp := vehicle.CreateVehicle() + u.Respond(w, resp) +} + +var GetvehiclesInService = func(w http.ResponseWriter, r *http.Request) { + VehicleId := r.Context().Value("id").(uint) + vehicle := &models.Vehicle{} + + err := json.NewDecoder(r.Body).Decode(vehicle) + if err != nil { + u.Respond(w, u.Message(false, "Error!")) + return + } + + vehicle.ID = VehicleId + resp := vehicle.CreateVehicle() + u.Respond(w, resp) +} diff --git a/internal/models/db.go b/internal/models/db.go index 60befd9..329e847 100644 --- a/internal/models/db.go +++ b/internal/models/db.go @@ -31,7 +31,7 @@ func init() { } db = conn - db.Debug().AutoMigrate(&Service{}, &Bonuse{}, &Client{}) //Миграция базы данных + db.Debug().AutoMigrate(&Service{}, &Bonuse{}, &Client{}, &Contact{}, &Vehicle{}) //Миграция базы данных } func GetDB() *gorm.DB { diff --git a/internal/models/service.go b/internal/models/service.go index 8356dda..3b56f15 100644 --- a/internal/models/service.go +++ b/internal/models/service.go @@ -1,13 +1,14 @@ package models import ( - u "gocommunity.ru/workshop/internal/utils" + "fmt" "github.com/jinzhu/gorm" + u "gocommunity.ru/workshop/internal/utils" ) type Service struct { gorm.Model - Price string `json:"email"` + Price int32 `json:"price"` Name string `json:"name"` Description string `json:"description"` } @@ -21,3 +22,15 @@ func (service *Service) CreateService() map[string]interface{} { resp["service"] = service return resp } + +func GetServices() []*Service { + + servicesSlice := make([]*Service, 0) + err := GetDB().Table("services").Find(&servicesSlice).Error + if err != nil { + fmt.Println(err) + return nil + } + + return servicesSlice +} \ No newline at end of file diff --git a/internal/models/serviceVehicle.go b/internal/models/serviceVehicle.go new file mode 100644 index 0000000..52c9f73 --- /dev/null +++ b/internal/models/serviceVehicle.go @@ -0,0 +1,43 @@ +package models + +import ( + "fmt" + + u "gocommunity.ru/workshop/internal/utils" +) + + +type ServiceVehicle struct { + ServiceId int32 `json:"service_id"` + VehicleId int32 `json:"vehicle_id"` +} + +func (vehicle *ServiceVehicle) Validate() (map[string]interface{}, bool) { + + if vehicle.ServiceId <= 0 { + return u.Message(false, "ServiceId can't be < 0!"), false + } + + if vehicle.VehicleId <= 0 { + return u.Message(false, "VehicleId can't be < 0!"), false + } + + return u.Message(true, "success"), true +} + +func (serviceVehicle *ServiceVehicle) AcceptVehicle() map[string]interface{} { + + if response, ok := serviceVehicle.Validate(); !ok { + return response + } + + err := GetDB().Table("service_vehicle").Create(serviceVehicle).Error + if err != nil { + fmt.Println(err) + return nil + } + + resp := u.Message(true, "success") + resp["serviceVehicle"] = serviceVehicle + return resp +} \ No newline at end of file diff --git a/internal/models/vehicle.go b/internal/models/vehicle.go index 52b6857..de4dbd6 100644 --- a/internal/models/vehicle.go +++ b/internal/models/vehicle.go @@ -11,6 +11,7 @@ type Vehicle struct { ClientId int `json:"client_id"` Brand string `json:"brand"` Color string `json:"color"` + Services []Service `gorm:"many2many:service_vehicle;foreignkey:vehicle_id;references:Id"` } func (vehicle *Vehicle) ValidateVehicle() (map[string]interface{}, bool) { @@ -64,3 +65,15 @@ func Getvehicles(user uint) []*Vehicle { return vehiclesSlice } + +func GetvehiclesInService() []*Vehicle { + + vehiclesSlice := make([]*Vehicle, 0) + err := GetDB().Table("vehicles").Joins("join service_vehicle sv on ").Where("user_id = ?").Find(&vehiclesSlice).Error + if err != nil { + fmt.Println(err) + return nil + } + + return vehiclesSlice +}