diff --git a/internal/repositories/directchat_repository.go b/internal/repositories/directchat_repository.go index db17225..eaf56b1 100644 --- a/internal/repositories/directchat_repository.go +++ b/internal/repositories/directchat_repository.go @@ -113,15 +113,34 @@ func (r *DirectChatRepository) GetUserDirectChats(userID string) ([]models.Direc if err := doc.DataTo(&chat); err != nil { return nil, err } - // Obtener los nombres actualizados de los usuarios chat.DisplayNames = make([]string, len(chat.UserIDs)) - for i, id := range chat.UserIDs { - user, err := r.UserRepo.GetUserByID(ctx, id) - if err == nil && user != nil { - chat.DisplayNames[i] = user.DisplayName - } + + // Como solo hay dos usuarios en un chat directo + // Obtenemos el nombre del primer usuario + user0, err := r.UserRepo.GetUserByID(ctx, chat.UserIDs[0]) + if err == nil && user0 != nil { + chat.DisplayNames[0] = user0.DisplayName + } else { + chat.DisplayNames[0] = "Usuario Desconocido" + } + + // Obtenemos el nombre del segundo usuario + user1, err := r.UserRepo.GetUserByID(ctx, chat.UserIDs[1]) + if err == nil && user1 != nil { + chat.DisplayNames[1] = user1.DisplayName + } else { + chat.DisplayNames[1] = "Usuario Desconocido" + } + + // Si el usuario actual es el primer usuario, intercambiamos tanto los nombres como los IDs + if chat.UserIDs[0] == userID { + // Intercambiar DisplayNames + chat.DisplayNames[0], chat.DisplayNames[1] = chat.DisplayNames[1], chat.DisplayNames[0] + // Intercambiar UserIDs + chat.UserIDs[0], chat.UserIDs[1] = chat.UserIDs[1], chat.UserIDs[0] } + // Ahora tanto en UserIDs como en DisplayNames, el otro usuario está primero y el usuario actual después chats = append(chats, chat) } diff --git a/internal/services/moderation_service.go b/internal/services/moderation_service.go index 59bae0b..e0125bd 100644 --- a/internal/services/moderation_service.go +++ b/internal/services/moderation_service.go @@ -21,6 +21,7 @@ type ModerationService struct { messageRepo *repositories.MessageRepository roomRepo *repositories.RoomRepository userRepo *repositories.UserRepository + roomService *RoomService } // NewModerationService creates a new instance of ModerationService @@ -29,12 +30,14 @@ func NewModerationService( messageRepo *repositories.MessageRepository, roomRepo *repositories.RoomRepository, userRepo *repositories.UserRepository, + roomService *RoomService, ) *ModerationService { return &ModerationService{ reportRepo: reportRepo, messageRepo: messageRepo, roomRepo: roomRepo, userRepo: userRepo, + roomService: roomService, } } @@ -51,6 +54,20 @@ func (s *ModerationService) ReportMessage(reporterID, roomID, messageID, reason return fmt.Errorf("users cannot report their own messages") } + // Check if the reporter is banned in the room + if !s.CanUserSendMessageInRoom(roomID, reporterID) { + return fmt.Errorf("banned users cannot report messages") + } + + // Check if the reported message is from an admin or owner + isAdminOrOwner, err := s.roomService.IsUserAdminOrOwner(roomID, message.UserID) + if err != nil { + return fmt.Errorf("error checking user privileges: %v", err) + } + if isAdminOrOwner { + return fmt.Errorf("messages from admins or room owner cannot be reported") + } + // Check if user has already reported this message hasReported, err := s.reportRepo.HasUserReportedMessage(reporterID, messageID) if err != nil {