package log import ( "arimelody-web/model" repository "arimelody-web/repository/log" "arimelody-web/errors" "fmt" "log" "time" ) type LogService struct { repo repository.LogRepository log *log.Logger } func NewLogService(repo repository.LogRepository, logger *log.Logger) *LogService { return &LogService{ repo: repo, log: logger, } } const DEFAULT_LOG_PAGE_LENGTH = 25 func (s *LogService) Info(logType string, format string, args ...any) { logString := fmt.Sprintf(format, args...) s.log.Printf("[%s] [%s] INFO: %s\n", time.Now().Format(time.UnixDate), logType, logString) if err := s.repo.Create(model.LEVEL_INFO, logType, logString); err != nil { log.Printf("WARN: Failed to push log to database: %v\n", err) } } func (s *LogService) Warn(logType string, format string, args ...any) { logString := fmt.Sprintf(format, args...) log.Printf("[%s] [%s] WARN: %s\n", time.Now().Format(time.UnixDate), logType, logString) if err := s.repo.Create(model.LEVEL_INFO, logType, logString); err != nil { log.Printf("WARN: Failed to push log to database: %v\n", err) } } func (s *LogService) Fetch(id string) (*model.Log, error) { log, err := s.repo.Get(id) if err != nil { return nil, err } if log == nil { return nil, errors.NewNotExistError("Log does not exist") } return log, nil } func (s *LogService) Search( levelFilters []model.LogLevel, typeFilters []string, content string, limit int, offset int, ) ([]*model.Log, error) { return s.repo.Search(levelFilters, typeFilters, content, limit, offset) }