mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 18:52:56 +00:00
hot fix #1
This commit is contained in:
@@ -231,6 +231,80 @@ func (cc *ContactController) GetNewsletterSubscribers(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, subs)
|
||||
}
|
||||
|
||||
// CreateNewsletterSubscriber creates a new newsletter subscriber (admin)
|
||||
// @Summary Create newsletter subscriber
|
||||
// @Description Creates a new newsletter subscriber with optional preferences (admin only)
|
||||
// @Tags admin
|
||||
// @Security Bearer
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param subscriber body object true "Subscriber data"
|
||||
// @Success 201 {object} models.NewsletterSubscription
|
||||
// @Failure 400 {object} map[string]string
|
||||
// @Failure 403 {object} map[string]string
|
||||
// @Failure 500 {object} map[string]string
|
||||
// @Router /api/v1/admin/newsletter/subscribers [post]
|
||||
func (cc *ContactController) CreateNewsletterSubscriber(c *gin.Context) {
|
||||
if c.GetString("userRole") != "admin" {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "Access denied"})
|
||||
return
|
||||
}
|
||||
|
||||
var body struct {
|
||||
Email string `json:"email" binding:"required,email"`
|
||||
Preferences map[string]bool `json:"preferences"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&body); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid payload: " + err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// Check if subscriber already exists
|
||||
var existingSub models.NewsletterSubscription
|
||||
if err := cc.DB.Where("email = ?", body.Email).First(&existingSub).Error; err == nil {
|
||||
// Subscriber exists, update status to active and preferences
|
||||
existingSub.IsActive = true
|
||||
if body.Preferences != nil {
|
||||
if body.Preferences != nil {
|
||||
m := datatypes.JSONMap{}
|
||||
for k, v := range body.Preferences {
|
||||
m[k] = v
|
||||
}
|
||||
existingSub.Preferences = m
|
||||
}
|
||||
}
|
||||
if err := cc.DB.Save(&existingSub).Error; err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to update existing subscriber"})
|
||||
return
|
||||
}
|
||||
cc.recalcNewsletterAutomationEnabled()
|
||||
c.JSON(http.StatusOK, existingSub)
|
||||
return
|
||||
}
|
||||
|
||||
// Create new subscriber
|
||||
preferences := datatypes.JSONMap{}
|
||||
if body.Preferences != nil {
|
||||
for k, v := range body.Preferences {
|
||||
preferences[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
sub := models.NewsletterSubscription{
|
||||
Email: body.Email,
|
||||
IsActive: true,
|
||||
Preferences: preferences,
|
||||
}
|
||||
if err := cc.DB.Create(&sub).Error; err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create subscriber"})
|
||||
return
|
||||
}
|
||||
|
||||
// Recalculate automation flag after adding subscriber
|
||||
cc.recalcNewsletterAutomationEnabled()
|
||||
c.JSON(http.StatusCreated, sub)
|
||||
}
|
||||
|
||||
// UpdateNewsletterSubscriberStatus toggles is_active for a subscriber (admin)
|
||||
func (cc *ContactController) UpdateNewsletterSubscriberStatus(c *gin.Context) {
|
||||
if c.GetString("userRole") != "admin" {
|
||||
|
||||
Reference in New Issue
Block a user