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, }) }