c0dbfd02b8
modified: main_dc/yalarba/api_yal/go.sum new file: main_dc/yalarba/api_yal/internal/dto/account_dto.go new file: main_dc/yalarba/api_yal/internal/handlers/account.go modified: main_dc/yalarba/api_yal/internal/handlers/auth.go modified: main_dc/yalarba/api_yal/internal/router/router.go new file: main_dc/yalarba/api_yal/internal/service/account_service.go add some auth functions into api_yal
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package handlers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"net/http"
|
|
|
|
"api_yal/internal/dto"
|
|
"api_yal/internal/service"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
// AuthHandler обработчик для аутентификации
|
|
type AuthHandler struct {
|
|
accountService service.AccountService
|
|
validator *validator.Validate
|
|
}
|
|
|
|
// NewAuthHandler создает новый экземпляр AuthHandler
|
|
func NewAuthHandler(accountService service.AccountService) *AuthHandler {
|
|
return &AuthHandler{
|
|
accountService: accountService,
|
|
validator: validator.New(),
|
|
}
|
|
}
|
|
|
|
// Register регистрация аккаунта пользователя
|
|
func (h *AuthHandler) Register(w http.ResponseWriter, r *http.Request) {
|
|
|
|
var req dto.RegisterRequest
|
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
|
http.Error(w, "Invalid request body", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
if err := h.validator.Struct(req); err != nil {
|
|
var invalidValidationError *validator.InvalidValidationError
|
|
if errors.As(err, &invalidValidationError) {
|
|
http.Error(w, "Invalid request", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
var errs []string
|
|
for _, err := range err.(validator.ValidationErrors) {
|
|
errs = append(errs, fmt.Sprintf("field %s is invalid: %s", err.Field(), err.Tag()))
|
|
}
|
|
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
json.NewEncoder(w).Encode(map[string]interface{}{
|
|
"error": "Validation failed",
|
|
"fields": errs,
|
|
})
|
|
return
|
|
}
|
|
|
|
|
|
|
|
} |