@@ -0,0 +1,77 @@
|
||||
import uuid
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
|
||||
|
||||
class FormulaDocument(models.Model):
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="formulas")
|
||||
title = models.CharField(max_length=120)
|
||||
source = models.TextField(blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ["-updated_at"]
|
||||
|
||||
|
||||
class FormulaRevision(models.Model):
|
||||
document = models.ForeignKey(FormulaDocument, on_delete=models.CASCADE, related_name="revisions")
|
||||
source = models.TextField()
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
|
||||
class LatexCourse(models.Model):
|
||||
slug = models.SlugField(unique=True)
|
||||
title = models.CharField(max_length=120)
|
||||
description = models.TextField(blank=True)
|
||||
order = models.PositiveIntegerField(default=0)
|
||||
is_published = models.BooleanField(default=False)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
|
||||
class LatexLesson(models.Model):
|
||||
course = models.ForeignKey(LatexCourse, on_delete=models.CASCADE, related_name="lessons")
|
||||
slug = models.SlugField()
|
||||
title = models.CharField(max_length=120)
|
||||
content = models.TextField()
|
||||
example_source = models.TextField(blank=True)
|
||||
order = models.PositiveIntegerField(default=0)
|
||||
|
||||
class Meta:
|
||||
constraints = [
|
||||
models.UniqueConstraint(fields=("course", "slug"), name="unique_course_lesson")
|
||||
]
|
||||
ordering = ["order"]
|
||||
|
||||
|
||||
class LatexExercise(models.Model):
|
||||
lesson = models.ForeignKey(LatexLesson, on_delete=models.CASCADE, related_name="exercises")
|
||||
prompt = models.TextField()
|
||||
expected_source = models.TextField()
|
||||
explanation = models.TextField(blank=True)
|
||||
order = models.PositiveIntegerField(default=0)
|
||||
|
||||
|
||||
class LatexAttempt(models.Model):
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="latex_attempts")
|
||||
exercise = models.ForeignKey(LatexExercise, on_delete=models.PROTECT)
|
||||
submitted_source = models.TextField()
|
||||
is_correct = models.BooleanField()
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
|
||||
class HandwritingRecognitionJob(models.Model):
|
||||
class Status(models.TextChoices):
|
||||
PENDING = "pending", "等待"
|
||||
COMPLETE = "complete", "完成"
|
||||
FAILED = "failed", "失败"
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
||||
status = models.CharField(max_length=16, choices=Status.choices, default=Status.PENDING)
|
||||
result = models.JSONField(default=dict, blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
Reference in New Issue
Block a user