package handlers import ( "net/http" "cmr-backend/internal/httpx" "cmr-backend/internal/service" ) type DevHandler struct { devService *service.DevService } func NewDevHandler(devService *service.DevService) *DevHandler { return &DevHandler{devService: devService} } func (h *DevHandler) BootstrapDemo(w http.ResponseWriter, r *http.Request) { result, err := h.devService.BootstrapDemo(r.Context()) if err != nil { httpx.WriteError(w, err) return } httpx.WriteJSON(w, http.StatusOK, map[string]any{"data": result}) } func (h *DevHandler) Workbench(w http.ResponseWriter, r *http.Request) { if !h.devService.Enabled() { http.NotFound(w, r) return } w.Header().Set("Content-Type", "text/html; charset=utf-8") _, _ = w.Write([]byte(devWorkbenchHTML)) } const devWorkbenchHTML = `
把入口、登录、首页、活动详情、launch、session、profile 串成一条完整调试链。这个页面只在非 production 环境开放,适合后续继续扩展成你想要的 API 测试面板。
初始化 demo tenant / channel / event / card。
tenant_demo / mini-demo / evt_demo_001从本地 event 目录导入 source config,生成 preview build,并可直接发布成当前 release。
当前调试上下文,所有按钮共享这一组状态。
-------开发环境可直接使用 dev-xxx code。
把常用接口串成一键工作流,减少重复点击。
最后一次请求会生成一条可复制的 curl,后面做问题复现会方便很多。
保存当前表单状态为可复用场景,也支持导入导出 JSON,适合后续切换不同俱乐部、入口和 event。
最后一次请求的结果会记录在这里,便于后续做请求回放和用例保存。
最近 12 次请求会保留在浏览器本地,刷新页面不会丢。
把当前已实现接口按分组放进 workbench,直接看中文说明、鉴权要求和关键参数,不用来回翻文档。
dev- 前缀 code 直接模拟登录。launched 推进到 running。