140 lines
4.4 KiB
Python
140 lines
4.4 KiB
Python
from django.db import models
|
|
from accounts.models import BaseModel, IAmPrincipal
|
|
from django.db import transaction
|
|
|
|
# from django.contrib.gis.db import models as gis_models
|
|
|
|
|
|
# Create your models here.
|
|
class EventCategory(BaseModel):
|
|
title = models.CharField(max_length=255)
|
|
image = models.ImageField(upload_to="event_category", null=True, blank=True)
|
|
description = models.TextField(null=True, blank=True)
|
|
video_url = models.URLField(max_length=200, blank=True, null=True)
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
|
|
class Venue(BaseModel):
|
|
title = models.CharField(max_length=255)
|
|
description = models.TextField(null=True, blank=True)
|
|
address = models.TextField(null=True, blank=True)
|
|
image = models.ImageField(upload_to="venue", null=True, blank=True)
|
|
url = models.URLField(max_length=200, blank=True, null=True)
|
|
latitude = models.DecimalField(max_digits=14, decimal_places=8)
|
|
longitude = models.DecimalField(max_digits=14, decimal_places=8)
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
|
|
class EventStatus(models.TextChoices):
|
|
UPCOMING = "upcoming", "Upcoming"
|
|
LIVE = "live", "Live"
|
|
POST = "post", "Post"
|
|
ARCHIVE = "archive", "Archive"
|
|
|
|
|
|
class EventMaster(BaseModel):
|
|
title = models.CharField(max_length=255)
|
|
description = models.TextField(blank=True, null=True)
|
|
event_category = models.ForeignKey(EventCategory, on_delete=models.CASCADE)
|
|
image = models.ImageField(upload_to="brand", null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
class Meta:
|
|
db_table = "brand"
|
|
|
|
|
|
class Event(BaseModel):
|
|
title = models.CharField(max_length=255)
|
|
category = models.ForeignKey(EventCategory, on_delete=models.CASCADE)
|
|
event_master = models.ForeignKey(
|
|
EventMaster, on_delete=models.SET_NULL, null=True, blank=True
|
|
)
|
|
description = models.TextField(blank=True, null=True)
|
|
image = models.ImageField(upload_to="event", null=True, blank=True)
|
|
status = models.CharField(
|
|
max_length=10, choices=EventStatus.choices, blank=True, null=True
|
|
)
|
|
start_date = models.DateField()
|
|
end_date = models.DateField()
|
|
from_time = models.TimeField()
|
|
to_time = models.TimeField()
|
|
|
|
venue = models.ForeignKey(Venue, on_delete=models.CASCADE)
|
|
venue_capacity = models.IntegerField()
|
|
|
|
video_url = models.URLField(max_length=200, blank=True, null=True)
|
|
entry_type = models.CharField(
|
|
max_length=100
|
|
) # Assuming entry type is a string (e.g., Free, Ticketed)
|
|
entry_fee = models.DecimalField(
|
|
max_digits=14, decimal_places=2, default=0.00
|
|
) # Assuming it's an integer. Use DecimalField if you need to handle cents.
|
|
key_guest = models.TextField(blank=True, null=True)
|
|
age_group = models.CharField(max_length=100, blank=True, null=True)
|
|
draft = models.BooleanField(default=False)
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
class Meta:
|
|
db_table = "event" # Optional: Specify custom table name
|
|
|
|
|
|
class EventInteractionType(models.TextChoices):
|
|
GOING = "going", "Going"
|
|
INTERESTED = "interested", "Interested"
|
|
|
|
|
|
class EventImage(models.Model):
|
|
event = models.ForeignKey(
|
|
Event, related_name="event_images", on_delete=models.CASCADE
|
|
)
|
|
image = models.ImageField(upload_to="event_images/")
|
|
|
|
def __str__(self):
|
|
return f"Image for event: {self.event.title}"
|
|
|
|
|
|
class EventPrincipalInteraction(models.Model):
|
|
principal = models.ForeignKey(IAmPrincipal, on_delete=models.CASCADE)
|
|
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
|
status = models.CharField(
|
|
max_length=10,
|
|
choices=EventInteractionType.choices,
|
|
)
|
|
|
|
class Meta:
|
|
unique_together = ("principal", "event")
|
|
|
|
|
|
class PrincipalPreference(BaseModel):
|
|
principal = models.OneToOneField(IAmPrincipal, on_delete=models.CASCADE)
|
|
preferred_categories = models.ManyToManyField(
|
|
EventCategory, related_name="preferred_by_users"
|
|
)
|
|
|
|
def __str__(self):
|
|
return str(self.preferred_categories)
|
|
|
|
class Meta:
|
|
db_table = "user_preference"
|
|
|
|
|
|
class Favorites(models.Model):
|
|
principal = models.ForeignKey(
|
|
IAmPrincipal, on_delete=models.CASCADE, related_name="favorited_by"
|
|
)
|
|
event = models.ForeignKey(Event, on_delete=models.CASCADE, related_name="favorites")
|
|
|
|
class Meta:
|
|
unique_together = ("principal", "event")
|
|
|
|
def __str__(self):
|
|
return f"{self.principal}'s favorite: {self.event.title}"
|