package repository import ( "gofaster/internal/shared/model" "gofaster/internal/shared/repository" "gorm.io/gorm" ) type ActionLogRepo struct { repository.BaseRepo } func NewActionLogRepo(db *gorm.DB) *ActionLogRepo { return &ActionLogRepo{BaseRepo: *repository.NewBaseRepo(db)} } func (r *ActionLogRepo) Create(log *model.ActionLog) error { return r.DB().Create(log).Error } func (r *ActionLogRepo) GetByID(id uint) (*model.ActionLog, error) { var log model.ActionLog err := r.DB().First(&log, id).Error return &log, err } func (r *ActionLogRepo) ListByUser(userID uint, page, pageSize int) ([]model.ActionLog, int64, error) { var logs []model.ActionLog var count int64 err := r.DB().Model(&model.ActionLog{}).Where("user_id = ?", userID).Count(&count).Error if err != nil { return nil, 0, err } offset := (page - 1) * pageSize err = r.DB().Where("user_id = ?", userID).Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&logs).Error return logs, count, err } func (r *ActionLogRepo) List(page, pageSize int) ([]model.ActionLog, int64, error) { var logs []model.ActionLog var count int64 err := r.DB().Model(&model.ActionLog{}).Count(&count).Error if err != nil { return nil, 0, err } offset := (page - 1) * pageSize err = r.DB().Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&logs).Error return logs, count, err } func (r *ActionLogRepo) Search(query string, page, pageSize int) ([]model.ActionLog, int64, error) { var logs []model.ActionLog var count int64 searchQuery := "%" + query + "%" countQuery := r.DB().Model(&model.ActionLog{}). Where("username LIKE ? OR action LIKE ? OR path LIKE ? OR method LIKE ?", searchQuery, searchQuery, searchQuery, searchQuery) err := countQuery.Count(&count).Error if err != nil { return nil, 0, err } offset := (page - 1) * pageSize err = countQuery.Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&logs).Error return logs, count, err }