Files
appunti/server/notes/models.py

64 lines
1.9 KiB
Python

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils import timezone
# Create your models here.
class User(AbstractUser):
allow_notes_from = models.ManyToManyField(
"User", related_name="allowed_notes_to", blank=True
)
expiry_seconds = models.PositiveIntegerField(default=86400)
@property
def alive_created_notes(self) -> models.QuerySet["Note"]:
return (
self.created_notes.filter(expiry__gt=timezone.now())
.select_related("from_user", "to_user")
.order_by("-created_at")
)
@property
def all_created_notes(self) -> models.QuerySet["Note"]:
return self.created_notes.select_related("from_user", "to_user").order_by(
"-created_at"
)
@property
def alive_received_notes(self) -> models.QuerySet["Note"]:
return (
self.received_notes.filter(expiry__gt=timezone.now())
.select_related("from_user", "to_user")
.order_by("-created_at")
)
@property
def expired_received_notes(self) -> models.QuerySet["Note"]:
return (
self.received_notes.filter(expiry__lte=timezone.now())
.select_related("from_user", "to_user")
.order_by("-created_at")
)
@property
def visible_name(self) -> str:
if self.first_name or self.last_name:
return self.get_full_name()
return self.username
class Note(models.Model):
from_user = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="created_notes"
)
to_user = models.ForeignKey(
User, on_delete=models.SET_NULL, null=True, related_name="received_notes"
)
note = models.TextField()
expiry = models.DateTimeField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.from_user.username} -> {self.to_user.username}: {self.note[:30]}"