126 lines
2.8 KiB
Go
126 lines
2.8 KiB
Go
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
|
|
}
|
|
}
|