From 1162f2faf21928f9ac21b22ceba7679dbb71bfec Mon Sep 17 00:00:00 2001 From: Nicolas CARON Date: Tue, 10 Dec 2024 16:14:43 +0100 Subject: [PATCH] Add VehiclesCreateDiag --- handlers/application/diags.go | 65 ++++++++++++++++++++- handlers/application/vehicles-management.go | 30 +++++++++- main.go | 5 +- renderer/diags.go | 9 +++ renderer/vehicle-management.go | 3 +- 5 files changed, 104 insertions(+), 8 deletions(-) diff --git a/handlers/application/diags.go b/handlers/application/diags.go index cbe75b3..7c7cf9c 100644 --- a/handlers/application/diags.go +++ b/handlers/application/diags.go @@ -39,7 +39,7 @@ type DiagsForm struct { func (h *ApplicationHandler) DiagsHome(w http.ResponseWriter, r *http.Request) { resp, err := h.services.GRPC.Diags.GetDiags(context.TODO(), &diags.GetDiagsRequest{ - Namespaces: []string{"parcoursmob_beneficiaries", "parcoursmob_diagnostiques", "parcoursmob_vehicle"}, + Namespaces: []string{"parcoursmob_beneficiaries", "parcoursmob_diagnostiques", "parcoursmob_vehicles"}, // Mindate: timestamppb.New(time.Now().Add(-24 * time.Hour)), }) @@ -140,6 +140,67 @@ func (h *ApplicationHandler) BeneficiariesCreateDiag(w http.ResponseWriter, r *h h.Renderer.BeneficiariesCreateDiag(w, r, beneficiaryID) } +func (h *ApplicationHandler) VehiclesCreateDiag(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + vehicleID := vars["vehicleid"] + + if h.services == nil || (h.services.GRPC == services.GRPCServices{}) || h.services.GRPC.Diags == nil { + log.Error().Msg("Diags service is not initialized") + http.Error(w, "Internal server error", http.StatusInternalServerError) + return + } + + + if r.Method == http.MethodPost { + g := r.Context().Value(identification.GroupKey) + if g == nil { + http.Error(w, "Missing group information", http.StatusBadRequest) + return + } + + diagForm, err := parseDiagsForm(r) + if err != nil { + log.Error().Err(err).Msg("Invalid form data") + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + log.Debug().Interface("diagForm", diagForm).Msg("Form data parsed") + + data, err := structpb.NewStruct(map[string]any{ + "vehicle": vehicleID, + }) + if err != nil { + log.Error().Err(err).Msg("Failed to create protobuf struct") + w.WriteHeader(http.StatusInternalServerError) + return + } + + request := &diags.CreateDiagRequest{ + Diag: &diags.Diag{ + Name: diagForm.Name, + Namespace: diagForm.Namespace, + JsonSchema: diagForm.JsonSchema, + UiSchema: diagForm.UiSchema, + Data: data, + Deleted: diagForm.Deleted, + }, + } + + resp, err := h.services.GRPC.Diags.CreateDiag(context.TODO(), request) + if err != nil { + log.Error().Err(err).Msg("Failed to create diagnostic") + w.WriteHeader(http.StatusInternalServerError) + return + } + + http.Redirect(w, r, fmt.Sprintf("/app/diags/%s", resp.Diag.Id), http.StatusFound) + return + } + + h.Renderer.VehiclesCreateDiag(w, r, vehicleID) +} + func (h *ApplicationHandler) DiagsDisplayDiag(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) diagid := vars["diagid"] @@ -226,7 +287,7 @@ func (h *ApplicationHandler) DiagUpdate(w http.ResponseWriter, r *http.Request) request := &diags.UpdateDiagRequest{ Diag: &diags.Diag{ - Namespace: "parcoursmob_diagnostiques", + Namespace: diagForm.Namespace, Id: diagID, Name: diagForm.Name, JsonSchema: diagForm.JsonSchema, diff --git a/handlers/application/vehicles-management.go b/handlers/application/vehicles-management.go index 01156b9..7aae680 100755 --- a/handlers/application/vehicles-management.go +++ b/handlers/application/vehicles-management.go @@ -11,6 +11,8 @@ import ( "git.coopgo.io/coopgo-apps/parcoursmob/utils/identification" "git.coopgo.io/coopgo-apps/parcoursmob/utils/sorting" filestorage "git.coopgo.io/coopgo-apps/parcoursmob/utils/storage" + diags "git.coopgo.io/coopgo-platform/diags/grpcapi" + diagsstorage "git.coopgo.io/coopgo-platform/diags/storage" fleets "git.coopgo.io/coopgo-platform/fleets/grpcapi" fleetsstorage "git.coopgo.io/coopgo-platform/fleets/storage" groupsmanagement "git.coopgo.io/coopgo-platform/groups-management/grpcapi" @@ -198,7 +200,33 @@ func (h *ApplicationHandler) VehiclesFleetDisplay(w http.ResponseWriter, r *http return } - h.Renderer.VehiclesFleetDisplay(w, r, resp.Vehicle.ToStorageType()) + + diag := []diagsstorage.Diag{} + + diagsrequest := &diags.GetDiagsRequest{ + Namespaces: []string{"parcoursmob_vehicles"}, + } + + diagsresp, err := h.services.GRPC.Diags.GetDiags(context.TODO(), diagsrequest) + if err != nil { + log.Error().Err(err).Msg("") + w.WriteHeader(http.StatusInternalServerError) + return + } + + for _, d := range diagsresp.Diags { + diagData := d.Data.AsMap() + if vehicle, ok := diagData["vehicle"].(string); ok && vehicle == vehicleid { + diag = append(diag, d.ToStorageType()) + } + } + + diagsAny := make([]any, len(diag)) + for i, d := range diag { + diagsAny[i] = d + } + + h.Renderer.VehiclesFleetDisplay(w, r, resp.Vehicle.ToStorageType(), diagsAny) } func filterVehicle(r *http.Request, v *fleets.Vehicle) bool { diff --git a/main.go b/main.go index 0f2fca9..d3fdc4f 100755 --- a/main.go +++ b/main.go @@ -187,15 +187,12 @@ func main() { //////////////////////////////////////////////////////////////// //////////////////Diag in benefeciaries//////////////////////// application.HandleFunc("/beneficiaries/{beneficiaryid}/create-diag", applicationHandler.BeneficiariesCreateDiag) - application.HandleFunc("/beneficiaries/{beneficiaryid}/diags", applicationHandler.DiagsHome) application.HandleFunc("/beneficiaries/{beneficiaryid}/diags/{diagid}", applicationHandler.DiagsDisplayDiag) - application.HandleFunc("/beneficiaries/{beneficiaryid}/diags/history", applicationHandler.DiagsHistory) //////////////////////////////////////////////////////////////// //////////////////Diag in vehicules//////////////////////// - // application.HandleFunc("/vehicles-management/fleet/{vehicleid}/create-diag", applicationHandler.DiagsCreateDiag) + application.HandleFunc("/vehicles-management/fleet/{vehicleid}/create-diag", applicationHandler.VehiclesCreateDiag) application.HandleFunc("/vehicles-management/fleet/{vehicleid}/diags", applicationHandler.DiagsHome) application.HandleFunc("/vehicles-management/fleet/{vehicleid}/diags/{diagid}", applicationHandler.DiagsDisplayDiag) - application.HandleFunc("/vehicles-management/fleet/{vehicleid}/diags/history", applicationHandler.DiagsHistory) //////////////////////////////////////////////////////////////// //////////////////Diags//////////////////////// application.HandleFunc("/diags/", applicationHandler.DiagsHome) diff --git a/renderer/diags.go b/renderer/diags.go index 1553400..b900e3d 100644 --- a/renderer/diags.go +++ b/renderer/diags.go @@ -37,6 +37,15 @@ func (renderer *Renderer) BeneficiariesCreateDiag(w http.ResponseWriter, r *http renderer.Render("diag create for beneficiary", w, r, files, state) } +func (renderer *Renderer) VehiclesCreateDiag(w http.ResponseWriter, r *http.Request, vehicle string) { + state := NewState(r, renderer.ThemeConfig, diagsMenu) + files := renderer.ThemeConfig.GetStringSlice("views.vehicles_management.create_diag.files") + state.ViewState = map[string]any{ + "vehicle": vehicle, + } + renderer.Render("diag create for vehicle", w, r, files, state) +} + func (renderer *Renderer) DiagsDisplayDiag(w http.ResponseWriter, r *http.Request, diag any) { files := renderer.ThemeConfig.GetStringSlice("views.diags.display_diag.files") state := NewState(r, renderer.ThemeConfig, diagsMenu) diff --git a/renderer/vehicle-management.go b/renderer/vehicle-management.go index 6fa0768..29ea6b3 100755 --- a/renderer/vehicle-management.go +++ b/renderer/vehicle-management.go @@ -46,11 +46,12 @@ func (renderer *Renderer) VehiclesFleetAdd(w http.ResponseWriter, r *http.Reques renderer.Render("fleet add vehicle", w, r, files, state) } -func (renderer *Renderer) VehiclesFleetDisplay(w http.ResponseWriter, r *http.Request, vehicle any) { +func (renderer *Renderer) VehiclesFleetDisplay(w http.ResponseWriter, r *http.Request, vehicle any, diags []any) { files := renderer.ThemeConfig.GetStringSlice("views.vehicles_management.fleet_display.files") state := NewState(r, renderer.ThemeConfig, vehiclesmanagementMenu) state.ViewState = map[string]any{ "vehicle": vehicle, + "diags": diags, } renderer.Render("fleet display vehicle", w, r, files, state)