// internal/services/audit_service.go package services import ( "lost-and-found/internal/models" "lost-and-found/internal/repositories" "gorm.io/gorm" ) type AuditService struct { auditLogRepo *repositories.AuditLogRepository } func NewAuditService(db *gorm.DB) *AuditService { return &AuditService{ auditLogRepo: repositories.NewAuditLogRepository(db), } } // GetAllAuditLogs gets all audit logs func (s *AuditService) GetAllAuditLogs(page, limit int, action, entityType string, userID *uint) ([]models.AuditLogResponse, int64, error) { logs, total, err := s.auditLogRepo.FindAll(page, limit, action, entityType, userID) if err != nil { return nil, 0, err } var responses []models.AuditLogResponse for _, log := range logs { responses = append(responses, log.ToResponse()) } return responses, total, nil } // GetAuditLogsByUser gets audit logs by user func (s *AuditService) GetAuditLogsByUser(userID uint, page, limit int) ([]models.AuditLogResponse, int64, error) { logs, total, err := s.auditLogRepo.FindByUser(userID, page, limit) if err != nil { return nil, 0, err } var responses []models.AuditLogResponse for _, log := range logs { responses = append(responses, log.ToResponse()) } return responses, total, nil } // GetAuditLogsByEntity gets audit logs by entity func (s *AuditService) GetAuditLogsByEntity(entityType string, entityID uint, page, limit int) ([]models.AuditLogResponse, int64, error) { logs, total, err := s.auditLogRepo.FindByEntity(entityType, entityID, page, limit) if err != nil { return nil, 0, err } var responses []models.AuditLogResponse for _, log := range logs { responses = append(responses, log.ToResponse()) } return responses, total, nil } // LogAction creates a new audit log entry func (s *AuditService) LogAction(userID *uint, action, entityType string, entityID *uint, details, ipAddress, userAgent string) error { return s.auditLogRepo.Log(userID, action, entityType, entityID, details, ipAddress, userAgent) }