server/python/django2/renkanmanager/models.py
author durandn
Thu, 21 Apr 2016 15:18:19 +0200
changeset 605 13d355fd09bf
parent 589 0ae11aa255a3
child 609 854a027c80ff
permissions -rw-r--r--
updated uri to allow optional trailing slash on single resource URIs (django automatic redirects don't carry over the Authorization header that can sometimes be needed, for instance with OAuth)

'''
Created on Jul 17, 2014
Reworked in December, 2015

@author: tc, nd
'''
import uuid

from django.conf import settings
from django.db import models
from django.http import Http404


auth_user_model = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')

class Workspace(models.Model):
    
    workspace_guid = models.CharField(max_length=1024, default=uuid.uuid4, unique=True, blank=False, null=False) # typically UUID
    title = models.CharField(max_length=1024, null=True)
    creator = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="workspace_creator")
    creation_date = models.DateTimeField(auto_now_add=True)
    
    @property
    def renkan_count(self):
        return Renkan.objects.filter(workspace_guid=self.workspace_guid).count()
    
    class Meta:
        app_label = 'renkanmanager'
        permissions = (
            ('view_workspace', 'Can view workspace'),
        )

class Renkan(models.Model):
    
    renkan_guid = models.CharField(max_length=256, default=uuid.uuid4, unique=True, blank=False, null=False) # typically UUID
    workspace_guid = models.CharField(max_length=256, blank=True, null=True)
    current_revision_guid = models.CharField(max_length=256, blank=True, null=True)
    source_revision_guid = models.CharField(max_length=256, blank=True, null=True)
    creator = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="renkan_creator")
    creation_date = models.DateTimeField(auto_now_add=True)
    state = models.IntegerField(default=1)
    
    @property
    def revision_count(self):
        return Revision.objects.filter(parent_renkan_guid=self.renkan_guid).count()
    
    @property
    def is_copy(self):
        return bool(self.source_revision_guid)
    
    # Current revision title
    @property
    def title(self):
        current_revision = Revision.objects.get(revision_guid = self.current_revision_guid)
        return current_revision.title
    
    # Current revision content
    @property
    def content(self):
        current_revision = Revision.objects.get(revision_guid = self.current_revision_guid)
        return current_revision.content
    
    class Meta:
        app_label = 'renkanmanager'
        permissions = (
            ('view_renkan', 'Can view renkan'),
        )

class Revision(models.Model):
    
    revision_guid = models.CharField(max_length=256, default=uuid.uuid4, unique=True) # typically UUID
    parent_renkan_guid = models.CharField(max_length=256)
    title = models.CharField(max_length=1024, null=True, blank=True)
    content = models.TextField(blank=True, null=True)
    creator = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="revision_creator")
    last_updated_by = models.ForeignKey(auth_user_model, blank=True, null=True, related_name="revision_last_updated_by")
    creation_date = models.DateTimeField(auto_now_add=True)
    modification_date = models.DateTimeField(auto_now=True)
    
    @property
    def is_current_revision(self):
        try:
            parent_project = Renkan.objects.get(renkan_guid=self.parent_renkan_guid)
        except Renkan.DoesNotExist: # SHOULD NOT HAPPEN!
            raise Http404
        return parent_project.current_revision_guid == self.revision_guid
    
    class Meta:
        app_label = 'renkanmanager'
        permissions = (
            ('view_revision', 'Can view revision'),
        )