refactor: разделение кода на пакеты и улучшение архитектуры

- Создана новая структура проекта с разделением на пакеты
- Добавлены интерфейсы для всех сервисов (Git, Quartz, Files, Build)
- Реализован Dependency Injection для сервисов
- Добавлены middleware для логирования, Request ID и Response Time
- Создан пакет конфигурации с валидацией
- Улучшено логирование через интерфейс
- Добавлены обработчики HTTP в отдельных пакетах
- Создана структура для тестирования
- Добавлены конфигурационные файлы и документация
This commit is contained in:
Andrey Epifancev
2025-08-11 19:45:54 +04:00
parent 1b340362be
commit 04cea69d6e
16 changed files with 1293 additions and 0 deletions

130
pkg/logger/logger.go Normal file
View File

@@ -0,0 +1,130 @@
package logger
import (
"github.com/sirupsen/logrus"
)
// Logger интерфейс для логирования
type Logger interface {
Info(args ...interface{})
Infof(format string, args ...interface{})
Error(args ...interface{})
Errorf(format string, args ...interface{})
Warn(args ...interface{})
Warnf(format string, args ...interface{})
Debug(args ...interface{})
Debugf(format string, args ...interface{})
Fatalf(format string, args ...interface{})
WithField(key string, value interface{}) Logger
WithFields(fields map[string]interface{}) Logger
}
// logrusLogger реализация логгера через logrus
type logrusLogger struct {
logger *logrus.Logger
}
// New создает новый экземпляр логгера
func New() Logger {
logger := logrus.New()
logger.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
logger.SetLevel(logrus.InfoLevel)
return &logrusLogger{logger: logger}
}
// NewWithLevel создает логгер с указанным уровнем
func NewWithLevel(level string) Logger {
logger := logrus.New()
logger.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
switch level {
case "debug":
logger.SetLevel(logrus.DebugLevel)
case "info":
logger.SetLevel(logrus.InfoLevel)
case "warn":
logger.SetLevel(logrus.WarnLevel)
case "error":
logger.SetLevel(logrus.ErrorLevel)
default:
logger.SetLevel(logrus.InfoLevel)
}
return &logrusLogger{logger: logger}
}
// Info логирует информационное сообщение
func (l *logrusLogger) Info(args ...interface{}) {
l.logger.Info(args...)
}
// Fatalf логирует критическую ошибку и завершает программу
func (l *logrusLogger) Fatalf(format string, args ...interface{}) {
l.logger.Fatalf(format, args...)
}
// Infof логирует форматированное информационное сообщение
func (l *logrusLogger) Infof(format string, args ...interface{}) {
l.logger.Infof(format, args...)
}
// Error логирует сообщение об ошибке
func (l *logrusLogger) Error(args ...interface{}) {
l.logger.Error(args...)
}
// Errorf логирует форматированное сообщение об ошибке
func (l *logrusLogger) Errorf(format string, args ...interface{}) {
l.logger.Errorf(format, args...)
}
// Warn логирует предупреждение
func (l *logrusLogger) Warn(args ...interface{}) {
l.logger.Warn(args...)
}
// Warnf логирует форматированное предупреждение
func (l *logrusLogger) Warnf(format string, args ...interface{}) {
l.logger.Warnf(format, args...)
}
// Debug логирует отладочное сообщение
func (l *logrusLogger) Debug(args ...interface{}) {
l.logger.Debug(args...)
}
// Debugf логирует форматированное отладочное сообщение
func (l *logrusLogger) Debugf(format string, args ...interface{}) {
l.logger.Debugf(format, args...)
}
// WithField добавляет поле к логгеру
func (l *logrusLogger) WithField(key string, value interface{}) Logger {
// Создаем новый логгер с полем
newLogger := logrus.New()
newLogger.SetFormatter(l.logger.Formatter)
newLogger.SetLevel(l.logger.Level)
newLogger.SetOutput(l.logger.Out)
// Добавляем поле к контексту
newLogger.WithField(key, value)
return &logrusLogger{logger: newLogger}
}
// WithFields добавляет поля к логгеру
func (l *logrusLogger) WithFields(fields map[string]interface{}) Logger {
// Создаем новый логгер с полями
newLogger := logrus.New()
newLogger.SetFormatter(l.logger.Formatter)
newLogger.SetLevel(l.logger.Level)
newLogger.SetOutput(l.logger.Out)
// Добавляем поля к контексту
newLogger.WithFields(fields)
return &logrusLogger{logger: newLogger}
}