package handler import ( "encoding/json" "net/http" "aijianzhan/platform/internal/authx" "aijianzhan/platform/internal/dbsync" "aijianzhan/platform/internal/svc" "github.com/zeromicro/go-zero/rest/httpx" ) func syncBindingsListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if !requireDBSync(svcCtx, w) { return } localID := r.URL.Query().Get("local_database_id") tid := syncTenantID(r) var ( list []dbsync.Binding err error ) if authx.SyncTenantWide(r.Context()) { list, err = svcCtx.DBSync.Store().ListBindings(tid, localID) } else { list, err = svcCtx.DBSync.Store().ListBindingsFiltered(tid, authx.UserID(r.Context()), localID) } if err != nil { authx.WriteError(w, http.StatusBadRequest, err.Error()) return } httpx.OkJson(w, map[string]any{"items": list}) } } func syncBindingsEnsureHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if !requireDBSync(svcCtx, w) { return } var body dbsync.Binding if err := json.NewDecoder(r.Body).Decode(&body); err != nil { authx.WriteError(w, http.StatusBadRequest, err.Error()) return } body.TenantID = syncTenantID(r) uid := authx.UserID(r.Context()) if authx.SyncTenantWide(r.Context()) { if body.UserID == 0 { body.UserID = uid } } else { // 用户自助:强制绑定到本人,禁止冒用他人 user_id body.UserID = uid } saved, err := svcCtx.DBSync.Store().EnsureBinding(body) if err != nil { authx.WriteError(w, http.StatusBadRequest, err.Error()) return } httpx.OkJson(w, saved) } }