正确处理gRPC类型到SQL ORM

时间:2019-04-28 13:56:27

标签: go

我正在实现一个gRPC服务器,并使用一个称为Boiler for Go的ORM。我已经到了建立所有模型和原型的地步,现在我正在处理特定的类型问题。

在protobuf文件中,我已将大多数类型声明为strings。但是我的ORM在其模型中(由于与Postgres的接口方式)将字符串视为null.String。因此,当我尝试类似的操作时,我得到一个错误:

user := &models.User{
    FirstName:   req.FirstName,
    LastName:    req.LastName,
    Email:       req.Email,
    Gender:      req.Gender,
    PhoneNumber: req.PhoneNumber,
}

错误:services/users.go:46:3: cannot use req.FirstName (type string) as type null.String in field value

问题是处理这种情况的最合适方法是什么。我可以:生成一个新结构(我已经在使用它进行数据验证了)并将其转换为null.String或我想我可以尝试以某种方式强制进行转换?

然后,问题就变成了,如果用户不提供API中的值,并且验证过程允许该值,那么如何处理不存在的记录?

编辑:好像SQLBoiler开发人员拥有一个用于分别处理null的程序包。即。 null.StringFrom()null.Int15From等,我实质上将所有字段都这样包装:

user := &models.User{
    FirstName:        null.StringFrom(req.FirstName),
    LastName:         null.StringFrom(req.LastName),
    Email:            null.StringFrom(req.Email),
    Password:         string(password_hash),
    Role:             "BASIC_USER",
    Status:           "ACTIVE",
    Gender:           null.Int16From(req.Gender),
    PhoneNumber:      null.StringFrom(req.PhoneNumber),
    VerificationCode: null.StringFrom(code.String()),
}

感觉有点脏,但我看不到其他任何选择。建议/意见吗?

0 个答案:

没有答案