package moduleadapter import ( "encoding/json" "net/http" "github.com/jackc/pgx/v5/pgxpool" ) type registerRequest struct { ModuleName string `json:"module_name"` ObjectType string `json:"object_type"` RetentionClass string `json:"retention_class"` CallbackURL string `json:"callback_url"` } // RegisterHandler ist die REST-Schnittstelle (Ticket-Technikvorgabe), über // die ein Modul einen Objekttyp registriert (Akzeptanzkriterium 1). // POST /register mit JSON-Body {module_name, object_type, callback_url}. func RegisterHandler(pool *pgxpool.Pool) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "method not allowed", http.StatusMethodNotAllowed) return } var req registerRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, "ungültiger request-body: "+err.Error(), http.StatusBadRequest) return } if req.ModuleName == "" || req.ObjectType == "" || req.RetentionClass == "" || req.CallbackURL == "" { http.Error(w, "module_name, object_type, retention_class und callback_url sind pflichtfelder", http.StatusBadRequest) return } reg, err := Register(r.Context(), pool, req.ModuleName, req.ObjectType, req.RetentionClass, req.CallbackURL) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) _ = json.NewEncoder(w).Encode(reg) } }