281 lines
7.0 KiB
Go
281 lines
7.0 KiB
Go
package application
|
|
|
|
import (
|
|
"context"
|
|
// "encoding/json"
|
|
"fmt"
|
|
// "io"
|
|
"net/http"
|
|
// "strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"git.coopgo.io/coopgo-apps/parcoursmob/utils/identification"
|
|
// 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"
|
|
// groupsmanagement "git.coopgo.io/coopgo-platform/groups-management/grpcapi"
|
|
// "git.coopgo.io/coopgo-platform/groups-management/storage"
|
|
// mobilityaccounts "git.coopgo.io/coopgo-platform/mobility-accounts/grpcapi"
|
|
// "github.com/google/uuid"
|
|
"github.com/gorilla/mux"
|
|
"github.com/rs/zerolog/log"
|
|
"google.golang.org/protobuf/types/known/structpb"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
)
|
|
|
|
type DiagsForm struct {
|
|
Name string `json:"name" validate:"required"`
|
|
Namespace string `json:"namespace" validate:"required"`
|
|
JsonSchema string `json:"json_schema"`
|
|
UiSchema string `json:"ui_schema"`
|
|
Data map[string]any `json:"data"`
|
|
Deleted bool `json:"deleted"`
|
|
}
|
|
|
|
func (h *ApplicationHandler) DiagsHome(w http.ResponseWriter, r *http.Request) {
|
|
resp, err := h.services.GRPC.Diags.GetDiags(context.TODO(), &diags.GetDiagsRequest{
|
|
Namespaces: []string{"parcoursmob_diagnostiques"},
|
|
Mindate: timestamppb.New(time.Now().Add(-24 * time.Hour)),
|
|
})
|
|
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
responses := []diagsstorage.Diag{}
|
|
|
|
for _, e := range resp.Diags {
|
|
responses = append(responses, e.ToStorageType())
|
|
}
|
|
|
|
h.Renderer.DiagsHome(w, r, responses)
|
|
}
|
|
|
|
func (h *ApplicationHandler) DiagsHistory(w http.ResponseWriter, r *http.Request) {
|
|
resp, err := h.services.GRPC.Diags.GetDiags(context.TODO(), &diags.GetDiagsRequest{
|
|
Namespaces: []string{"parcoursmob_diagnostiques"},
|
|
//Maxdate: timestamppb.New(time.Now().Add(24 * time.Hour)),
|
|
})
|
|
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
responses := []diagsstorage.Diag{}
|
|
|
|
for _, e := range resp.Diags {
|
|
responses = append(responses, e.ToStorageType())
|
|
}
|
|
|
|
h.Renderer.DiagsHistory(w, r, responses)
|
|
}
|
|
|
|
func (h *ApplicationHandler) DiagsCreateDiag(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method == "POST" {
|
|
// Get current group
|
|
g := r.Context().Value(identification.GroupKey)
|
|
if g == nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
diagForm, err := parseDiagsForm(r)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
log.Debug().Any("diagFrom", diagForm).Msg("Form data submitted to create diag")
|
|
|
|
data, _ := structpb.NewStruct(map[string]any{
|
|
})
|
|
|
|
request := &diags.CreateDiagRequest{
|
|
Diag: &diags.Diag{
|
|
Namespace: "parcoursmob_diagnostiques",
|
|
Name: diagForm.Name,
|
|
JsonSchema: diagForm.JsonSchema,
|
|
Data: data,
|
|
Deleted: false,
|
|
},
|
|
}
|
|
|
|
resp, err := h.services.GRPC.Diags.CreateDiag(context.TODO(), request)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
|
|
http.Redirect(w, r, fmt.Sprintf("/app/diags/%s", resp.Diag.Id), http.StatusFound)
|
|
return
|
|
}
|
|
|
|
h.Renderer.DiagsCreateDiag(w, r)
|
|
}
|
|
|
|
func (h *ApplicationHandler) DiagsDisplayDiag(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
diagid := vars["diagid"]
|
|
|
|
request := &diags.GetDiagRequest{
|
|
Id: diagid,
|
|
}
|
|
|
|
resp, err := h.services.GRPC.Diags.GetDiag(context.TODO(), request)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
g := r.Context().Value(identification.GroupKey)
|
|
if g == nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
|
|
h.Renderer.DiagsDisplayDiag(w, r, resp.Diag.ToStorageType())
|
|
}
|
|
|
|
func parseDiagsForm(r *http.Request) (*DiagsForm, error) {
|
|
if err := r.ParseForm(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
formData := &DiagsForm{
|
|
Name: r.PostFormValue("name"),
|
|
Namespace: "parcoursmob_diagnostiques",
|
|
JsonSchema: r.PostFormValue("json_schema"),
|
|
UiSchema: r.PostFormValue("ui_schema"),
|
|
Data: map[string]any{},
|
|
Deleted: false,
|
|
}
|
|
|
|
return formData, nil
|
|
}
|
|
|
|
func (h *ApplicationHandler) DiagsUpdateDiag(w http.ResponseWriter, r *http.Request) {
|
|
adm := strings.Split(r.URL.Path, "/")
|
|
diagID := adm[3]
|
|
request := &diags.GetDiagRequest{
|
|
Id: diagID,
|
|
}
|
|
|
|
resp, err := h.services.GRPC.Diags.GetDiag(context.TODO(), request)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
if r.Method == "POST" {
|
|
g := r.Context().Value(identification.GroupKey)
|
|
if g == nil {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
diagForm, err := parseDiagsForm(r)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
data, _ := structpb.NewStruct(map[string]any{})
|
|
|
|
request := &diags.UpdateDiagRequest{
|
|
Diag: &diags.Diag{
|
|
Namespace: "parcoursmob_diagnostiques",
|
|
Id: diagID,
|
|
Name: diagForm.Name,
|
|
JsonSchema: diagForm.JsonSchema,
|
|
UiSchema: diagForm.UiSchema,
|
|
Data: data,
|
|
|
|
},
|
|
}
|
|
|
|
resp, err := h.services.GRPC.Diags.UpdateDiag(context.TODO(), request)
|
|
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
http.Redirect(w, r, fmt.Sprintf("/app/diags/%s", resp.Diag.Id), http.StatusFound)
|
|
return
|
|
}
|
|
h.Renderer.DiagsUpdateDiag(w, r, resp.Diag.ToStorageType())
|
|
}
|
|
|
|
func (h *ApplicationHandler) DiagsDeleteDiag(w http.ResponseWriter, r *http.Request) {
|
|
|
|
vars := mux.Vars(r)
|
|
diagID := vars["diagid"]
|
|
request := &diags.GetDiagRequest{
|
|
Id: diagID,
|
|
}
|
|
|
|
resp, err := h.services.GRPC.Diags.GetDiag(context.TODO(), request)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
if r.Method == "POST" {
|
|
|
|
request := &diags.UpdateDiagRequest{
|
|
Diag: &diags.Diag{
|
|
Namespace: resp.Diag.Namespace,
|
|
Id: resp.Diag.Id,
|
|
Name: resp.Diag.Name,
|
|
JsonSchema: resp.Diag.JsonSchema,
|
|
UiSchema: resp.Diag.UiSchema,
|
|
Data: resp.Diag.Data,
|
|
Deleted: true,
|
|
},
|
|
}
|
|
|
|
_, err := h.services.GRPC.Diags.UpdateDiag(context.TODO(), request)
|
|
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
http.Redirect(w, r, "/app/diags/", http.StatusFound)
|
|
return
|
|
}
|
|
h.Renderer.DiagsDeleteDiag(w, r, resp.Diag.ToStorageType())
|
|
}
|
|
|
|
func (h *ApplicationHandler) DiagsHistoryDiag(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
diagId := vars["diagid"]
|
|
request := &diags.GetDiagRequest{
|
|
Id: diagId,
|
|
}
|
|
|
|
resp, err := h.services.GRPC.Diags.GetDiag(context.TODO(), request)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("")
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
h.Renderer.DiagsHistoryDiag(w, r, resp.Diag.ToStorageType())
|
|
}
|