Files
nl_cms-api/internal/dao/admin.go
2025-07-29 12:45:07 +08:00

95 lines
2.3 KiB
Go

package dao
import (
"context"
"cms-api/internal/model/entity"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
)
// AdminDao 管理员数据访问对象
type AdminDao struct {
table string
group string
columns AdminColumns
}
// AdminColumns 管理员表字段
type AdminColumns struct {
Id string
Username string
Password string
RealName string
Email string
Phone string
Avatar string
RoleId string
Status string
LastLoginAt string
LastLoginIp string
CreatedAt string
UpdatedAt string
DeletedAt string
}
// NewAdminDao 创建管理员DAO
func NewAdminDao() *AdminDao {
return &AdminDao{
group: "default",
table: "cms_admin",
columns: AdminColumns{
Id: "id",
Username: "username",
Password: "password",
RealName: "real_name",
Email: "email",
Phone: "phone",
Avatar: "avatar",
RoleId: "role_id",
Status: "status",
LastLoginAt: "last_login_at",
LastLoginIp: "last_login_ip",
CreatedAt: "created_at",
UpdatedAt: "updated_at",
DeletedAt: "deleted_at",
},
}
}
// Admin 管理员DAO实例
var Admin = NewAdminDao()
// DB 获取数据库连接
func (dao *AdminDao) DB() gdb.DB {
return g.DB(dao.group)
}
// Ctx 创建上下文查询
func (dao *AdminDao) Ctx(ctx context.Context) *gdb.Model {
return dao.DB().Model(dao.table).Safe().Ctx(ctx)
}
// GetByUsername 根据用户名获取管理员
func (dao *AdminDao) GetByUsername(ctx context.Context, username string) (*entity.Admin, error) {
var admin *entity.Admin
err := dao.Ctx(ctx).Where(dao.columns.Username, username).Where(dao.columns.DeletedAt, 0).Scan(&admin)
return admin, err
}
// GetById 根据ID获取管理员
func (dao *AdminDao) GetById(ctx context.Context, id uint64) (*entity.Admin, error) {
var admin *entity.Admin
err := dao.Ctx(ctx).Where(dao.columns.Id, id).Where(dao.columns.DeletedAt, 0).Scan(&admin)
return admin, err
}
// UpdateLastLogin 更新最后登录信息
func (dao *AdminDao) UpdateLastLogin(ctx context.Context, id uint64, ip string) error {
_, err := dao.Ctx(ctx).Data(g.Map{
dao.columns.LastLoginAt: gtime.Now(),
dao.columns.LastLoginIp: ip,
dao.columns.UpdatedAt: gtime.Now(),
}).Where(dao.columns.Id, id).Where(dao.columns.DeletedAt, 0).Update()
return err
}