Files
2023-09-24 08:31:22 -05:00

123 lines
4.5 KiB
Python

from django.db import models
class School(models.Model):
name = models.CharField(max_length=100, primary_key=True)
football_stadium_name = models.CharField(max_length=100)
football_stadium_location = models.CharField(max_length=200)
team_name = models.CharField(max_length=100)
state = models.CharField(max_length=30)
def __str__(self):
return self.name
class Game(models.Model):
home_team = models.ForeignKey(School, on_delete=models.CASCADE, related_name="home_team")
away_team = models.ForeignKey(School, on_delete=models.CASCADE, related_name="away_team")
date = models.DateTimeField()
is_womens_game = models.BooleanField()
is_mens_game = models.BooleanField()
class Meta:
constraints = [
models.UniqueConstraint(
fields = ['home_team', 'away_team', 'date'], name="Game_PK"
)
]
def __str__(self):
return self.home + " vs " + self.away_team
class User(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
school_email = models.CharField(max_length=200, primary_key=True)
school = models.ForeignKey(School, on_delete=models.CASCADE)
phone_number_country_code = models.IntegerField()
phone_number = models.IntegerField()
password_string = models.CharField(max_length=200)
is_banned = models.BooleanField(default=False)
is_logged_in = models.BooleanField(default=False)
account_is_active = models.BooleanField(default=True)
def __str__(self):
return self.first_name + " " + self.last_name
class Ticket(models.Model):
ticket_id = models.CharField(max_length=255, primary_key=True)
posted_by = models.ForeignKey(User, on_delete=models.CASCADE)
ask = models.FloatField()
seat = models.IntegerField()
row = models.IntegerField()
section = models.IntegerField()
game = models.ForeignKey(Game, on_delete=models.CASCADE)
date = models.DateTimeField()
def __str__(self):
return self.ticket_id
class Bid(models.Model):
buyer = models.ForeignKey(User, on_delete=models.DO_NOTHING)
ticket = models.ForeignKey(Ticket, on_delete=models.DO_NOTHING)
amount = models.FloatField()
is_active = models.BooleanField()
is_accepted = models.BooleanField()
class Meta:
constraints = [
models.UniqueConstraint(
fields = ["buyer", "ticket", "amount"], name="Bid_PK"
)
]
def __str__(self):
return self.buyer + " offering " + self.amount + " for " + self.ticket
class Transaction(models.Model):
transaction_id = models.BigIntegerField(primary_key=True)
bid = models.ForeignKey(Bid, on_delete=models.DO_NOTHING)
transaction_fee = models.FloatField()
processing_fee = models.FloatField()
seller_accepted = models.BooleanField(default=False)
buyer_sent_payment = models.BooleanField(default=False)
seller_sent_payment = models.BooleanField(default=False)
buyer_confirmed_payment = models.BooleanField(default=False)
def __str__(self):
return self.transaction_id
class Sale(models.Model):
sale_id = models.BigIntegerField(primary_key=True)
transaction = models.ForeignKey(Transaction, on_delete=models.DO_NOTHING)
total_amount = models.FloatField()
date = models.DateTimeField()
complaint_period_end_date = models.DateTimeField()
def __str__(self):
return self.sale_id
class Complaint(models.Model):
initiating_user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
sale = models.ForeignKey(Sale, on_delete=models.DO_NOTHING)
accuser_provided_proof = models.BooleanField(default=False)
accuser_provided_proof_at = models.DateTimeField()
defendant_contacted = models.BooleanField(default=False)
defendant_contacted_at = models.DateTimeField()
defendant_provided_proof = models.BooleanField(default=False)
defendant_provided_proof_at = models.DateTimeField()
accuser_refunded = models.BooleanField(default=False)
accuser_refunded_at = models.DateTimeField()
defendant_exonerated = models.BooleanField()
defendant_exonerated_at = models.DateTimeField()
resolved = models.BooleanField(default=False)
resolved_at = models.DateTimeField()
class Meta:
constraints = [
models.UniqueConstraint(
fields = ['initiating_user', 'sale'], name="Complaint_PK"
)
]
def __str__(self):
return self.initiating_user + " on " + self.sale