1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| package service
import ( "your-project/dao" "your-project/errors" "your-project/model" )
type UserService struct { userDAO *dao.UserDAO }
func NewUserService(userDAO *dao.UserDAO) *UserService { return &UserService{userDAO: userDAO} }
type CreateUserRequest struct { Name string `json:"name" binding:"required"` Email string `json:"email" binding:"required,email"` }
func (s *UserService) GetUser(userID int64) (*model.User, error) { if userID <= 0 { return nil, errors.WrapBusinessError( errors.CodeInvalidParam, "用户ID必须大于0", nil, ) }
user, err := s.userDAO.GetUserByID(userID) if err != nil { var businessErr *errors.BusinessError if errors.As(err, &businessErr) { return nil, err } return nil, errors.WrapBusinessError( errors.CodeDBError, "获取用户信息失败", err, ) } if user.Status == "banned" { return nil, errors.NewBusinessError(10004, "用户已被封禁") } return user, nil }
func (s *UserService) CreateUser(req *CreateUserRequest) (*model.User, error) { if req.Name == "" { return nil, errors.WrapBusinessError( errors.CodeInvalidParam, "用户名不能为空", nil, ) }
if len(req.Name) < 2 || len(req.Name) > 20 { return nil, errors.WrapBusinessError( errors.CodeInvalidParam, "用户名长度必须在2-20个字符之间", nil, ) } user := &model.User{ Name: req.Name, Email: req.Email, } if err := s.userDAO.CreateUser(user); err != nil { return nil, errors.WrapBusinessError( errors.CodeDBError, "创建用户失败", err, ) } return user, nil }
|