初始化项目框架,完成部分接口开发
This commit is contained in:
92
internal/logic/admin/admin.go
Normal file
92
internal/logic/admin/admin.go
Normal file
@ -0,0 +1,92 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/consts"
|
||||
"server/internal/dao"
|
||||
"server/internal/model"
|
||||
"server/internal/model/do"
|
||||
"server/internal/model/entity"
|
||||
"server/internal/service"
|
||||
"server/utility/ecode"
|
||||
"server/utility/encrypt"
|
||||
"server/utility/jwt"
|
||||
)
|
||||
|
||||
type sAdmin struct{}
|
||||
|
||||
func init() {
|
||||
service.RegisterAdmin(New())
|
||||
}
|
||||
|
||||
func New() service.IAdmin {
|
||||
return &sAdmin{}
|
||||
}
|
||||
|
||||
func (s *sAdmin) Login(ctx context.Context, in *model.AdminLoginIn) (out *model.AdminLoginOut, err error) {
|
||||
admin, err := dao.Admins.Ctx(ctx).Where(dao.Admins.Columns().Username, in.Username).One()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("database_query_failed")
|
||||
}
|
||||
|
||||
if admin.IsEmpty() {
|
||||
return nil, ecode.Auth
|
||||
}
|
||||
|
||||
if !encrypt.ComparePassword(admin[dao.Admins.Columns().PasswordHash].String(), in.Password) {
|
||||
return nil, ecode.Password
|
||||
}
|
||||
token, err := jwt.GenerateToken(&jwt.TokenIn{
|
||||
Role: consts.AdminRoleCode,
|
||||
UserId: admin[dao.Admins.Columns().Id].Int64(),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("token_generation_failed")
|
||||
}
|
||||
return &model.AdminLoginOut{
|
||||
Token: token,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sAdmin) Info(ctx context.Context, in *model.AdminInfoIn) (out *model.AdminInfoOut, err error) {
|
||||
exist, err := dao.Admins.Ctx(ctx).WherePri(in.AdminId).Exist()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("admin_query_failed")
|
||||
}
|
||||
if !exist {
|
||||
return nil, ecode.Auth.Sub("admin_not_found")
|
||||
}
|
||||
var admin entity.Admins
|
||||
err = dao.Admins.Ctx(ctx).WherePri(in.AdminId).Scan(&admin)
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("admin_query_failed")
|
||||
}
|
||||
return &model.AdminInfoOut{
|
||||
AdminId: admin.Id,
|
||||
Username: admin.Username,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sAdmin) EditPass(ctx context.Context, in *model.AdminEditPassIn) (out *model.AdminEditPassOut, err error) {
|
||||
admin, err := dao.Admins.Ctx(ctx).WherePri(in.AdminId).One()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("admin_query_failed")
|
||||
}
|
||||
if admin.IsEmpty() {
|
||||
return nil, ecode.Auth.Sub("admin_not_found")
|
||||
}
|
||||
if !encrypt.ComparePassword(admin[dao.Admins.Columns().PasswordHash].String(), in.OldPass) {
|
||||
return nil, ecode.Password.Sub("password_incorrect")
|
||||
}
|
||||
hash, err := encrypt.EncryptPassword(in.NewPass)
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("password_encryption_failed")
|
||||
}
|
||||
_, err = dao.Admins.Ctx(ctx).WherePri(in.AdminId).Data(do.Admins{PasswordHash: hash}).Update()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("password_update_failed")
|
||||
}
|
||||
return &model.AdminEditPassOut{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user