34 lines
1.3 KiB
Go
34 lines
1.3 KiB
Go
// Package service 业务逻辑层。
|
||
//
|
||
// 分层约定:
|
||
// - 只依赖 repository 接口,不感知 *gorm.DB,也不感知 *gin.Context;
|
||
// - 业务规则(摘要截断长度、精选品牌排名、密码强度、令牌签发)集中在这里,
|
||
// handler 只负责 HTTP 参数解析与响应写出。
|
||
package service
|
||
|
||
import "net/http"
|
||
|
||
// Error 携带 HTTP 状态码的业务错误。
|
||
//
|
||
// service 层不引入 gin 依赖,但错误的语义(是客户端参数错误还是服务端故障)
|
||
// 只有业务层清楚。用状态码 + 文案表达,handler 直接透传,
|
||
// 既保持了分层,又能让错误响应与原项目逐字一致。
|
||
type Error struct {
|
||
Status int
|
||
Message string
|
||
}
|
||
|
||
func (e *Error) Error() string { return e.Message }
|
||
|
||
// NewError 构造业务错误。
|
||
func NewError(status int, msg string) *Error {
|
||
return &Error{Status: status, Message: msg}
|
||
}
|
||
|
||
func badRequest(msg string) *Error { return NewError(http.StatusBadRequest, msg) }
|
||
func unauthorized(msg string) *Error { return NewError(http.StatusUnauthorized, msg) }
|
||
func internalErr(msg string) *Error { return NewError(http.StatusInternalServerError, msg) }
|
||
|
||
// ErrArticleNotFound 文章不存在,文案与原项目一致。
|
||
var ErrArticleNotFound = NewError(http.StatusNotFound, "文章不存在")
|