package handlers import ( "net/http" "erp-mvp/core-service/internal/models" "erp-mvp/core-service/internal/service" "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10" ) type AuthHandler struct { authService service.AuthService validate *validator.Validate } func NewAuthHandler(authService service.AuthService) *AuthHandler { return &AuthHandler{ authService: authService, validate: validator.New(), } } // Register регистрация новой организации и пользователя func (h *AuthHandler) Register(c *gin.Context) { var req models.RegisterRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request body"}) return } // Валидируем запрос if err := h.validate.Struct(req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Validation failed", "details": err.Error()}) return } // Выполняем регистрацию response, err := h.authService.Register(c.Request.Context(), &req) if err != nil { if validationErr, ok := err.(*service.ValidationError); ok { c.JSON(http.StatusBadRequest, gin.H{"error": validationErr.Message}) return } c.JSON(http.StatusInternalServerError, gin.H{"error": "Registration failed"}) return } c.JSON(http.StatusCreated, response) } // Login вход в систему func (h *AuthHandler) Login(c *gin.Context) { var req models.LoginRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request body"}) return } // Валидируем запрос if err := h.validate.Struct(req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Validation failed", "details": err.Error()}) return } // Выполняем вход response, err := h.authService.Login(c.Request.Context(), &req) if err != nil { if validationErr, ok := err.(*service.ValidationError); ok { c.JSON(http.StatusUnauthorized, gin.H{"error": validationErr.Message}) return } c.JSON(http.StatusInternalServerError, gin.H{"error": "Login failed"}) return } c.JSON(http.StatusOK, response) }