plateforme-tfjm2/chat/models.py

117 lines
3.1 KiB
Python

# Copyright (C) 2024 by Animath
# SPDX-License-Identifier: GPL-3.0-or-later
from django.db import models
from django.utils.text import format_lazy
from django.utils.translation import gettext_lazy as _
from tfjm.permissions import PermissionType
class Channel(models.Model):
name = models.CharField(
max_length=255,
verbose_name=_("name"),
)
read_access = models.PositiveSmallIntegerField(
verbose_name=_("read permission"),
choices=PermissionType,
)
write_access = models.PositiveSmallIntegerField(
verbose_name=_("write permission"),
choices=PermissionType,
)
tournament = models.ForeignKey(
'participation.Tournament',
on_delete=models.CASCADE,
blank=True,
null=True,
default=None,
verbose_name=_("tournament"),
related_name='chat_channels',
help_text=_("For a permission that concerns a tournament, indicates what is the concerned tournament."),
)
pool = models.ForeignKey(
'participation.Pool',
on_delete=models.CASCADE,
blank=True,
null=True,
default=None,
verbose_name=_("pool"),
related_name='chat_channels',
help_text=_("For a permission that concerns a pool, indicates what is the concerned pool."),
)
team = models.ForeignKey(
'participation.Team',
on_delete=models.CASCADE,
blank=True,
null=True,
default=None,
verbose_name=_("team"),
related_name='chat_channels',
help_text=_("For a permission that concerns a team, indicates what is the concerned team."),
)
private = models.BooleanField(
verbose_name=_("private"),
default=False,
help_text=_("If checked, only users who have been explicitly added to the channel will be able to access it."),
)
invited = models.ManyToManyField(
'auth.User',
verbose_name=_("invited users"),
related_name='+',
blank=True,
help_text=_("Extra users who have been invited to the channel, "
"in addition to the permitted group of the channel."),
)
def __str__(self):
return format_lazy(_("Channel {name}"), name=self.name)
class Meta:
verbose_name = _("channel")
verbose_name_plural = _("channels")
ordering = ('name',)
class Message(models.Model):
channel = models.ForeignKey(
Channel,
on_delete=models.CASCADE,
verbose_name=_("channel"),
related_name='messages',
)
author = models.ForeignKey(
'auth.User',
verbose_name=_("author"),
on_delete=models.SET_NULL,
null=True,
related_name='chat_messages',
)
created_at = models.DateTimeField(
verbose_name=_("created at"),
auto_now_add=True,
)
updated_at = models.DateTimeField(
verbose_name=_("updated at"),
auto_now=True,
)
content = models.TextField(
verbose_name=_("content"),
)
class Meta:
verbose_name = _("message")
verbose_name_plural = _("messages")
ordering = ('created_at',)