52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package handlers
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/google/uuid"
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"go.uber.org/zap"
|
|
"veza-backend-api/internal/services"
|
|
)
|
|
|
|
type ChatHandler struct {
|
|
chatService *services.ChatService
|
|
userService *services.UserService
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func NewChatHandler(chatService *services.ChatService, userService *services.UserService, logger *zap.Logger) *ChatHandler {
|
|
return &ChatHandler{
|
|
chatService: chatService,
|
|
userService: userService,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (h *ChatHandler) GetToken(c *gin.Context) {
|
|
userID := c.MustGet("user_id").(uuid.UUID)
|
|
if userID == uuid.Nil {
|
|
c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})
|
|
return
|
|
}
|
|
|
|
// Get username from DB
|
|
user, err := h.userService.GetByID(userID)
|
|
username := "user"
|
|
if err == nil && user != nil {
|
|
username = user.Username
|
|
} else {
|
|
// Fallback
|
|
username = fmt.Sprintf("user_%d", userID)
|
|
}
|
|
|
|
token, err := h.chatService.GenerateToken(userID, username)
|
|
if err != nil {
|
|
h.logger.Error("Failed to generate chat token", zap.Error(err))
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to generate token"})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, token)
|
|
}
|