-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Amélioration des performances du tableau de bord #922
base: develop
Are you sure you want to change the base?
Conversation
…gouv/recommandations-collaboratives into feat/dashboard-improvements
@etchegom ou @glibersat La partie recherche côté front est fonctionnelle, en revanche il me manque la liste des régions et départements des différents projets en DB |
@Jeremy-Bojko Je pense que tu peux te baser sur EDIT: Damned, j'ai oublié que le tdb était accessible aux collectivités aussi maintenant, ça ne marche pas donc |
On s'en parle jeudi ? |
…ommandations-collaboratives into feat/dashboard-improvements
- Move filter logic to own filter (ProjectActivityFilter) - Activity Filter now takes all activity into account - Limit regions to useable departments - Remove unread_notifications
@Jeremy-Bojko nouvelle version que tu peux déployer en PP avec la prise en compte de l'activity de tout le monde :) |
@etchegom N'hésite pas à review mes modifs du filtre ! |
# Filter on members activity recorded on model | ||
members_queryset = queryset.filter(last_members_activity_at__gte=from_ts) | ||
|
||
# Fetch activity from acstream | ||
activity_queryset = queryset.filter( | ||
id__in=list( | ||
Action.objects.filter( | ||
target_content_type=project_ct.pk, | ||
target_object_id__in=list( | ||
queryset.values_list("pk", flat=True) | ||
), | ||
timestamp__gte=from_ts, | ||
) | ||
.order_by("timestamp") | ||
.values_list("target_object_id", flat=True) | ||
) | ||
) | ||
|
||
# We want both to cover members and advisors activities | ||
queryset = (members_queryset | activity_queryset).distinct() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je propose ici une alternative qui, sans certitude d'améliorer les performances, offre des avantages en termes de réutilisabilité et de clarté IMHO:
queryset = queryset.annotate(
recent_actions_count=Subquery(
Action.objects.filter(
target_content_type_id=project_ct.pk,
target_object_id=Cast(OuterRef("pk"), CharField()),
timestamp__gte=from_ts,
)
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
),
).filter(
Q(last_members_activity_at__gte=from_ts) | Q(recent_actions_count__gt=0)
).distinct()
Voir même bouger l'annotation dans un queryset du manager et avoir ici seulement qq chose comme:
queryset = queryset.with_recent_actions_count(from_ts).filter(
Q(last_members_activity_at__gte=from_ts) | Q(recent_actions_count__gt=0)
).distinct()
Il s'agit de :
Décrivez vos changements
Ajout d'un filtre sur le dashboard projet, pour ne charger qu'un nombre limité de projets.
Le filtre se base sur la date d'activité (
project.last_members_activity_at
) et sur l'activité du stream d'actions (edit)Checklist d'acceptation de revue de code
Demandes