diff options
Diffstat (limited to 'carer/mtwerk/models.py')
| -rw-r--r-- | carer/mtwerk/models.py | 130 |
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"]), + ] |
