104 lines
3.1 KiB
Go
104 lines
3.1 KiB
Go
package web
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"ymhut-box/server/unified-management/internal/legacy"
|
|
)
|
|
|
|
func (r *router) handleAdminLegacy(w http.ResponseWriter, req *http.Request) {
|
|
path := cleanPath(req.URL.Path)
|
|
name := ""
|
|
switch {
|
|
case strings.HasPrefix(path, "/api/admin/legacy/update-info"):
|
|
name = "update-info"
|
|
case strings.HasPrefix(path, "/api/admin/legacy/media-types"):
|
|
name = "media-types"
|
|
default:
|
|
parts := strings.Split(strings.TrimPrefix(path, "/api/admin/legacy/"), "/")
|
|
if len(parts) > 0 {
|
|
name = parts[0]
|
|
}
|
|
}
|
|
if name == "" {
|
|
http.NotFound(w, req)
|
|
return
|
|
}
|
|
if req.Method == http.MethodGet && (path == "/api/admin/legacy/update-info" || path == "/api/admin/legacy/media-types") {
|
|
doc, err := r.legacy.Get(req.Context(), name)
|
|
if err != nil {
|
|
writeError(w, http.StatusBadRequest, "LEGACY_GET_FAILED", err)
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, map[string]any{"ok": true, "document": doc})
|
|
return
|
|
}
|
|
if req.Method == http.MethodPut && (path == "/api/admin/legacy/update-info" || path == "/api/admin/legacy/media-types") {
|
|
var body legacy.SaveRequest
|
|
if err := json.NewDecoder(req.Body).Decode(&body); err != nil {
|
|
writeError(w, http.StatusBadRequest, "INVALID_PAYLOAD", err)
|
|
return
|
|
}
|
|
doc, err := r.legacy.Save(req.Context(), name, body, "admin")
|
|
if err != nil {
|
|
writeError(w, http.StatusBadRequest, "LEGACY_SAVE_FAILED", err)
|
|
return
|
|
}
|
|
if name == "media-types" {
|
|
_ = r.sources.ImportLegacyMediaTypes(req.Context())
|
|
}
|
|
if name == "update-info" {
|
|
r.syncNoticeFromLegacyUpdateInfo(req, doc.Raw)
|
|
}
|
|
writeJSON(w, http.StatusOK, map[string]any{"ok": true, "document": doc})
|
|
return
|
|
}
|
|
if req.Method == http.MethodPost && strings.HasSuffix(path, "/validate") {
|
|
var body legacy.SaveRequest
|
|
if err := json.NewDecoder(req.Body).Decode(&body); err != nil {
|
|
writeError(w, http.StatusBadRequest, "INVALID_PAYLOAD", err)
|
|
return
|
|
}
|
|
doc, err := r.legacy.Validate(req.Context(), name, body)
|
|
if err != nil {
|
|
writeError(w, http.StatusBadRequest, "LEGACY_VALIDATE_FAILED", err)
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, map[string]any{"ok": true, "document": doc})
|
|
return
|
|
}
|
|
if req.Method == http.MethodPost && strings.HasSuffix(path, "/restore") {
|
|
var body struct {
|
|
RevisionID int64 `json:"revisionId"`
|
|
}
|
|
if err := json.NewDecoder(req.Body).Decode(&body); err != nil || body.RevisionID <= 0 {
|
|
writeError(w, http.StatusBadRequest, "INVALID_PAYLOAD", errors.New("revisionId is required"))
|
|
return
|
|
}
|
|
doc, err := r.legacy.Restore(req.Context(), name, body.RevisionID, "admin")
|
|
if err != nil {
|
|
writeError(w, http.StatusBadRequest, "LEGACY_RESTORE_FAILED", err)
|
|
return
|
|
}
|
|
if name == "media-types" {
|
|
_ = r.sources.ImportLegacyMediaTypes(req.Context())
|
|
}
|
|
if name == "update-info" {
|
|
r.syncNoticeFromLegacyUpdateInfo(req, doc.Raw)
|
|
}
|
|
writeJSON(w, http.StatusOK, map[string]any{"ok": true, "document": doc})
|
|
return
|
|
}
|
|
http.NotFound(w, req)
|
|
}
|
|
|
|
func (r *router) syncNoticeFromLegacyUpdateInfo(req *http.Request, raw string) {
|
|
if r.notices == nil {
|
|
return
|
|
}
|
|
_ = r.notices.SyncFromLegacyUpdateInfo(req.Context(), raw, "admin")
|
|
}
|