switched to gin-gonic

This commit is contained in:
$(pass /github/name)
2024-07-11 12:28:39 +02:00
parent 20ed629e92
commit de88a603d5
11 changed files with 330 additions and 169 deletions

View File

@@ -1,16 +1,14 @@
package controllers
import (
"encoding/json"
"GoMembership/internal/config"
"GoMembership/internal/models"
"GoMembership/internal/services"
// "github.com/gorilla/mux"
"net/http"
// "strconv"
"GoMembership/internal/utils"
"github.com/gin-gonic/gin"
"GoMembership/pkg/logger"
)
@@ -26,24 +24,23 @@ func NewMembershipController(service services.MembershipService) *MembershipCont
return &MembershipController{service}
}
func (uc *MembershipController) RegisterSubscription(w http.ResponseWriter, r *http.Request) {
rh := utils.NewResponseHandler(w)
func (uc *MembershipController) RegisterSubscription(c *gin.Context) {
var regData MembershipData
if err := json.NewDecoder(r.Body).Decode(&regData); err != nil {
logger.Error.Printf("Couldn't decode SubscriptionModel: %v", err)
rh.RespondWithError(http.StatusBadRequest, "Couldn't decode Membershipmodel")
return
if err := c.ShouldBindJSON(&regData); err != nil {
logger.Error.Printf("Couln't decode subscription data: %v", err)
c.JSON(http.StatusBadRequest, gin.H{"error": "Couldn't decode subscription data"})
}
logger.Info.Printf("Using API key: %v", config.LoadConfig().Auth.APIKEY)
if regData.APIKey == "" {
logger.Error.Println("API Key is missing")
rh.RespondWithError(http.StatusBadRequest, "API Key is required")
c.JSON(http.StatusBadRequest, "API Key is missing")
return
}
if regData.APIKey != config.LoadConfig().Auth.APIKEY {
logger.Error.Printf("API Key not valid: %v", regData.APIKey)
rh.RespondWithError(http.StatusExpectationFailed, "API Key not valid")
c.JSON(http.StatusExpectationFailed, "API Key is missing")
return
}
logger.Info.Printf("registering subscription: %+v", regData)
@@ -52,7 +49,7 @@ func (uc *MembershipController) RegisterSubscription(w http.ResponseWriter, r *h
id, err := uc.service.RegisterSubscription(&regData.Model)
if err != nil {
logger.Error.Printf("Couldn't register Membershipmodel: %v", err)
rh.RespondWithError(http.StatusInternalServerError, "Couldn't register Membershipmodel")
c.JSON(http.StatusInternalServerError, "Couldn't register Membershipmodel")
return
}
regData.Model.ID = id

View File

@@ -1,15 +1,12 @@
package controllers
import (
"encoding/json"
"GoMembership/internal/models"
"GoMembership/internal/services"
// "github.com/gorilla/mux"
"github.com/gin-gonic/gin"
"net/http"
// "strconv"
"GoMembership/internal/utils"
"GoMembership/pkg/logger"
)
@@ -31,15 +28,13 @@ func NewUserController(service services.UserService, emailService *services.Emai
return &UserController{service, *emailService, consentService, bankAccountService, membershipService}
}
func (uc *UserController) RegisterUser(w http.ResponseWriter, r *http.Request) {
rh := utils.NewResponseHandler(w)
func (uc *UserController) RegisterUser(c *gin.Context) {
var regData RegistrationData
if err := json.NewDecoder(r.Body).Decode(&regData); err != nil {
// http.Error(w, err.Error(), http.StatusBadRequest)
if err := c.ShouldBindJSON(&regData); err != nil {
logger.Error.Printf("Couldn't decode Userdata: %v", err)
rh.RespondWithError(http.StatusBadRequest, "Couldn't decode userdata")
c.JSON(http.StatusBadRequest, gin.H{"error": "Couldn't decode userdata"})
return
}
logger.Info.Printf("registering user: %v", regData.User)
@@ -47,9 +42,8 @@ func (uc *UserController) RegisterUser(w http.ResponseWriter, r *http.Request) {
// Register User
id, token, err := uc.service.RegisterUser(&regData.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")
c.JSON(http.StatusInternalServerError, gin.H{"error": "Couldn't register User"})
return
}
regData.User.ID = id
@@ -58,7 +52,7 @@ func (uc *UserController) RegisterUser(w http.ResponseWriter, r *http.Request) {
_, err = uc.bankAccountService.RegisterBankAccount(&regData.BankAccount)
if err != nil {
logger.Error.Printf("Couldn't register bank account: %v", err)
rh.RespondWithError(http.StatusInternalServerError, "Couldn't register User-BankAccount")
c.JSON(http.StatusInternalServerError, gin.H{"error": "Couldn't register User-BankAccount"})
return
}
@@ -81,7 +75,7 @@ func (uc *UserController) RegisterUser(w http.ResponseWriter, r *http.Request) {
_, err = uc.consentService.RegisterConsent(&consent)
if err != nil {
logger.Error.Printf("Couldn't register consent: %v", err)
rh.RespondWithError(http.StatusInternalServerError, "Couldn't register User-consent")
c.JSON(http.StatusInternalServerError, gin.H{"error": "Couldn't register User-consent"})
return
}
}
@@ -90,48 +84,53 @@ func (uc *UserController) RegisterUser(w http.ResponseWriter, r *http.Request) {
_, err = uc.membershipService.RegisterMembership(&regData.Membership)
if err != nil {
logger.Error.Printf("Couldn't register membership: %v", err)
rh.RespondWithError(http.StatusInternalServerError, "Couldn't register User-membership")
c.JSON(http.StatusInternalServerError, gin.H{"error": "Couldn't register User-membership"})
return
}
// Send notifications
if err := uc.emailService.SendVerificationEmail(&regData.User, &token); err != nil {
logger.Error.Printf("Failed to send email verification email to user: %v", err)
// rh.RespondWithError(http.StatusServiceUnavailable, "User creation succeeded, but failed to send welcome email to user")
// Proceed without returning error since user registration is successful
}
// Notify admin of new user registration
if err := uc.emailService.NotifyAdminOfNewUser(&regData.User); 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")
// Proceed without returning error since user registration is successful
}
rh.RespondWithJSON(http.StatusCreated, map[string]interface{}{
c.JSON(http.StatusCreated, gin.H{
"status": "success",
"id": regData.User.ID,
})
}
func (uc *UserController) VerifyMailHandler(w http.ResponseWriter, r *http.Request) {
rh := utils.NewResponseHandler(w)
token := r.URL.Query().Get("token")
func (uc *UserController) VerifyMailHandler(c *gin.Context) {
token := c.Query("token")
if token == "" {
logger.Error.Println("Missing token to verify mail")
rh.RespondWithError(http.StatusNoContent, "Missing token")
c.JSON(http.StatusNoContent, gin.H{"error": "Missing token"})
return
}
user, err := uc.service.VerifyUser(&token)
if err != nil {
logger.Error.Printf("Cannot verify user: %v", err)
rh.RespondWithError(http.StatusUnauthorized, "Cannot verify user")
c.JSON(http.StatusUnauthorized, gin.H{"error": "Cannot verify user"})
return
}
membership, err := uc.membershipService.FindMembershipByUserID(user.ID)
if err != nil {
logger.Error.Printf("Cannot get membership of user %v: %v", user.ID, err)
rh.RespondWithError(http.StatusInternalServerError, "Cannot get Membership of user")
c.JSON(http.StatusInternalServerError, gin.H{"error": "Cannot get Membership of user"})
return
}
uc.emailService.SendWelcomeEmail(user, membership)
c.Status(http.StatusOK)
}
/* func (uc *UserController) LoginUser(w http.ResponseWriter, r *http.Request) {