package system import ( "context" "management/internal/erpserver/model/dto" "management/internal/erpserver/model/system" "management/internal/erpserver/repository" ) type loginLogRepository struct { repo *repository.Repository } func NewLoginLogRepository(repo *repository.Repository) system.LoginLogRepository { return &loginLogRepository{ repo: repo, } } func (s *loginLogRepository) Create(ctx context.Context, obj *system.LoginLog) error { return s.repo.DB(ctx).Create(obj).Error } func (s *loginLogRepository) GetLatest(ctx context.Context, email string) ([]*system.LoginLog, error) { var logs []*system.LoginLog err := s.repo.DB(ctx). Where("email = ?", email). Order("id DESC"). Limit(2). Find(&logs). Error if err != nil { return nil, err } return logs, nil } func (s *loginLogRepository) List(ctx context.Context, q dto.SearchDto) ([]*system.LoginLog, int64, error) { query := s.repo.DB(ctx). Model(&system.LoginLog{}). Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd) if q.SearchEmail != "" { query = query.Where("email LIKE ?", "%"+q.SearchEmail+"%") } var count int64 err := query.Count(&count).Error if err != nil { return nil, 0, err } var logs []*system.LoginLog err = query. Order("id DESC"). Offset((q.Page - 1) * q.Rows). Limit(q.Rows). Find(&logs). Error if err != nil { return nil, 0, err } return logs, count, nil } func (s *loginLogRepository) Count(ctx context.Context, email string) (int64, error) { var count int64 err := s.repo.DB(ctx). Model(&system.LoginLog{}). Where("email = ?", email). Count(&count). Error if err != nil { return 0, err } return count, nil }