Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions docs/docs.go
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,12 @@ const docTemplate = `{
"type": "string"
}
},
"403": {
"description": "Acceso prohibido",
"schema": {
"type": "string"
}
},
"404": {
"description": "Chat no encontrado",
"schema": {
Expand Down Expand Up @@ -834,6 +840,12 @@ const docTemplate = `{
"createdAt": {
"type": "string"
},
"displayNames": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"type": "string"
},
Expand Down
12 changes: 12 additions & 0 deletions docs/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,12 @@
"type": "string"
}
},
"403": {
"description": "Acceso prohibido",
"schema": {
"type": "string"
}
},
"404": {
"description": "Chat no encontrado",
"schema": {
Expand Down Expand Up @@ -827,6 +833,12 @@
"createdAt": {
"type": "string"
},
"displayNames": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"type": "string"
},
Expand Down
8 changes: 8 additions & 0 deletions docs/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ definitions:
properties:
createdAt:
type: string
displayNames:
items:
type: string
type: array
id:
type: string
isDeleted:
Expand Down Expand Up @@ -273,6 +277,10 @@ paths:
description: No autorizado
schema:
type: string
"403":
description: Acceso prohibido
schema:
type: string
"404":
description: Chat no encontrado
schema:
Expand Down
14 changes: 14 additions & 0 deletions internal/handlers/chat_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,12 +245,26 @@ func (h *ChatHandler) GetUserDirectChats(w http.ResponseWriter, r *http.Request)
// @Param limit query int false "Límite de mensajes a obtener" default(50)
// @Success 200 {array} models.Message "Lista de mensajes del chat directo"
// @Failure 401 {string} string "No autorizado"
// @Failure 403 {string} string "Acceso prohibido"
// @Failure 404 {string} string "Chat no encontrado"
// @Failure 500 {string} string "Error interno del servidor"
// @Router /chat/direct/{chatId}/messages [get]
func (h *ChatHandler) GetDirectChatMessages(w http.ResponseWriter, r *http.Request) {
chatID := chi.URLParam(r, "chatId")

// Obtener el ID del usuario del contexto
userID, ok := r.Context().Value("userID").(string)
if !ok {
http.Error(w, "User ID not found in context", http.StatusInternalServerError)
return
}

// Verificar si el usuario pertenece al chat directo
if !h.DirectChatService.DirectChatRepo.IsUserInDirectChat(chatID, userID) {
http.Error(w, "Unauthorized access to this chat", http.StatusForbidden)
return
}

limitStr := r.URL.Query().Get("limit")
limit := 50 // valor por defecto

Expand Down
29 changes: 22 additions & 7 deletions internal/repositories/message_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,17 +139,18 @@ func (r *MessageRepository) GetRoomMessages(roomID string, limit int, cursor str
return response, nextCursor, nil
}

// GetDirectChatMessages obtiene los mensajes de un chat directo
func (r *MessageRepository) GetDirectChatMessages(directChatID string, limit int) ([]models.MessageResponse, error) {
// GetDirectChatMessagesSimple obtiene los mensajes de un chat directo sin paginación
func (r *MessageRepository) GetDirectChatMessagesSimple(directChatID string, limit int) ([]models.MessageResponse, error) {
ctx := context.Background()

var messages []models.Message
var response []models.MessageResponse

// Obtener mensajes en orden descendente (más recientes primero)
messagesRef := r.FirestoreClient.Client.
Collection("directChats").Doc(directChatID).
Collection("messages").
OrderBy("createdAt", firestore.Asc).
OrderBy("createdAt", firestore.Desc).
Limit(limit)

docs, err := messagesRef.Documents(ctx).GetAll()
Expand Down Expand Up @@ -182,6 +183,8 @@ func (r *MessageRepository) GetDirectChatMessages(directChatID string, limit int
}
}

// Crear respuestas con DisplayName
var responseTemp []models.MessageResponse
for _, message := range messages {
msgMap := models.MessageResponse{
Message: message,
Expand All @@ -192,7 +195,12 @@ func (r *MessageRepository) GetDirectChatMessages(directChatID string, limit int
msgMap.DisplayName = displayName
}

response = append(response, msgMap)
responseTemp = append(responseTemp, msgMap)
}

// Invertir el orden para que queden en orden ascendente (más antiguos primero)
for i := len(responseTemp) - 1; i >= 0; i-- {
response = append(response, responseTemp[i])
}

return response, nil
Expand All @@ -205,10 +213,11 @@ func (r *MessageRepository) GetRoomMessagesSimple(roomID string, limit int) ([]m
var messages []models.Message
var response []models.MessageResponse

// Obtener mensajes en orden descendente (más recientes primero)
messagesRef := r.FirestoreClient.Client.
Collection("rooms").Doc(roomID).
Collection("messages").
OrderBy("createdAt", firestore.Asc).
OrderBy("createdAt", firestore.Desc).
Limit(limit)

docs, err := messagesRef.Documents(ctx).GetAll()
Expand Down Expand Up @@ -243,13 +252,19 @@ func (r *MessageRepository) GetRoomMessagesSimple(roomID string, limit int) ([]m
}
}

// Construir la respuesta con los displayNames
// Crear respuestas con DisplayName
var responseTemp []models.MessageResponse
for _, message := range messages {
msgResponse := models.MessageResponse{
Message: message,
DisplayName: userDataCache[message.UserID], // Puede estar vacío si no se encontró
}
response = append(response, msgResponse)
responseTemp = append(responseTemp, msgResponse)
}

// Invertir el orden para que queden en orden ascendente (más antiguos primero)
for i := len(responseTemp) - 1; i >= 0; i-- {
response = append(response, responseTemp[i])
}

return response, nil
Expand Down
2 changes: 1 addition & 1 deletion internal/services/directchat_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func (s *DirectChatService) GetUserDirectChatsWithSenderNames(userID string) ([]

// GetDirectChatMessages obtiene los mensajes de un chat directo
func (s *DirectChatService) GetDirectChatMessages(directChatID string, limit int) ([]models.MessageResponse, error) {
return s.MessageRepo.GetDirectChatMessages(directChatID, limit)
return s.MessageRepo.GetDirectChatMessagesSimple(directChatID, limit)
}

// FindOrCreateDirectChat encuentra un chat directo entre dos usuarios o lo crea si no existe
Expand Down