77 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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 log system.LoginLog
 | |
| 	err := s.repo.DB(ctx).
 | |
| 		Where("email = ?", email).
 | |
| 		Order("id DESC").
 | |
| 		First(&log).
 | |
| 		Error
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	return &log, 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
 | |
| }
 |