package controllers import ( "GoMembership/internal/models" "GoMembership/internal/services" "encoding/json" // "github.com/gorilla/mux" "net/http" // "strconv" "GoMembership/internal/utils" "GoMembership/pkg/logger" ) type UserController struct { service services.UserService emailService services.EmailService } func NewUserController(service services.UserService, emailService *services.EmailService) *UserController { return &UserController{service, *emailService} } func (uc *UserController) RegisterUser(w http.ResponseWriter, r *http.Request) { logger.Info.Println("registering user") rh := utils.NewResponseHandler(w) var user models.User if err := json.NewDecoder(r.Body).Decode(&user); err != nil { // http.Error(w, err.Error(), http.StatusBadRequest) logger.Error.Printf("Couldn't decode Userdata: %v", err) rh.RespondWithError(http.StatusBadRequest, "Couldn't decode userdata") return } id, err := uc.service.RegisterUser(&user) if err != nil { // http.Error(w, err.Error(), http.StatusInternalServerError) logger.Error.Printf("Couldn't register User: %v", err) rh.RespondWithError(http.StatusInternalServerError, "Couldn't register User") return } // Send welcome email to the user if err := uc.emailService.SendWelcomeEmail(user); err != nil { logger.Error.Printf("Failed to send welcome email to user: %v", err) // rh.RespondWithError(http.StatusServiceUnavailable, "User creation succeeded, but failed to send welcome email to user") } // Notify admin of new user registration if err := uc.emailService.NotifyAdminOfNewUser(user.Email); err != nil { logger.Error.Printf("Failed to notify admin of new user registration: %v", err) // rh.RespondWithError(http.StatusServiceUnavailable, "User creation succeeded, but failed to notify admin of new user registration") } rh.RespondWithJSON(http.StatusCreated, map[string]interface{}{ "status": "success", "id": id, }) } /* func (uc *UserController) LoginUser(w http.ResponseWriter, r *http.Request) { var credentials struct { Email string `json:"email"` Password string `json:"password"` } user, err := uc.service.AuthenticateUser(credentials.Email, credentials.Password) if err != nil { http.Error(w, err.Error(), http.StatusUnauthorized) return } json.NewEncoder(w).Encode(user) } */ /* func (uc *UserController) GetUserID(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id, err := strconv.Atoi(vars["id"]) if err != nil { http.Error(w, "Invalid user ID", http.StatusBadRequest) return } user, err := uc.service.GetUserByID(id) if err != nil { http.Error(w, "User not found: "+err.Error(), http.StatusNotFound) } } */