Write the Code. Change the World.

9月 09

goframe 没有其他 orm 的 hasOne,hasMany, belongsTo 等等这样的模型关联。 goframe 说这个对开发者有一定的心智负担。goframe 有 scanList 和 自己的 with。先了解试试用吧。

https://goframe.org/pages/viewpage.action?pageId=1114326

https://goframe.org/pages/viewpage.action?pageId=7297190

之前完成了用户的登录、注册以及个人信息的获取。这个个人信息的获取,只是单表的信息。现在想要用户的其他信息。这个时候,就需要更多的查询。

如果使用 orm,就可以通过 with 就可以搞定的。但是 with 只有定义好了规则才有用。所以,这个时候就需要组合想要的 dao 了。而 dao 是通过 gf gen dao 生的,只要表不变, dao 就不变。重复生也不变,所以就不能去修改 dao。那么只能新文件中来组合了。

因为之前定义 req 和 res 的时候,已经在 model 里边加了一个文件。那么在其中再加一个组合关系就好。

于是,修改 internal/model/admin/user.go,增加以下组合。

type User struct {
    entity.Users
    UserExtends *entity.UserExtends      `orm:"with:user_id=id" json:"user_extends"`
    Roles       []map[string]interface{} `json:"roles,omitempty"`
    Permissions []Permission             `json:"permissions,omitempty"`
}

// 用户权限
type Permission struct {
    entity.Permissions
    Permission []Permission `json:"permission,omitempty"`
}

从组合中可以看到使用 orm 来获取的仅仅是扩展信息。另外的 roles 和 permissions 是另外赋值进去的。

roles 和 permissions 之所以是另外赋值。是因为它们的获取会关联更多的表。不太适合嵌套去处理。

虽然 User 中定义了 with 相关的 UserExtends。 如果调用的时候,没使用 with 也是不会去查询的。其他的两个,如果不赋值也是不会有的。最基础的 Users 依然还是 entity 里的那个 user。

后来还是改了,表名还是用复数吧。所以命令回来生成的 dao 和 model 也是复数。复数就复数吧。

继续阅读

9月 09

获取图片验证码、登录、获取个人信息都好了。现在做注册功能。

在 ctrl 中调整好姿势。

internal/controller/user/user_admin_sign_up.go

package user

import (
    "context"

    "goSimpleAdmin/api/user/admin"
    model "goSimpleAdmin/internal/model/admin"
    "goSimpleAdmin/internal/service"
)

func (c *ControllerAdmin) SignUp(ctx context.Context, req *admin.SignUpReq) (res *admin.SignUpRes, err error) {
    data, err := service.User().SignUp(ctx, model.SignUpReq{
        Nickname:   req.Nickname,
        Account:    req.Account,
        Password:   req.Password,
        VerifyKey:  req.VerifyKey,
        VerifyCode: req.VerifyCode,
    })

    if err != nil {
        return
    }

    res = new(admin.SignUpRes)
    res.SignUpRes = data
    return res, err
}

继续阅读