diff --git a/backend/postings/models.py b/backend/postings/models.py index 44c784f..06fb35b 100644 --- a/backend/postings/models.py +++ b/backend/postings/models.py @@ -1,8 +1,41 @@ from django.db import models +# Represents any object for which reviews can be made. (Universities, Professors, etc.) +class RateableEntity(models.Model): + # The human-readable name of this entity. + name = models.CharField(max_length=256) + + class Meta: + abstract = True + +# A review represents any single data entry to the database. class Review(models.Model): - # An integer rating which defines + # An integer rating in the domain [1, 5] rating = models.IntegerField(default=1) + # The textual content of the review. + content = models.TextField() + # An integer representing the number of times a user found this review helpful. + helpful_vote_count = models.IntegerField(default=1) + # An integer representing the number of times a user found this review unhelpful. + unhelpful_vote_count = models.IntegerField(default=1) + # A foreign key referencing the entity for which this review was made. + rateable_entity_id = models.ForeignKey(RateableEntity, on_delete=models.CASCADE) + +# A RateableEntity for universities. +class University(RateableEntity): + pass + +# A RateableEntity for professors, who belong to one or more university. +class Professor(RateableEntity): + # The universities that this professor teaches or has taught at. + university = models.ManyToManyField(University) + +# A RateableEntity for courses, which belong to a university, and have one or more professors. +class Course(RateableEntity): + # The university that this course belongs to. + university = models.ForeignKey(University, on_delete=models.CASCADE) + # A list of professors that teach this course. + professors = models.ManyToManyField(RateableEntity) # Create your models here. class UniversityReview(models.Model):