mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 22:06:38 +08:00
59 lines
1.8 KiB
Go
59 lines
1.8 KiB
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package references
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/Rain-kl/Wavelet/internal/service"
|
|
"github.com/Rain-kl/Wavelet/internal/util"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// customRequest 客户端请求体 DTO
|
|
type customRequest struct {
|
|
Payload string `json:"payload" binding:"required,min=1,max=100"`
|
|
}
|
|
|
|
// customResponse API 响应体 DTO
|
|
type customResponse struct {
|
|
Result string `json:"result"`
|
|
}
|
|
|
|
// HandleCustomBusiness 示例 API Handler
|
|
// @Summary 示例定制业务接口
|
|
// @Description 接收数据载荷,调用 Service 执行核心逻辑,并返回统一格式的 JSON 结果。
|
|
// @Tags custom
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param request body customRequest true "业务请求参数"
|
|
// @Success 200 {object} util.ResponseAny{data=customResponse} "操作成功"
|
|
// @Router /api/v1/custom/business [post]
|
|
func HandleCustomBusiness(c *gin.Context) {
|
|
// 1. 参数绑定与校验
|
|
var req customRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(http.StatusBadRequest, util.Err("参数校验失败:载荷不能为空且在 1-100 字符内"))
|
|
return
|
|
}
|
|
|
|
// 2. 模拟获取当前上下文与已登录用户(例如从 Session 中提取)
|
|
// 通常结合 oauth.LoginRequired() 等中间件使用
|
|
userID := int64(9527)
|
|
|
|
// 3. 实例化业务 Service 并调用核心逻辑
|
|
// 注意传入 c.Request.Context() 以正确传递 OpenTelemetry Tracing 等上下文信息
|
|
svc := service.NewCustomService()
|
|
resText, err := svc.ProcessBusinessData(c.Request.Context(), userID, req.Payload)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, util.Err(err.Error()))
|
|
return
|
|
}
|
|
|
|
// 4. 返回符合外层形状规范 { "error_msg": "", "data": ... } 的统一成功响应
|
|
c.JSON(http.StatusOK, util.OK(customResponse{
|
|
Result: resText,
|
|
}))
|
|
}
|