94 lines
2.5 KiB
Go
94 lines
2.5 KiB
Go
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{
|
|
Id: admin.Id,
|
|
Username: admin.Username,
|
|
Role: consts.AdminRoleCode,
|
|
}, 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
|
|
}
|