From 9677e0d7ab854498e00b7408284c5eabfeae420e Mon Sep 17 00:00:00 2001 From: Dmitry Sirotkin Date: Fri, 28 Mar 2025 19:03:56 +0300 Subject: [PATCH] 4 --- cmd/workshop.go | 3 +- internal/api/workReportRequest.go | 9 +++ internal/controllers/contactController.go | 33 ---------- internal/controllers/vehicleController.go | 13 ---- internal/controllers/workHistoryController.go | 29 ++++++++ internal/models/contact.go | 66 ------------------- internal/models/db.go | 2 +- internal/models/service.go | 1 + internal/models/vehicle.go | 1 + internal/models/workHistory.go | 14 ++-- 10 files changed, 52 insertions(+), 119 deletions(-) create mode 100644 internal/api/workReportRequest.go delete mode 100644 internal/controllers/contactController.go create mode 100644 internal/controllers/workHistoryController.go delete mode 100644 internal/models/contact.go diff --git a/cmd/workshop.go b/cmd/workshop.go index b7dfe9c..cf3e28f 100644 --- a/cmd/workshop.go +++ b/cmd/workshop.go @@ -22,8 +22,7 @@ func main() { router.HandleFunc("/vehicle/service", controllers.GetvehiclesInService).Methods("GET") - router.HandleFunc("/contacts/new", controllers.CreateContact).Methods("POST") - router.HandleFunc("/me/contacts", controllers.GetContacts).Methods("GET") + router.HandleFunc("/work-report/find", controllers.GetEmployeesReport).Methods("POST") port := os.Getenv("PORT") if port == "" { diff --git a/internal/api/workReportRequest.go b/internal/api/workReportRequest.go new file mode 100644 index 0000000..6713106 --- /dev/null +++ b/internal/api/workReportRequest.go @@ -0,0 +1,9 @@ +package api + +import "time" + +type WorkReportRequest struct { + Start time.Time `json:"start"` + Finish time.Time `json:"finish"` + EmployeeId int `json:"employee_id"` +} \ No newline at end of file diff --git a/internal/controllers/contactController.go b/internal/controllers/contactController.go deleted file mode 100644 index b11bc3d..0000000 --- a/internal/controllers/contactController.go +++ /dev/null @@ -1,33 +0,0 @@ -package controllers - -import ( - "gocommunity.ru/workshop/internal/models" - u "gocommunity.ru/workshop/internal/utils" - "encoding/json" - "net/http" -) - -var CreateContact = func(w http.ResponseWriter, r *http.Request) { - - user := r.Context().Value("user").(uint) - contact := &models.Contact{} - - err := json.NewDecoder(r.Body).Decode(contact) - if err != nil { - u.Respond(w, u.Message(false, "Error!")) - return - } - - contact.UserId = user - resp := contact.CreateContact() - u.Respond(w, resp) -} - -var GetContacts = func(w http.ResponseWriter, r *http.Request) { - - id := r.Context().Value("user").(uint) - data := models.GetContacts(id) - resp := u.Message(true, "success") - resp["data"] = data - u.Respond(w, resp) -} diff --git a/internal/controllers/vehicleController.go b/internal/controllers/vehicleController.go index a98a188..09f15ca 100644 --- a/internal/controllers/vehicleController.go +++ b/internal/controllers/vehicleController.go @@ -19,15 +19,8 @@ var CreateVehicle = func(w http.ResponseWriter, r *http.Request) { } var GetvehiclesWithServices = 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, "Error!")) - return - } - data := vehicle.Getvehicles() resp := u.Message(true, "success") resp["data"] = data @@ -37,12 +30,6 @@ var GetvehiclesWithServices = func(w http.ResponseWriter, r *http.Request) { var GetvehiclesInService = 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, "Error!")) - return - } - data := vehicle.GetvehiclesInService() resp := u.Message(true, "success") resp["data"] = data diff --git a/internal/controllers/workHistoryController.go b/internal/controllers/workHistoryController.go new file mode 100644 index 0000000..0aef581 --- /dev/null +++ b/internal/controllers/workHistoryController.go @@ -0,0 +1,29 @@ +package controllers + +import ( + "gocommunity.ru/workshop/internal/api" + "gocommunity.ru/workshop/internal/models" + u "gocommunity.ru/workshop/internal/utils" + "encoding/json" + "net/http" +) + +var GetEmployeesReport = func(w http.ResponseWriter, r *http.Request) { + + request := &api.WorkReportRequest{} + workHistory := &models.WorkHistory{} + + + err := json.NewDecoder(r.Body).Decode(request) + if err != nil { + u.Respond(w, u.Message(false, "Errorz!")) + return + } + + + + data := workHistory.GetHistoryByDateAndEmployeeId(request.Start, request.Finish, request.EmployeeId) + resp := u.Message(true, "success") + resp["data"] = data + u.Respond(w, resp) +} \ No newline at end of file diff --git a/internal/models/contact.go b/internal/models/contact.go deleted file mode 100644 index 5f48074..0000000 --- a/internal/models/contact.go +++ /dev/null @@ -1,66 +0,0 @@ -package models - -import ( - u "gocommunity.ru/workshop/internal/utils" - "fmt" - "github.com/jinzhu/gorm" -) - -type Contact struct { - gorm.Model - Name string `json:"name"` - Phone string `json:"phone"` - UserId uint `json:"user_id"` -} - -func (contact *Contact) ValidateContact() (map[string]interface{}, bool) { - - if contact.Name == "" { - return u.Message(false, "Name cannot be empty!"), false - } - - if contact.Phone == "" { - return u.Message(false, "Phone number cannot be empty!"), false - } - - if contact.UserId <= 0 { - return u.Message(false, "User not found!"), false - } - - return u.Message(true, "success"), true -} - -func (contact *Contact) CreateContact() map[string]interface{} { - - if response, ok := contact.ValidateContact(); !ok { - return response - } - - GetDB().Create(contact) - - resp := u.Message(true, "success") - resp["contact"] = contact - return resp -} - -func GetContact(id uint) *Contact { - - contact := &Contact{} - err := GetDB().Table("contacts").Where("id = ?", id).First(contact).Error - if err != nil { - return nil - } - return contact -} - -func GetContacts(user uint) []*Contact { - - contactsSlice := make([]*Contact, 0) - err := GetDB().Table("contacts").Where("user_id = ?", user).Find(&contactsSlice).Error - if err != nil { - fmt.Println(err) - return nil - } - - return contactsSlice -} diff --git a/internal/models/db.go b/internal/models/db.go index 329e847..e588ea2 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{}, &Contact{}, &Vehicle{}) //Миграция базы данных + db.Debug().AutoMigrate(&Service{}, &Bonuse{}, &Client{}, &Vehicle{}, &WorkHistory{}, &Employee{}) //Миграция базы данных } func GetDB() *gorm.DB { diff --git a/internal/models/service.go b/internal/models/service.go index 3b56f15..efe097a 100644 --- a/internal/models/service.go +++ b/internal/models/service.go @@ -8,6 +8,7 @@ import ( type Service struct { gorm.Model + WorkHistoryId int `json:"work_history_id"` Price int32 `json:"price"` Name string `json:"name"` Description string `json:"description"` diff --git a/internal/models/vehicle.go b/internal/models/vehicle.go index ba154ce..5f4438e 100644 --- a/internal/models/vehicle.go +++ b/internal/models/vehicle.go @@ -8,6 +8,7 @@ import ( type Vehicle struct { gorm.Model + WorkHistoryId int `json:"work_history_id"` ClientId int `json:"client_id"` Brand string `json:"brand"` Color string `json:"color"` diff --git a/internal/models/workHistory.go b/internal/models/workHistory.go index 7e0beb0..9a2e5cc 100644 --- a/internal/models/workHistory.go +++ b/internal/models/workHistory.go @@ -10,8 +10,9 @@ import ( type WorkHistory struct { gorm.Model ClientId int `json:"client_id"` - VehicleId int `json:"vehicle_id"` - ServiceId int `json:"service_id"` + Vehicle Vehicle `json:"vehicle"` + Service Service `json:"service"` + EmployeeId int `json:"employee_id"` IsFinished bool `json:"is_finished"` } @@ -25,10 +26,15 @@ func (workHistory *WorkHistory) CreateWorkHistory() map[string]interface{} { return resp } -func (workHistory *WorkHistory) GetHistoryByDate(start time.Time, finish time.Time) []*WorkHistory { +func (workHistory *WorkHistory) GetHistoryByDateAndEmployeeId(start time.Time, finish time.Time, employeeId int) []*WorkHistory { workHistorySlice := make([]*WorkHistory, 0) - err := GetDB().Table("work_history").Where("created_at <= ? and updated_at <= ?", start, finish).Find(&workHistorySlice).Error + err := GetDB().Table("work_histories"). + Where("employee_id = ? and created_at <= ? and updated_at <= ?", employeeId, start, finish). + Preload("client"). + Preload("vehicle"). + Preload("service"). + Find(&workHistorySlice).Error if err != nil { fmt.Println(err) return nil