Refactor backend APIs to RESTful route patterns.

Align group and conversation handlers/services with path-based endpoints, and unify response/service error handling for related modules.

Made-with: Cursor
This commit is contained in:
2026-03-10 20:52:50 +08:00
parent 86ef150fec
commit 21293644b8
10 changed files with 217 additions and 189 deletions

View File

@@ -4,6 +4,8 @@ import (
"net/http"
"github.com/gin-gonic/gin"
"carrot_bbs/internal/service"
)
// Response 统一响应结构
@@ -115,3 +117,46 @@ func Paginated(c *gin.Context, list interface{}, total int64, page, pageSize int
TotalPages: totalPages,
})
}
// HandleServiceError 统一处理 Service 错误
// 如果 err 是 *service.ServiceError返回对应的业务错误码和消息
// 如果 err 是其他错误,返回 false调用方应处理通用错误
// 返回 true 表示错误已处理false 表示需要调用方继续处理
func HandleServiceError(c *gin.Context, err error) bool {
if err == nil {
return false
}
if se, ok := err.(*service.ServiceError); ok {
ErrorWithStatusCode(c, statusCodeFromCode(se.Code), se.Code, se.Message)
return true
}
return false
}
// HandleError 统一处理错误(带默认消息)
// 如果 err 是 *service.ServiceError返回对应的业务错误码和消息
// 如果 err 是其他错误,返回 InternalServerError 并使用 defaultMessage
func HandleError(c *gin.Context, err error, defaultMessage string) {
if err == nil {
return
}
if se, ok := err.(*service.ServiceError); ok {
ErrorWithStatusCode(c, statusCodeFromCode(se.Code), se.Code, se.Message)
return
}
InternalServerError(c, defaultMessage)
}
// statusCodeFromCode 根据业务错误码获取 HTTP 状态码
func statusCodeFromCode(code int) int {
switch {
case code >= 200 && code < 300:
return http.StatusOK
case code >= 400 && code < 500:
return code
case code >= 500:
return code
default:
return http.StatusBadRequest
}
}