from django.db import models
# 문제 유형 enum
QUESTION_TYPE_CHOICES = [
('multiple_choice', '객관식'),
('ox', 'O,X 퀴즈'),
('ordering', '순서 정렬'),
('fill_in_blank', '빈칸 채우기'),
]
# 배포 상태 enum
TEST_STATUS_CHOICES = [
('Activated', '활성화'),
('Deactivated', '비활성화'),
]
# 임시 Subject 모델 (실제 병합 시 제거 예정)
class Subject(models.Model):
title = models.CharField(max_length=30)
class Meta:
db_table = 'subject'
# 임시 Generation 모델 (실제 병합 시 제거 예정)
class Generation(models.Model):
number = models.IntegerField()
class Meta:
db_table = 'generation'
# 임시 PermissionsStudent 모델 (실제 병합 시 제거 예정)
class PermissionsStudent(models.Model):
user_id = models.BigIntegerField()
class Meta:
db_table = 'permissions_student'
class Test(models.Model):
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
thumbnail_img_url = models.CharField(max_length=255, default='default_img_url')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'test'
class TestQuestion(models.Model):
test = models.ForeignKey(Test, on_delete=models.CASCADE)
question = models.CharField(max_length=255)
prompt = models.TextField(null=True)
blank_count = models.PositiveSmallIntegerField(null=True)
options_json = models.TextField(null=True)
type = models.CharField(max_length=50, choices=QUESTION_TYPE_CHOICES) # enum 대응
answer = models.JSONField()
point = models.PositiveSmallIntegerField()
explanation = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'test_question'
class TestDeployment(models.Model):
generation = models.ForeignKey(Generation, on_delete=models.CASCADE)
test = models.ForeignKey(Test, on_delete=models.CASCADE)
duration_time = models.PositiveSmallIntegerField(default=60)
access_code = models.CharField(max_length=64)
open_at = models.DateTimeField()
close_at = models.DateTimeField()
questions_snapshot_json = models.JSONField()
status = models.CharField(max_length=50, choices=TEST_STATUS_CHOICES, default='Activated') # enum 대응
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'test_deployment'
class TestSubmission(models.Model):
student = models.ForeignKey(PermissionsStudent, on_delete=models.CASCADE)
deployment = models.ForeignKey(TestDeployment, on_delete=models.CASCADE)
started_at = models.DateTimeField()
cheating_count = models.PositiveSmallIntegerField(default=0)
answers_json = models.JSONField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'test_submissions'