init
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"github.com/goravel/framework/facades"
|
||||
|
||||
apperrors "goravel/app/errors"
|
||||
"goravel/app/http/helpers"
|
||||
"goravel/app/models"
|
||||
)
|
||||
|
||||
type LoginLogService interface {
|
||||
// GetByID 根据ID获取登录日志
|
||||
GetByID(id uint, withAdmin bool) (*models.LoginLog, error)
|
||||
// GetList 获取登录日志列表
|
||||
GetList(filters LoginLogFilters, page, pageSize int) ([]models.LoginLog, int64, error)
|
||||
}
|
||||
|
||||
// LoginLogFilters 登录日志查询过滤器
|
||||
type LoginLogFilters struct {
|
||||
AdminID string
|
||||
Username string
|
||||
IP string
|
||||
Status string
|
||||
StartTime string
|
||||
EndTime string
|
||||
OrderBy string
|
||||
}
|
||||
|
||||
type LoginLogServiceImpl struct {
|
||||
}
|
||||
|
||||
func NewLoginLogService() LoginLogService {
|
||||
return &LoginLogServiceImpl{}
|
||||
}
|
||||
|
||||
// GetByID 根据ID获取登录日志
|
||||
func (s *LoginLogServiceImpl) GetByID(id uint, withAdmin bool) (*models.LoginLog, error) {
|
||||
var log models.LoginLog
|
||||
query := facades.Orm().Query().Where("id", id)
|
||||
|
||||
// 预加载关联
|
||||
if withAdmin {
|
||||
query = query.With("Admin")
|
||||
}
|
||||
|
||||
if err := query.FirstOrFail(&log); err != nil {
|
||||
return nil, apperrors.ErrLogNotFound.WithError(err)
|
||||
}
|
||||
|
||||
return &log, nil
|
||||
}
|
||||
|
||||
// GetList 获取登录日志列表
|
||||
func (s *LoginLogServiceImpl) GetList(filters LoginLogFilters, page, pageSize int) ([]models.LoginLog, int64, error) {
|
||||
query := facades.Orm().Query().Model(&models.LoginLog{})
|
||||
|
||||
// 应用筛选条件
|
||||
if filters.AdminID != "" {
|
||||
query = query.Where("admin_id", filters.AdminID)
|
||||
}
|
||||
if filters.Username != "" {
|
||||
query = query.Where("username LIKE ?", "%"+filters.Username+"%")
|
||||
}
|
||||
if filters.IP != "" {
|
||||
query = query.Where("ip LIKE ?", "%"+filters.IP+"%")
|
||||
}
|
||||
if filters.Status != "" {
|
||||
query = query.Where("status = ?", filters.Status)
|
||||
}
|
||||
if filters.StartTime != "" {
|
||||
query = query.Where("created_at >= ?", filters.StartTime)
|
||||
}
|
||||
if filters.EndTime != "" {
|
||||
query = query.Where("created_at <= ?", filters.EndTime)
|
||||
}
|
||||
|
||||
// 应用排序
|
||||
orderBy := filters.OrderBy
|
||||
if orderBy == "" {
|
||||
orderBy = "id:desc"
|
||||
}
|
||||
query = helpers.ApplySort(query, orderBy, "id:desc")
|
||||
|
||||
// 分页查询
|
||||
var logs []models.LoginLog
|
||||
var total int64
|
||||
if err := query.With("Admin").Paginate(page, pageSize, &logs, &total); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return logs, total, nil
|
||||
}
|
||||
Reference in New Issue
Block a user