package handler import ( "context" "encoding/json" "fmt" "net/http" "management/internal/erpserver/model/dto" "management/internal/pkg/config" "management/internal/pkg/know" "management/internal/pkg/session" "github.com/a-h/templ" "github.com/drhin/logger" "go.uber.org/zap" ) //type RouterGroup interface { // Register(router chi.Router) //} type Handler struct { Config *config.Config Log *logger.Logger session session.Manager } func NewHandler( config *config.Config, log *logger.Logger, session session.Manager, ) *Handler { return &Handler{ Config: config, Log: log, session: session, } } // ===================================================================================================================== // mid 帮助方法 func (h *Handler) AuthUser(ctx context.Context) dto.AuthorizeUser { u, err := h.session.GetUser(ctx, know.StoreName) if err != nil { return dto.AuthorizeUser{} } return u } func (h *Handler) RenewToken(ctx context.Context) error { return h.session.RenewToken(ctx) } func (h *Handler) Destroy(ctx context.Context) error { return h.session.Destroy(ctx) } // ===================================================================================================================== // render 帮助方法 func (h *Handler) Render(ctx context.Context, w http.ResponseWriter, t templ.Component) { if err := t.Render(ctx, w); err != nil { h.Log.Error(err.Error(), err, zap.String("templ render", fmt.Sprintf("%v", t)), ) } } func (h *Handler) JSON(w http.ResponseWriter, data any) { respond(w, data) } func (h *Handler) JSONObj(w http.ResponseWriter, message string, data any) { respond(w, Response{Success: true, Message: message, Data: data}) } func (h *Handler) JSONOk(w http.ResponseWriter, message string) { respond(w, Response{Success: true, Message: message}) } func (h *Handler) JSONErr(w http.ResponseWriter, message string) { respond(w, Response{Success: false, Message: message}) } type Response struct { Success bool `json:"success"` Message string `json:"msg"` Data any `json:"data"` } type ResponseTree struct { Status ResponseTreeStatus `json:"status"` Data any `json:"data"` } type ResponseTreeStatus struct { Code int `json:"code"` Message string `json:"message"` } type ResponseList struct { Code int `json:"code"` Message string `json:"msg"` Count int64 `json:"count"` Data any `json:"data"` } func respond(w http.ResponseWriter, data any) { v, err := json.Marshal(data) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json; charset=utf-8") w.WriteHeader(http.StatusOK) _, err = w.Write(v) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }