Skip to content

Commit

Permalink
Index Labelling.message_created_on and use for searching
Browse files Browse the repository at this point in the history
  • Loading branch information
rowanseymour committed Jan 30, 2018
1 parent d60b27d commit bd62b06
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 2 deletions.
24 changes: 24 additions & 0 deletions casepro/msgs/migrations/0062_auto_20180126_2250.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2018-01-26 22:50
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('msgs', '0061_backfill_labelling_created_on'),
]

operations = [
migrations.AlterField(
model_name='labelling',
name='message_created_on',
field=models.DateTimeField(),
),
migrations.AddIndex(
model_name='labelling',
index=models.Index(fields=['label', '-message_created_on'], name='msgs_messag_label_i_e44df4_idx'),
),
]
18 changes: 16 additions & 2 deletions casepro/msgs/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -291,10 +291,13 @@ class Labelling(models.Model):

label = models.ForeignKey(Label, on_delete=models.CASCADE)

message_created_on = models.DateTimeField(null=True)
message_created_on = models.DateTimeField()

class Meta:
db_table = 'msgs_message_labels'
indexes = [
models.Index(fields=['label', '-message_created_on'])
]
unique_together = ('message', 'label')


Expand Down Expand Up @@ -385,13 +388,17 @@ def search(cls, org, user, search):
queryset = org.incoming_messages.filter(is_active=True, is_handled=True)
all_label_access = user.can_administer(org)

order_by_labels = False

if all_label_access:
if folder == MessageFolder.inbox or (folder == MessageFolder.archived and label_id):
queryset = queryset.filter(has_labels=True)
if label_id:
label = Label.get_all(org, user).filter(pk=label_id).first()
queryset = queryset.filter(labels=label)

order_by_labels = True

elif folder == MessageFolder.unlabelled:
# only show inbox messages in unlabelled
queryset = queryset.filter(type=Message.TYPE_INBOX, has_labels=False)
Expand All @@ -406,6 +413,8 @@ def search(cls, org, user, search):

queryset = queryset.filter(has_labels=True, labels__in=list(labels))

order_by_labels = True

if folder == MessageFolder.unlabelled:
raise ValueError("Unlabelled folder is only accessible to administrators")

Expand Down Expand Up @@ -441,7 +450,12 @@ def search(cls, org, user, search):

queryset = queryset.prefetch_related('contact', 'labels', 'case__assignee', 'case__user_assignee')

return queryset.order_by('-created_on')
if order_by_labels:
queryset = queryset.order_by('-labelling__message_created_on')
else:
queryset = queryset.order_by('-created_on')

return queryset

def get_history(self):
"""
Expand Down

0 comments on commit bd62b06

Please sign in to comment.