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
31 changes: 25 additions & 6 deletions internal/repositories/directchat_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
17 changes: 17 additions & 0 deletions internal/services/moderation_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
}
}

Expand All @@ -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 {
Expand Down