Initial
This commit is contained in:
53
backend/app/models/organization.py
Normal file
53
backend/app/models/organization.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import typing
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from app.models.member import Member
|
||||
|
||||
|
||||
class Organization(models.Model):
|
||||
name = models.CharField('Name', max_length=100)
|
||||
slug = models.SlugField('URL Slug', unique=True, max_length=50)
|
||||
exportBaseUrl = models.URLField('Export Base-URL', max_length=200)
|
||||
members: 'models.QuerySet[Member]'
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'Organisation'
|
||||
verbose_name_plural = 'Organisationen'
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.name
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.pk:
|
||||
try:
|
||||
prev = Organization.objects.get(pk=self.pk)
|
||||
if prev.slug != self.slug:
|
||||
renameSlug(prev.slug, self.slug)
|
||||
except Organization.DoesNotExist:
|
||||
pass
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
deleteSlug(self.slug)
|
||||
return super().delete(*args, **kwargs)
|
||||
|
||||
|
||||
def renameSlug(oldSlug: str, newSlug: str):
|
||||
if newSlug == oldSlug:
|
||||
return
|
||||
oldExportPath = settings.EXPORT_PATH / oldSlug
|
||||
oldMediaPath = settings.MEDIA_ROOT / oldSlug
|
||||
if os.path.exists(oldExportPath):
|
||||
os.rename(oldExportPath, settings.EXPORT_PATH / newSlug)
|
||||
if os.path.exists(oldMediaPath):
|
||||
os.rename(oldMediaPath, settings.MEDIA_ROOT / newSlug)
|
||||
|
||||
|
||||
def deleteSlug(oldSlug: str):
|
||||
shutil.rmtree(settings.EXPORT_PATH / oldSlug, ignore_errors=True)
|
||||
shutil.rmtree(settings.MEDIA_ROOT / oldSlug, ignore_errors=True)
|
||||
Reference in New Issue
Block a user