-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathmodels.py
More file actions
132 lines (106 loc) · 4.35 KB
/
Copy pathmodels.py
File metadata and controls
132 lines (106 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from django.db import models
from django.core.exceptions import ValidationError
class Member(models.Model):
name = models.CharField(max_length=200)
active = models.BooleanField(default=True)
profile_picture = models.ImageField(upload_to="profiles/", null=True, blank=True)
about = models.CharField(max_length=256, blank=True)
pronouns = models.CharField(max_length=20, blank=True)
def __str__(self):
return str(self.name)
class Event(models.Model):
name = models.CharField(max_length=200)
date = models.DateTimeField()
description = models.CharField(max_length=256, blank=True)
publicationDate = models.DateField()
coverImage = models.ImageField(upload_to="events/", null=True)
location = models.CharField(max_length=256)
workshopLink = models.URLField(max_length=2083, blank=True)
def __str__(self):
return self.name
# GameContributor table: links Game, Member, and role (composite PK)
class GameContributor(models.Model):
game = models.ForeignKey('Game', on_delete=models.CASCADE, related_name='game_contributors')
member = models.ForeignKey('Member', on_delete=models.CASCADE, related_name='member_games')
role = models.CharField(max_length=100)
class Meta:
unique_together = (('game', 'member'),)
def __str__(self):
return f"{self.member.name} ({self.role}) for {self.game.name}"
class Game(models.Model):
# Enum choices
class CompletionStatus(models.IntegerChoices):
WIP = 1, "Work in Progress (Unplayable)"
PLAYABLE_DEV = 2, "Playable - In Development"
BETA = 3, "Beta - Stable but not Final"
COMPLETED = 4, "Completed"
name = models.CharField(max_length=200, null=False)
description = models.TextField()
completion = models.IntegerField(
choices=CompletionStatus.choices,
default=CompletionStatus.WIP,
null=False,
)
active = models.BooleanField(default=True, null=False)
hostURL = models.URLField(max_length=2083, blank=True)
itchEmbedID = models.PositiveIntegerField(
default=None,
null=True,
blank=True,
help_text="If game is stored on itch.io, please enter the itchEmbedID, i.e., 1000200"
)
itchGamePlayableID = models.PositiveBigIntegerField(
default=None,
null=True,
blank=True,
help_text="If a game is playable and has a web demo stored on itch.io, please enter the embed developer ID"
)
itchGameWidth = models.PositiveBigIntegerField(
default=None,
null=True,
blank=True,
)
itchGameHeight = models.PositiveBigIntegerField(
default=None,
null=True,
blank=True,
)
thumbnail = models.ImageField(upload_to="games/", null=True)
event = models.ForeignKey(Event, on_delete=models.SET_NULL, null=True, blank=True)
def __str__(self):
return str(self.name)
def clean(self):
super().clean()
if self.itchGamePlayableID:
if not self.itchGameWidth:
raise ValidationError({"itchGameWidth": "Game width is required if itchGamePlayableID is set."})
if not self.itchGameHeight:
raise ValidationError({"itchGameHeight": "Game height is required if itchGamePlayableID is set."})
class GameShowcase(models.Model):
game = models.OneToOneField('Game', on_delete=models.CASCADE, related_name='game_showcases')
description = models.TextField()
def __str__(self):
return f"{self.game.name}"
class SocialMedia(models.Model):
link = models.URLField(max_length=2083)
member = models.ForeignKey('Member', on_delete=models.CASCADE, related_name='social_media_links')
socialMediaUserName = models.CharField(max_length=200, blank=True)
def __str__(self):
return f"{self.socialMediaUserName} link for {self.member.name}"
class Committee(models.Model):
id = models.OneToOneField(Member, on_delete=models.CASCADE, primary_key=True)
roles = {
"P": "President",
"VP": "Vice-President",
"SEC": "Secretary",
"TRE": "Treasurer",
"MARK": "Marketing",
"EV": "Events OCM",
"PRO": "Projects OCM",
"FRE": "Fresher Rep"
}
role = models.CharField(max_length=9, choices=roles, default="FRE", unique=True)
def get_member(self):
return self.id
def __str__(self):
return self.id.name