Merge branch 'master' into lqc-trunk
[redakcja.git] / apps / api / models.py
index 71a8362..8252589 100644 (file)
@@ -1,3 +1,73 @@
 from django.db import models
+from django.contrib.auth.models import User
 
 # Create your models here.
+class PartCache(models.Model):
+    document_id = models.CharField(max_length=255)
+    user_id = models.CharField(max_length=64, blank=True)    
+    part_id = models.CharField(max_length=255)
+
+    @classmethod
+    def update_cache(me, docid, userid, old, new):
+        old = set(old)
+        new = set(new)
+
+        related = me.objects.filter(user_id=userid, document_id=docid)
+
+        missing = old.difference(new)
+        related.filter(part_id__in=missing).delete()
+
+        created = new.difference(old)
+
+        for part in created:
+            me.objects.create(user_id=userid, document_id=docid, part_id=part)
+
+
+class PullRequest(models.Model):
+    REQUEST_STATUSES = {
+        "N": "New",
+        "E": "Edited/Conflicting",
+        "R": "Rejected",
+        "A": "Accepted & merged",
+    }
+
+    comitter = models.ForeignKey(User) # the user who request the pull
+    comment = models.TextField() # addtional comments to the request
+
+    timestamp = models.DateTimeField(auto_now_add=True)
+
+    # document to merge
+    document = models.CharField(max_length=255)
+
+    # revision to be merged into the main branch
+    source_revision = models.CharField(max_length=40, unique=True)
+    target_revision = models.CharField(max_length=40)
+
+    # current status
+    status = models.CharField(max_length=1, choices=REQUEST_STATUSES.items())
+
+    # comment to the status change of request (if applicable)
+    response_comment = models.TextField(blank=True)
+
+    # revision number in which the changes were merged (if any)
+    merged_revision = models.CharField(max_length=40, blank=True, null=True)
+    merge_timestamp = models.DateTimeField(blank=True, null=True)
+
+    def __unicode__(self):
+        return unicode(self.comitter) + u':' + self.document
+
+
+    class Meta:
+        permissions = (           
+            ("view_prq", "Can view pull request's contents."),
+        )
+
+
+# This is actually an abstract Model, but if we declare
+# it as so Django ignores the permissions :(
+class Document(models.Model):
+    class Meta:
+        permissions = (
+            ("share_document", "Can share documents without pull requests."),
+            ("view_other_document", "Can view other's documents."),
+        )    
\ No newline at end of file