feat(lyra): 启动 HTTP 服务并添加示例接口

- 注册 GET /hello,使用统一响应结构并添加路由回归测试
- 使用 lyra.toml 配置 Gin 模式与监听地址,处理启动错误
- 明确 handler/service 业务分包约定并同步文档
This commit is contained in:
2026-10-17 10:32:44 +08:00
parent 8b320817ed
commit 3f16384376
12 changed files with 154 additions and 46 deletions
+3 -2
View File
@@ -1,5 +1,6 @@
# router 包
- 负责路由注册与项目路径前缀,例如 `/api/polaris`。
- 负责路由注册与项目路径前缀,例如 `/api/polaris`;入口文件为 `router.go`,对外暴露 `RegisterRoutes`。
- Gin 的路由与请求处理逻辑留在 HTTP 层;service 和 model 不依赖 Gin。
- 路由随资源实现逐步补充,不按业务项目建立代码子目录。
- 路由随资源实现逐步补充;包暂时平铺,不按业务项目建立代码子目录。
- 路由变更以 httptest 回归测试守护,不监听实际端口、不连接数据库。
@@ -0,0 +1,11 @@
package router
import (
"lyra/internal/handler"
"github.com/gin-gonic/gin"
)
func RegisterRoutes(router *gin.Engine) {
router.GET("/hello", handler.Hello())
}
@@ -0,0 +1,28 @@
package router_test
import (
"net/http"
"net/http/httptest"
"testing"
"lyra/internal/router"
"github.com/gin-gonic/gin"
)
func TestHelloRoute(t *testing.T) {
gin.SetMode(gin.TestMode)
engine := gin.New()
router.RegisterRoutes(engine)
recorder := httptest.NewRecorder()
engine.ServeHTTP(recorder, httptest.NewRequest(http.MethodGet, "/hello", nil))
if recorder.Code != http.StatusOK {
t.Fatalf("GET /hello status = %d, want %d", recorder.Code, http.StatusOK)
}
want := `{"success":true,"data":"Hello, World!"}`
if got := recorder.Body.String(); got != want {
t.Fatalf("GET /hello body = %q, want %q", got, want)
}
}