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"]), ]