first commit
This commit is contained in:
111
app/account/handlers/social_account_handler.go
Normal file
111
app/account/handlers/social_account_handler.go
Normal file
@@ -0,0 +1,111 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"gobeyhan/app/account/services"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type SocialAccountHandler struct {
|
||||
service *services.SocialAccountService
|
||||
}
|
||||
|
||||
func NewSocialAccountHandler(service *services.SocialAccountService) *SocialAccountHandler {
|
||||
return &SocialAccountHandler{service: service}
|
||||
}
|
||||
|
||||
// GetUserSocialAccounts godoc
|
||||
// @Summary Get user's social accounts
|
||||
// @Description Get all social accounts for the authenticated user
|
||||
// @Tags social-accounts
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Success 200 {array} models.SocialAccount
|
||||
// @Router /api/v1/user/social-accounts [get]
|
||||
func (h *SocialAccountHandler) GetUserSocialAccounts(c *gin.Context) {
|
||||
userID, exists := c.Get("user_id")
|
||||
if !exists {
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "User not authenticated"})
|
||||
return
|
||||
}
|
||||
|
||||
// Convert user_id to uint64
|
||||
var uid uint64
|
||||
switch v := userID.(type) {
|
||||
case string:
|
||||
uid, _ = strconv.ParseUint(v, 10, 64)
|
||||
case uint64:
|
||||
uid = v
|
||||
case int:
|
||||
uid = uint64(v)
|
||||
case float64:
|
||||
uid = uint64(v)
|
||||
}
|
||||
|
||||
accounts, err := h.service.GetSocialAccountsByUser(uid)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"data": accounts})
|
||||
}
|
||||
|
||||
// DeleteSocialAccount godoc
|
||||
// @Summary Delete a social account
|
||||
// @Description Delete a social account for the authenticated user
|
||||
// @Tags social-accounts
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param id path int true "Social Account ID"
|
||||
// @Success 200 {object} map[string]string
|
||||
// @Router /api/v1/user/social-accounts/{id} [delete]
|
||||
func (h *SocialAccountHandler) DeleteSocialAccount(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := strconv.ParseUint(idStr, 10, 64)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid social account ID"})
|
||||
return
|
||||
}
|
||||
|
||||
// Verify ownership
|
||||
account, err := h.service.GetSocialAccountByID(id)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if account == nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "Social account not found"})
|
||||
return
|
||||
}
|
||||
|
||||
userID, _ := c.Get("user_id")
|
||||
var uid uint64
|
||||
switch v := userID.(type) {
|
||||
case string:
|
||||
uid, _ = strconv.ParseUint(v, 10, 64)
|
||||
case uint64:
|
||||
uid = v
|
||||
case int:
|
||||
uid = uint64(v)
|
||||
case float64:
|
||||
uid = uint64(v)
|
||||
}
|
||||
|
||||
if account.UserID != uid {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "You can only delete your own social accounts"})
|
||||
return
|
||||
}
|
||||
|
||||
if err := h.service.DeleteSocialAccount(id); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "Social account deleted successfully"})
|
||||
}
|
||||
Reference in New Issue
Block a user