Skip to content
Snippets Groups Projects
Verified Commit fbe1004f authored by Ernesto Rico Schmidt's avatar Ernesto Rico Schmidt
Browse files

Remove ModelWithCreatedUpdatedFields

- Added `created_{at,by}` and `updated_{at,by}` to `Host`, `Show`, `Note` and `UserProfile`.
- Sorted all the fields alphabetically (still not 100% sure it is more readable)
parent 680669d2
No related branches found
No related tags found
No related merge requests found
Pipeline #3144 failed
...@@ -37,27 +37,10 @@ class ScheduleConflictError(ValidationError): ...@@ -37,27 +37,10 @@ class ScheduleConflictError(ValidationError):
self.conflicts = conflicts self.conflicts = conflicts
class ModelWithCreatedUpdatedFields(models.Model):
"""Abstract model that adds:
- `created_at`, a `DateTimeField` with `auto_now_add=True`
- `updated_at`, a `DateTimeField` with `auto_now=True`
- `created_by`, a `CharField`
- `updated_by`, a `CharField`
"""
created_at = models.DateTimeField(auto_now_add=True)
created_by = models.CharField(max_length=150)
updated_at = models.DateTimeField(auto_now=True, blank=True, null=True)
updated_by = models.CharField(blank=True, max_length=150, null=True)
class Meta:
abstract = True
class Type(models.Model): class Type(models.Model):
is_active = models.BooleanField(default=True)
name = models.CharField(max_length=32) name = models.CharField(max_length=32)
slug = models.SlugField(max_length=32, unique=True) slug = models.SlugField(max_length=32, unique=True)
is_active = models.BooleanField(default=True)
class Meta: class Meta:
ordering = ("name",) ordering = ("name",)
...@@ -67,11 +50,11 @@ class Type(models.Model): ...@@ -67,11 +50,11 @@ class Type(models.Model):
class Category(models.Model): class Category(models.Model):
description = models.TextField(blank=True)
is_active = models.BooleanField(default=True)
name = models.CharField(max_length=32) name = models.CharField(max_length=32)
subtitle = models.TextField(blank=True, null=True)
slug = models.SlugField(max_length=32, unique=True) slug = models.SlugField(max_length=32, unique=True)
is_active = models.BooleanField(default=True) subtitle = models.TextField(blank=True, null=True)
description = models.TextField(blank=True)
class Meta: class Meta:
ordering = ("name",) ordering = ("name",)
...@@ -82,9 +65,9 @@ class Category(models.Model): ...@@ -82,9 +65,9 @@ class Category(models.Model):
class Topic(models.Model): class Topic(models.Model):
is_active = models.BooleanField(default=True)
name = models.CharField(max_length=32) name = models.CharField(max_length=32)
slug = models.SlugField(max_length=32, unique=True) slug = models.SlugField(max_length=32, unique=True)
is_active = models.BooleanField(default=True)
class Meta: class Meta:
ordering = ("name",) ordering = ("name",)
...@@ -94,9 +77,9 @@ class Topic(models.Model): ...@@ -94,9 +77,9 @@ class Topic(models.Model):
class MusicFocus(models.Model): class MusicFocus(models.Model):
is_active = models.BooleanField(default=True)
name = models.CharField(max_length=32) name = models.CharField(max_length=32)
slug = models.SlugField(max_length=32, unique=True) slug = models.SlugField(max_length=32, unique=True)
is_active = models.BooleanField(default=True)
class Meta: class Meta:
ordering = ("name",) ordering = ("name",)
...@@ -107,9 +90,9 @@ class MusicFocus(models.Model): ...@@ -107,9 +90,9 @@ class MusicFocus(models.Model):
class FundingCategory(models.Model): class FundingCategory(models.Model):
is_active = models.BooleanField(default=True)
name = models.CharField(max_length=32) name = models.CharField(max_length=32)
slug = models.SlugField(max_length=32, unique=True) slug = models.SlugField(max_length=32, unique=True)
is_active = models.BooleanField(default=True)
class Meta: class Meta:
ordering = ("name",) ordering = ("name",)
...@@ -120,8 +103,8 @@ class FundingCategory(models.Model): ...@@ -120,8 +103,8 @@ class FundingCategory(models.Model):
class Language(models.Model): class Language(models.Model):
name = models.CharField(max_length=32)
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True)
name = models.CharField(max_length=32)
class Meta: class Meta:
ordering = ("name",) ordering = ("name",)
...@@ -160,12 +143,16 @@ class Image(models.Model): ...@@ -160,12 +143,16 @@ class Image(models.Model):
super().delete(using, keep_parents) super().delete(using, keep_parents)
class Host(ModelWithCreatedUpdatedFields): class Host(models.Model):
biography = models.TextField(blank=True, null=True) biography = models.TextField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
created_by = models.CharField(max_length=150)
email = models.EmailField(blank=True) email = models.EmailField(blank=True)
image = models.ForeignKey(Image, null=True, on_delete=models.CASCADE, related_name="hosts") image = models.ForeignKey(Image, null=True, on_delete=models.CASCADE, related_name="hosts")
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True)
name = models.CharField(max_length=128) name = models.CharField(max_length=128)
updated_at = models.DateTimeField(auto_now=True, blank=True, null=True)
updated_by = models.CharField(blank=True, max_length=150, null=True)
class Meta: class Meta:
ordering = ("name",) ordering = ("name",)
...@@ -211,9 +198,11 @@ class LicenseType(models.Model): ...@@ -211,9 +198,11 @@ class LicenseType(models.Model):
return self.type return self.type
class Show(ModelWithCreatedUpdatedFields): class Show(models.Model):
category = models.ManyToManyField(Category, blank=True, related_name="shows") category = models.ManyToManyField(Category, blank=True, related_name="shows")
cba_series_id = models.IntegerField(blank=True, null=True) cba_series_id = models.IntegerField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
created_by = models.CharField(max_length=150)
default_playlist_id = models.IntegerField(blank=True, null=True) default_playlist_id = models.IntegerField(blank=True, null=True)
description = models.TextField(blank=True, null=True) description = models.TextField(blank=True, null=True)
email = models.EmailField(blank=True, null=True) email = models.EmailField(blank=True, null=True)
...@@ -254,6 +243,8 @@ class Show(ModelWithCreatedUpdatedFields): ...@@ -254,6 +243,8 @@ class Show(ModelWithCreatedUpdatedFields):
type = models.ForeignKey( type = models.ForeignKey(
Type, blank=True, null=True, on_delete=models.CASCADE, related_name="shows" Type, blank=True, null=True, on_delete=models.CASCADE, related_name="shows"
) )
updated_at = models.DateTimeField(auto_now=True, blank=True, null=True)
updated_by = models.CharField(blank=True, max_length=150, null=True)
class Meta: class Meta:
ordering = ("slug",) ordering = ("slug",)
...@@ -267,19 +258,6 @@ class ShowLink(Link): ...@@ -267,19 +258,6 @@ class ShowLink(Link):
class RRule(models.Model): class RRule(models.Model):
name = models.CharField(max_length=32, unique=True)
freq = models.IntegerField(
choices=[
(0, "once"),
(1, "monthly"),
(2, "weekly"),
(3, "daily"),
]
)
interval = models.IntegerField(
default=1,
help_text="The interval between each freq iteration.",
)
by_set_pos = models.IntegerField( by_set_pos = models.IntegerField(
blank=True, blank=True,
choices=[ choices=[
...@@ -307,6 +285,19 @@ class RRule(models.Model): ...@@ -307,6 +285,19 @@ class RRule(models.Model):
null=True, null=True,
help_text="How many occurrences should be generated.", help_text="How many occurrences should be generated.",
) )
freq = models.IntegerField(
choices=[
(0, "once"),
(1, "monthly"),
(2, "weekly"),
(3, "daily"),
]
)
interval = models.IntegerField(
default=1,
help_text="The interval between each freq iteration.",
)
name = models.CharField(max_length=32, unique=True)
class Meta: class Meta:
ordering = ("pk",) ordering = ("pk",)
...@@ -318,17 +309,20 @@ class RRule(models.Model): ...@@ -318,17 +309,20 @@ class RRule(models.Model):
class Schedule(models.Model): class Schedule(models.Model):
rrule = models.ForeignKey( add_business_days_only = models.BooleanField(
RRule, default=False,
on_delete=models.CASCADE, help_text=(
related_name="schedules", "Whether to add add_days_no but skipping the weekends. "
help_text="A recurrence rule.", "E.g. if weekday is Friday, the date returned will be the next Monday."
),
) )
show = models.ForeignKey( add_days_no = models.IntegerField(
Show, blank=True,
on_delete=models.CASCADE, null=True,
related_name="schedules", help_text=(
help_text="Show the schedule belongs to.", "Add a number of days to the generated dates. "
"This can be useful for repetitions, like 'On the following day'."
),
) )
by_weekday = models.IntegerField( by_weekday = models.IntegerField(
help_text="Number of the Weekday.", help_text="Number of the Weekday.",
...@@ -343,34 +337,31 @@ class Schedule(models.Model): ...@@ -343,34 +337,31 @@ class Schedule(models.Model):
], ],
null=True, null=True,
) )
first_date = models.DateField(help_text="Start date of schedule.") default_playlist_id = models.IntegerField(
start_time = models.TimeField(help_text="Start time of schedule.") blank=True,
null=True,
help_text="A tank ID in case the timeslot's playlist_id is empty.",
)
end_time = models.TimeField(help_text="End time of schedule.") end_time = models.TimeField(help_text="End time of schedule.")
last_date = models.DateField(help_text="End date of schedule.") first_date = models.DateField(help_text="Start date of schedule.")
is_repetition = models.BooleanField( is_repetition = models.BooleanField(
default=False, default=False,
help_text="Whether the schedule is a repetition.", help_text="Whether the schedule is a repetition.",
) )
add_days_no = models.IntegerField( last_date = models.DateField(help_text="End date of schedule.")
blank=True, rrule = models.ForeignKey(
null=True, RRule,
help_text=( on_delete=models.CASCADE,
"Add a number of days to the generated dates. " related_name="schedules",
"This can be useful for repetitions, like 'On the following day'." help_text="A recurrence rule.",
),
)
add_business_days_only = models.BooleanField(
default=False,
help_text=(
"Whether to add add_days_no but skipping the weekends. "
"E.g. if weekday is Friday, the date returned will be the next Monday."
),
) )
default_playlist_id = models.IntegerField( show = models.ForeignKey(
blank=True, Show,
null=True, on_delete=models.CASCADE,
help_text="A tank ID in case the timeslot's playlist_id is empty.", related_name="schedules",
help_text="Show the schedule belongs to.",
) )
start_time = models.TimeField(help_text="Start time of schedule.")
class Meta: class Meta:
ordering = ("first_date", "start_time") ordering = ("first_date", "start_time")
...@@ -410,13 +401,10 @@ class TimeSlotManager(models.Manager): ...@@ -410,13 +401,10 @@ class TimeSlotManager(models.Manager):
class TimeSlot(models.Model): class TimeSlot(models.Model):
schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE, related_name="timeslots")
show = models.ForeignKey(
Show, editable=False, on_delete=models.CASCADE, related_name="timeslots"
)
start = models.DateTimeField()
end = models.DateTimeField() end = models.DateTimeField()
memo = models.TextField(blank=True) memo = models.TextField(blank=True)
note_id = models.IntegerField(null=True, editable=False)
playlist_id = models.IntegerField(null=True)
repetition_of = models.ForeignKey( repetition_of = models.ForeignKey(
"self", "self",
blank=True, blank=True,
...@@ -424,8 +412,11 @@ class TimeSlot(models.Model): ...@@ -424,8 +412,11 @@ class TimeSlot(models.Model):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name="repetitions", related_name="repetitions",
) )
playlist_id = models.IntegerField(null=True) schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE, related_name="timeslots")
note_id = models.IntegerField(null=True, editable=False) show = models.ForeignKey(
Show, editable=False, on_delete=models.CASCADE, related_name="timeslots"
)
start = models.DateTimeField()
objects = TimeSlotManager() objects = TimeSlotManager()
...@@ -462,13 +453,19 @@ class TimeSlot(models.Model): ...@@ -462,13 +453,19 @@ class TimeSlot(models.Model):
return str("".join(s for s in string if s.isdigit())) return str("".join(s for s in string if s.isdigit()))
class Note(ModelWithCreatedUpdatedFields): class Note(models.Model):
contributors = models.ManyToManyField(Host, related_name="contributions")
cba_id = models.IntegerField(blank=True, null=True) cba_id = models.IntegerField(blank=True, null=True)
content = models.TextField() content = models.TextField()
contributors = models.ManyToManyField(Host, related_name="contributions")
created_at = models.DateTimeField(auto_now_add=True)
created_by = models.CharField(max_length=150)
image = models.ForeignKey(Image, null=True, on_delete=models.CASCADE, related_name="notes") image = models.ForeignKey(Image, null=True, on_delete=models.CASCADE, related_name="notes")
owner = models.ForeignKey( owner = models.ForeignKey(
User, editable=False, on_delete=models.CASCADE, related_name="notes", default=1 User,
editable=False,
on_delete=models.CASCADE,
related_name="notes",
default=1,
) )
playlist = models.TextField(blank=True, null=True) playlist = models.TextField(blank=True, null=True)
slug = models.SlugField(max_length=32, unique=True) slug = models.SlugField(max_length=32, unique=True)
...@@ -476,6 +473,8 @@ class Note(ModelWithCreatedUpdatedFields): ...@@ -476,6 +473,8 @@ class Note(ModelWithCreatedUpdatedFields):
tags = models.TextField(blank=True, null=True) tags = models.TextField(blank=True, null=True)
timeslot = models.OneToOneField(TimeSlot, on_delete=models.CASCADE, unique=True) timeslot = models.OneToOneField(TimeSlot, on_delete=models.CASCADE, unique=True)
title = models.CharField(max_length=128) title = models.CharField(max_length=128)
updated_at = models.DateTimeField(auto_now=True, blank=True, null=True)
updated_by = models.CharField(blank=True, max_length=150, null=True)
class Meta: class Meta:
ordering = ("timeslot",) ordering = ("timeslot",)
...@@ -495,12 +494,19 @@ class NoteLink(Link): ...@@ -495,12 +494,19 @@ class NoteLink(Link):
note = models.ForeignKey(Note, on_delete=models.CASCADE, related_name="links") note = models.ForeignKey(Note, on_delete=models.CASCADE, related_name="links")
class UserProfile(ModelWithCreatedUpdatedFields, models.Model): class UserProfile(models.Model):
user = models.OneToOneField(
User, on_delete=models.CASCADE, related_name="profile", editable=False
)
cba_username = models.CharField("CBA Username", blank=True, max_length=60) cba_username = models.CharField("CBA Username", blank=True, max_length=60)
cba_user_token = models.CharField("CBA Token", blank=True, max_length=255) cba_user_token = models.CharField("CBA Token", blank=True, max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
created_by = models.CharField(max_length=150)
updated_at = models.DateTimeField(auto_now=True, blank=True, null=True)
updated_by = models.CharField(blank=True, max_length=150, null=True)
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
related_name="profile",
editable=False,
)
def __str__(self): def __str__(self):
return self.user.username return self.user.username
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment