from django.db import models from django.contrib.auth import get_user_model from core.models import BaseModel User = get_user_model() class AnnouncementType(models.TextChoices): GENERAL = 'general', 'General' EVENT = 'event', 'Event' ACADEMIC = 'academic', 'Academic' URGENT = 'urgent', 'Urgent' class AnnouncementPriority(models.TextChoices): LOW = 'low', 'Low' NORMAL = 'normal', 'Normal' HIGH = 'high', 'High' URGENT = 'urgent', 'Urgent' class Announcement(BaseModel): title = models.CharField(max_length=200, verbose_name='Title') content = models.TextField(verbose_name='Content') announcement_type = models.CharField( max_length=20, choices=AnnouncementType.choices, default=AnnouncementType.GENERAL, verbose_name='Type' ) priority = models.CharField( max_length=10, choices=AnnouncementPriority.choices, default=AnnouncementPriority.NORMAL, verbose_name='Priority' ) author = models.ForeignKey( User, on_delete=models.CASCADE, related_name='announcements', verbose_name='Author' ) is_published = models.BooleanField(default=False, verbose_name='Published') publish_date = models.DateTimeField(null=True, blank=True, verbose_name='Publish Date') class Meta: verbose_name = 'Announcement' verbose_name_plural = 'Announcements' ordering = ['-created_at'] def __str__(self): return self.title @property def content_html(self): """Convert markdown content to HTML""" import markdown return markdown.markdown(self.content) class PushNotificationDevice(BaseModel): user = models.ForeignKey( User, on_delete=models.CASCADE, related_name='push_devices', verbose_name='User' ) device_token = models.TextField(verbose_name='Device Token') device_type = models.CharField( max_length=10, choices=[ ('web', 'Web'), ('android', 'Android'), ('ios', 'iOS'), ], verbose_name='Device Type' ) is_active = models.BooleanField(default=True, verbose_name='Active') class Meta: verbose_name = 'Push Notification Device' verbose_name_plural = 'Push Notification Devices' unique_together = ['user', 'device_token'] def __str__(self): return f"{self.user.username} - {self.device_type}"