紧接着上一篇末尾的controller层操作,为controller层编写代码完成功能
编写controller层
参考官方示例项目的代码,例如登录操作:
func (c *ControllerV1) SignIn(ctx context.Context, req *v1.SignInReq) (res *v1.SignInRes, err error) {
err = service.User().SignIn(ctx, model.UserSignInInput{
Passport: req.Passport,
Password: req.Password,
})
return
}
仿照这个样式,在/controller/admin目录下创建admin_v1_sign_in.go文件。
填入
func (c *ControllerV1) SignIn(ctx context.Context, req *v1.SignInReq) (res *v1.SignInRes, err error) {
err = service.Admin().SignIn(ctx, model.AdminSignInInput{
Name: req.Name,
Password: req.Password,
})
return
}
service爆红,由官方文档可知:
可以按照一定的编码规范,从logic
业务逻辑代码生成service
接口定义代码。因此先编写logic层的代码。此时查看示例项目,发现logic下有除了user的功能代码外,还有三个包
由于不清楚具体作用,在项目中就不考虑添加,以实现基础功能为主。
实现logic层业务逻辑
创建/logic/admin/admin.go
func init() {
service.RegisterAdmin(New())
}
func New() service.IAdmin { return &sAdmin{} }
func (s *sAdmin) SignIn(ctx context.Context, in model.AdminSignInInput) (err error) {
var admin *entity.Admin
err = dao.Admin.Ctx(ctx).Where(do.Admin{
Name: in.Name,
Password: in.Password,
}).Scan(&admin)
if err != nil {
return err
}
if admin == nil {
return gerror.New(`Passport or Password not correct`)
}
return nil
}
model.AdminSignInInput会报错,因此需要在model目录下创建一个admin.go文件,定义这个结构体
package model
type AdminSignInInput struct {
Name string
Password string
}
全部编写完成后运行项目,为数据库添加admin数据,通过接口测试数据,发现报错
1. cannot find database driver for specified database type "mysql", did you misspell type name "mysql" or forget importing the database driver? possible reference
解决连接数据库报错
首先怀疑的是config中的数据库配置问题,检查一遍发现配置没问题。想不出还有什么地方出问题,于是复制了问题描述给ai和百度。先按照通义灵码给出的排查方案检查,仍然报同样的错误,最后上百度一查,发现第一条就匹配到了官方文档的常见问题。
进入给出的地址,先安装
go get -u github.com/gogf/gf/contrib/drivers/mysql/v2
然后在main.go中引入
import _ "github.com/gogf/gf/contrib/drivers/mysql/v2"
再测试一下接口遍,问题解决。原来是没有映入社区驱动导致的。
管理员的登录功能就算是告一段落,接下来开始编写其余功能。