61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package controllers
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"GoMembership/internal/config"
|
|
"GoMembership/internal/models"
|
|
"GoMembership/internal/services"
|
|
|
|
// "github.com/gorilla/mux"
|
|
"net/http"
|
|
// "strconv"
|
|
"GoMembership/internal/utils"
|
|
"GoMembership/pkg/logger"
|
|
)
|
|
|
|
type MembershipController struct {
|
|
service services.MembershipService
|
|
}
|
|
type MembershipData struct {
|
|
APIKey string `json:"api_key"`
|
|
Model models.SubscriptionModel `json:"model"`
|
|
}
|
|
|
|
func NewMembershipController(service services.MembershipService) *MembershipController {
|
|
return &MembershipController{service}
|
|
}
|
|
|
|
func (uc *MembershipController) RegisterSubscription(w http.ResponseWriter, r *http.Request) {
|
|
rh := utils.NewResponseHandler(w)
|
|
var regData MembershipData
|
|
|
|
if err := json.NewDecoder(r.Body).Decode(®Data); err != nil {
|
|
logger.Error.Printf("Couldn't decode SubscriptionModel: %v", err)
|
|
rh.RespondWithError(http.StatusBadRequest, "Couldn't decode Membershipmodel")
|
|
return
|
|
}
|
|
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")
|
|
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")
|
|
return
|
|
}
|
|
logger.Info.Printf("registering subscription: %+v", regData)
|
|
|
|
// Register Subscription
|
|
id, err := uc.service.RegisterSubscription(®Data.Model)
|
|
if err != nil {
|
|
logger.Error.Printf("Couldn't register Membershipmodel: %v", err)
|
|
rh.RespondWithError(http.StatusInternalServerError, "Couldn't register Membershipmodel")
|
|
return
|
|
}
|
|
regData.Model.ID = id
|
|
|
|
}
|