• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

iplweb / bpp / 18634744198

19 Oct 2025 07:00PM UTC coverage: 31.618% (-29.9%) from 61.514%
18634744198

push

github

mpasternak
Merge branch 'release/v202510.1270'

657 of 9430 branches covered (6.97%)

Branch coverage included in aggregate %.

229 of 523 new or added lines in 42 files covered. (43.79%)

11303 existing lines in 316 files now uncovered.

14765 of 39346 relevant lines covered (37.53%)

0.38 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

62.07
src/admin_dashboard/models.py
1
from django.conf import settings
1✔
2
from django.db import models
1✔
3
from django.db.models.signals import post_save
1✔
4
from django.dispatch import receiver
1✔
5

6

7
class MenuClick(models.Model):
1✔
8
    """Model do śledzenia kliknięć w menu admin przez użytkowników"""
9

10
    MAX_CLICKS_PER_USER = 1000
1✔
11

12
    user = models.ForeignKey(
1✔
13
        settings.AUTH_USER_MODEL,
14
        on_delete=models.CASCADE,
15
        verbose_name="Użytkownik",
16
        db_index=True,
17
    )
18
    menu_label = models.CharField(
1✔
19
        max_length=100, verbose_name="Nazwa pozycji menu", db_index=True
20
    )
21
    menu_url = models.CharField(max_length=500, verbose_name="URL pozycji menu")
1✔
22
    clicked_at = models.DateTimeField(
1✔
23
        auto_now_add=True, verbose_name="Data kliknięcia", db_index=True
24
    )
25

26
    class Meta:
1✔
27
        verbose_name = "Kliknięcie w menu"
1✔
28
        verbose_name_plural = "Kliknięcia w menu"
1✔
29
        ordering = ["-clicked_at"]
1✔
30
        indexes = [
1✔
31
            models.Index(fields=["user", "menu_label"]),
32
            models.Index(fields=["user", "-clicked_at"]),
33
        ]
34

35
    def __str__(self):
1✔
36
        return f"{self.user.username} -> {self.menu_label} ({self.clicked_at})"
×
37

38

39
@receiver(post_save, sender=MenuClick)
1✔
40
def cleanup_old_menu_clicks(sender, instance, created, **kwargs):
1✔
41
    """Automatycznie kasuje najstarsze wpisy po przekroczeniu limitu 1000 na użytkownika"""
UNCOV
42
    if created:
×
43
        # Sprawdź liczbę wpisów dla tego użytkownika
UNCOV
44
        user_clicks_count = MenuClick.objects.filter(user=instance.user).count()
×
45

UNCOV
46
        if user_clicks_count > MenuClick.MAX_CLICKS_PER_USER:
×
47
            # Oblicz ile wpisów należy usunąć
UNCOV
48
            to_delete_count = user_clicks_count - MenuClick.MAX_CLICKS_PER_USER
×
49

50
            # Pobierz ID najstarszych wpisów do usunięcia
UNCOV
51
            old_clicks_ids = (
×
52
                MenuClick.objects.filter(user=instance.user)
53
                .order_by("clicked_at")
54
                .values_list("id", flat=True)[:to_delete_count]
55
            )
56

57
            # Usuń najstarsze wpisy
UNCOV
58
            MenuClick.objects.filter(id__in=list(old_clicks_ids)).delete()
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc