aboutsummaryrefslogtreecommitdiff
path: root/carer/mtwerk/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'carer/mtwerk/models.py')
-rw-r--r--carer/mtwerk/models.py130
1 files changed, 130 insertions, 0 deletions
diff --git a/carer/mtwerk/models.py b/carer/mtwerk/models.py
new file mode 100644
index 0000000..5cb026d
--- /dev/null
+++ b/carer/mtwerk/models.py
@@ -0,0 +1,130 @@
+from django.db import models
+
+
+class Question(models.Model):
+ """The iFrame location and details for a HIT"""
+
+ id = models.AutoField(primary_key=True)
+
+ url = models.URLField(max_length=200)
+ height = models.IntegerField(default=1200)
+
+ class Meta:
+ db_table = "mtwerk_question"
+ unique_together = ["url", "height"]
+
+
+class HitType(models.Model):
+ id = models.AutoField(primary_key=True)
+ amt_hit_type_id = models.CharField(max_length=30, unique=True)
+
+ title = models.CharField(max_length=200)
+ description = models.CharField(max_length=2000)
+ reward = models.DecimalField(decimal_places=2, max_digits=8)
+ assignment_duration = models.PositiveIntegerField()
+ auto_approval_delay = models.PositiveIntegerField()
+ keywords = models.CharField(max_length=256)
+
+ # If set, don't let the active HIT count drop below this amount
+ min_active = models.IntegerField(null=False, default=0)
+
+ class Meta:
+ db_table = "mtwerk_hittype"
+ indexes = [
+ models.Index(fields=["amt_hit_type_id"]),
+ models.Index(fields=["min_active"]),
+ ]
+
+
+class Hit(models.Model):
+ id = models.BigAutoField(primary_key=True)
+ amt_hit_id = models.CharField(max_length=30, unique=True)
+
+ hit_type = models.ForeignKey(HitType, on_delete=models.PROTECT)
+
+ amt_group_id = models.CharField(max_length=30)
+
+ status = models.SmallIntegerField(null=False)
+ review_status = models.SmallIntegerField(null=False)
+ creation_time = models.DateTimeField(null=False)
+ expiration = models.DateTimeField(null=False)
+
+ question = models.ForeignKey(Question, on_delete=models.PROTECT)
+ created_at = models.DateTimeField(null=False, auto_now_add=True)
+ modified_at = models.DateTimeField(null=False, auto_now=True)
+
+ max_assignments = models.IntegerField(null=False, default=1)
+ assignment_pending_count = models.IntegerField(null=False, default=0)
+ assignment_available_count = models.IntegerField(null=False, default=0)
+ assignment_completed_count = models.IntegerField(null=False, default=0)
+
+ class Meta:
+ db_table = "mtwerk_hit"
+ indexes = [
+ models.Index(fields=["status"]),
+ models.Index(fields=["review_status"]),
+ models.Index(fields=["creation_time"]),
+ models.Index(fields=["created_at"]),
+ models.Index(fields=["modified_at"]),
+ ]
+
+
+class Assignment(models.Model):
+ id = models.BigAutoField(primary_key=True)
+ amt_assignment_id = models.CharField(max_length=30, unique=True)
+
+ amt_worker_id = models.CharField(max_length=30, null=False)
+
+ hit = models.ForeignKey(Hit, on_delete=models.PROTECT)
+
+ status = models.SmallIntegerField(null=False)
+
+ auto_approval_time = models.DateTimeField(null=True)
+ accept_time = models.DateTimeField(null=True)
+ submit_time = models.DateTimeField(null=True)
+ approval_time = models.DateTimeField(null=True)
+ rejection_time = models.DateTimeField(null=True)
+
+ # Don't need this
+ # answer = models.CharField
+
+ requester_feedback = models.CharField(null=True, max_length=1024)
+
+ # Internal tracking
+ created_at = models.DateTimeField(null=False, auto_now_add=True)
+ modified_at = models.DateTimeField(null=False, auto_now=True)
+ tsid = models.UUIDField(null=True)
+
+ class Meta:
+ db_table = "mtwerk_assignment"
+ indexes = [
+ models.Index(fields=["amt_worker_id"]),
+ models.Index(fields=["status"]),
+ models.Index(fields=["submit_time"]),
+ models.Index(fields=["created_at"]),
+ models.Index(fields=["modified_at"]),
+ models.Index(fields=["tsid"]),
+ ]
+
+
+class Bonus(models.Model):
+ """Issued bonuses to workers for supplemental payments"""
+
+ id = models.BigAutoField(primary_key=True)
+ payout_event_id = models.UUIDField(null=False, unique=True)
+
+ amt_worker_id = models.CharField(max_length=30, null=True)
+
+ # Not unique=True because maybe multiple Bonuses will be associated
+ # with a single Assignment
+ assignment = models.ForeignKey(Assignment, null=False, on_delete=models.PROTECT)
+
+ amount = models.DecimalField(max_digits=10, decimal_places=2)
+ grant_time = models.DateTimeField(null=False)
+ reason = models.CharField(max_length=1024)
+
+ class Meta:
+ indexes = [
+ models.Index(fields=["amt_worker_id"]),
+ models.Index(fields=["grant_time"]),
+ ]