From 05d9b9a4b45d03f59c28491bfaf8bc0deb63970a Mon Sep 17 00:00:00 2001 From: Joshua Laymon Date: Sun, 24 Aug 2025 19:14:16 +0000 Subject: [PATCH] Add web/core/models_ann.py --- web/core/models_ann.py | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 web/core/models_ann.py diff --git a/web/core/models_ann.py b/web/core/models_ann.py new file mode 100644 index 0000000..650d433 --- /dev/null +++ b/web/core/models_ann.py @@ -0,0 +1,46 @@ +from django.conf import settings +from django.db import models +from django.utils import timezone + +User = settings.AUTH_USER_MODEL + +class Announcement(models.Model): + title = models.CharField(max_length=200, blank=True) + message = models.TextField() + is_active = models.BooleanField(default=True) + start_at = models.DateTimeField(default=timezone.now) + end_at = models.DateTimeField(null=True, blank=True) + created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='announcements_created') + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + ordering = ['-created_at'] + + def __str__(self): + return self.title or f"Announcement #{self.pk}" + + def is_current(self): + now = timezone.now() + if not self.is_active: + return False + if self.start_at and now < self.start_at: + return False + if self.end_at and now > self.end_at: + return False + return True + + +class AnnouncementDismissal(models.Model): + announcement = models.ForeignKey(Announcement, on_delete=models.CASCADE) + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) + dismissed_at = models.DateTimeField(auto_now_add=True) + + class Meta: + unique_together = ('announcement', 'user') + indexes = [ + models.Index(fields=['user']), + models.Index(fields=['announcement']), + ] + + def __str__(self): + return f"Dismissal(u={self.user_id}, a={self.announcement_id})" \ No newline at end of file