65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
package controllers
|
|
|
|
import (
|
|
"GoMembership/internal/models"
|
|
"GoMembership/internal/services"
|
|
"strings"
|
|
|
|
"net/http"
|
|
// "strconv"
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"GoMembership/pkg/logger"
|
|
)
|
|
|
|
type MembershipController struct {
|
|
Service services.MembershipService
|
|
}
|
|
|
|
type MembershipData struct {
|
|
APIKey string `json:"api_key"`
|
|
Model models.SubscriptionModel `json:"model"`
|
|
}
|
|
|
|
func (mc *MembershipController) RegisterSubscription(c *gin.Context) {
|
|
var regData MembershipData
|
|
if err := c.ShouldBindJSON(®Data); err != nil {
|
|
logger.Error.Printf("Couln't decode subscription data: %v", err)
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Couldn't decode subscription data"})
|
|
return
|
|
}
|
|
|
|
// Register Subscription
|
|
id, err := mc.Service.RegisterSubscription(®Data.Model)
|
|
if err != nil {
|
|
logger.Error.Printf("Couldn't register Membershipmodel: %v", err)
|
|
if strings.Contains(err.Error(), "UNIQUE constraint failed") {
|
|
c.JSON(http.StatusConflict, "Duplicate subscription name")
|
|
return
|
|
}
|
|
c.JSON(http.StatusNotAcceptable, "Couldn't register Membershipmodel")
|
|
return
|
|
}
|
|
logger.Info.Printf("registering subscription: %+v", regData)
|
|
c.JSON(http.StatusCreated, gin.H{
|
|
"status": "success",
|
|
"id": id,
|
|
})
|
|
}
|
|
|
|
func (mc *MembershipController) GetSubscriptions(c *gin.Context) {
|
|
subscriptions, err := mc.Service.GetSubscriptions(nil)
|
|
if err != nil {
|
|
logger.Error.Printf("Error retrieving subscriptions: %v", err)
|
|
c.JSON(http.StatusInternalServerError, gin.H{"errors": []gin.H{{
|
|
"field": "general",
|
|
"key": "validation.internal_server_error",
|
|
}}})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"subscriptions": subscriptions,
|
|
})
|
|
}
|