gukgjzkgjhgjh
This commit is contained in:
102
backend/social/hubs/models.py
Normal file
102
backend/social/hubs/models.py
Normal file
@@ -0,0 +1,102 @@
|
||||
from turtle import color
|
||||
import uuid
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
from vontor_cz.custom_fields import WebPImageField
|
||||
from vontor_cz.models import SoftDeleteModel
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
# Create your models here.
|
||||
|
||||
|
||||
class Hub(SoftDeleteModel):
|
||||
AUTHOR_FIELD = 'owner'
|
||||
|
||||
name = models.CharField(max_length=255, unique=True)
|
||||
description = models.TextField(blank=True, null=True)
|
||||
|
||||
owner = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
related_name='owned_hubs'
|
||||
)
|
||||
|
||||
icon = WebPImageField(upload_to='hub_icons/', null=True, blank=True)
|
||||
banner = WebPImageField(upload_to='hub_banners/', null=True, blank=True)
|
||||
|
||||
members = models.ManyToManyField(
|
||||
settings.AUTH_USER_MODEL,
|
||||
related_name='hubs',
|
||||
blank=True
|
||||
)
|
||||
|
||||
is_public = models.BooleanField(default=True)
|
||||
|
||||
|
||||
|
||||
transfer_to = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name='pending_hub_transfers'
|
||||
)
|
||||
transfer_token = models.UUIDField(null=True, blank=True, unique=True)
|
||||
|
||||
def create_transfer(self, new_owner):
|
||||
self.transfer_to = new_owner
|
||||
self.transfer_token = uuid.uuid4()
|
||||
self.save(update_fields=['transfer_to', 'transfer_token'])
|
||||
|
||||
def verify_transfer(self, input_token, triggering_user):
|
||||
"""Requires uuid and triggering user must match the transfer_to field"""
|
||||
if self.transfer_token and str(self.transfer_token) == str(input_token) and self.transfer_to == triggering_user:
|
||||
self.owner = self.transfer_to
|
||||
|
||||
self.transfer_to = None
|
||||
self.transfer_token = None
|
||||
|
||||
self.save(update_fields=['owner', 'transfer_to', 'transfer_token'])
|
||||
return True
|
||||
raise ValidationError("Invalid transfer token or user does not match transfer_to field")
|
||||
|
||||
def cancel_transfer(self):
|
||||
self.transfer_to = None
|
||||
self.transfer_token = None
|
||||
self.save(update_fields=['transfer_to', 'transfer_token'])
|
||||
|
||||
def get_all_tags(self):
|
||||
return Tags.objects.filter(hub_id=self.id)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class HubPermission(SoftDeleteModel):
|
||||
hub = models.ForeignKey(Hub, on_delete=models.CASCADE, related_name='moderators')
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
||||
|
||||
changing_name = models.BooleanField(default=False)
|
||||
changing_description = models.BooleanField(default=False)
|
||||
changing_icon = models.BooleanField(default=False)
|
||||
changing_banner = models.BooleanField(default=False)
|
||||
|
||||
managing_members = models.BooleanField(default=False)
|
||||
managing_posts = models.BooleanField(default=False)
|
||||
managing_chats = models.BooleanField(default=False)
|
||||
|
||||
class Meta:
|
||||
unique_together = ('hub', 'user')
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.user} moderates {self.hub}"
|
||||
|
||||
|
||||
class Tags(SoftDeleteModel):
|
||||
hub = models.ForeignKey(Hub, on_delete=models.CASCADE, related_name='tags')
|
||||
name = models.CharField(max_length=50)
|
||||
|
||||
description = models.TextField(blank=True, null=True)
|
||||
|
||||
color = models.CharField(max_length=7, default='#000000') # Hex color code
|
||||
Reference in New Issue
Block a user