Skip to content

Commit

Permalink
Merge pull request #268 from djangoindia/staging
Browse files Browse the repository at this point in the history
Staging to Production - Jan 10, 2025
  • Loading branch information
DevilsAutumn authored Jan 9, 2025
2 parents fefd489 + ea2a39a commit 2dcba7f
Show file tree
Hide file tree
Showing 7 changed files with 880 additions and 13 deletions.
2 changes: 1 addition & 1 deletion backend/djangoindia/api/views/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ def list(self, request, *args, **kwargs):

def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
all_community_partners = CommunityPartner.objects.filter(created_at__gt=instance.created_at)
all_community_partners = CommunityPartner.objects.filter(created_at__lt=instance.created_at)
serializer = EventSerializer(
instance, context={"all_community_partners": all_community_partners}
)
Expand Down
10 changes: 3 additions & 7 deletions backend/djangoindia/db/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,15 +219,11 @@ class SponsorAdmin(admin.ModelAdmin):
@admin.register(Update)
class UpdateAdmin(admin.ModelAdmin):
form = UpdateForm
list_display = ("email_subject", "type", "created_by", "created_at", "mail_sent")
search_fields = ["email_subject", "created_by__username", "created_by__first_name", "type"]
readonly_fields = ("created_by", "created_at", "updated_at")
list_display = ("email_subject", "type", "created_at", "mail_sent")
search_fields = ["email_subject", "type"]
readonly_fields = ("created_at", "updated_at")
actions = ["send_update"]

def save_model(self, request, obj, form, change):
obj.created_by = request.user
super().save_model(request, obj, form, change)

@admin.action(description="Send selected updates to subscribers")
def send_update(self, request, queryset):
for update in queryset:
Expand Down

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions backend/djangoindia/db/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from djangoindia.db.models.update import Update
from djangoindia.db.models.volunteer import Volunteer

from .user import User


__all__ = [
"ContactUs",
Expand All @@ -14,4 +16,5 @@
"Sponsorship",
"Update",
"Volunteer",
"User",
]
2 changes: 0 additions & 2 deletions backend/djangoindia/db/models/update.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from django_prose_editor.fields import ProseEditorField

from django.contrib.auth.models import User
from django.db import models

from djangoindia.bg_tasks.send_update import send_mass_update_email_task
Expand All @@ -18,7 +17,6 @@ class UpdateType(models.TextChoices):
email_subject = models.CharField(max_length=255)
type = models.CharField(max_length=20, choices=UpdateType.choices)
email_body = ProseEditorField()
created_by = models.ForeignKey(User, on_delete=models.DO_NOTHING, editable=False)
recipients = models.ManyToManyField("Subscriber", related_name="received_updates")
mail_sent = models.BooleanField(default=False)

Expand Down
100 changes: 100 additions & 0 deletions backend/djangoindia/db/models/user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# Python imports
import uuid

import pytz

from django.contrib.auth.models import (
AbstractBaseUser,
Group,
Permission,
PermissionsMixin,
UserManager,
)

# Django imports
from django.db import models
from django.utils.translation import gettext_lazy as _


class User(AbstractBaseUser, PermissionsMixin):
class GENDER:
CHOICES = (
("male", "male"),
("female", "female"),
("non-binary", "non-binary"),
("not_to_specify", "not_to_specify"),
)

USER_TIMEZONE_CHOICES = tuple(zip(pytz.all_timezones, pytz.all_timezones))

username = models.CharField(max_length=128, unique=True)
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)

# user fields
mobile_number = models.CharField(max_length=255, blank=True, null=True)
email = models.CharField(max_length=255, null=True, blank=True, unique=True)
first_name = models.CharField(max_length=255, blank=True)
last_name = models.CharField(max_length=255, blank=True)
avatar = models.CharField(max_length=255, blank=True)
organization = models.CharField(max_length=500, blank=True, null=True)
gender = models.CharField(choices=GENDER.CHOICES, max_length=50)

# tracking metrics
created_at = models.DateTimeField(auto_now_add=True, verbose_name="Created At")
updated_at = models.DateTimeField(auto_now=True, verbose_name="Last Modified At")

# the is' es
is_superuser = models.BooleanField(default=False)
is_password_expired = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_email_verified = models.BooleanField(default=False)
is_password_autoset = models.BooleanField(default=False)
is_onboarded = models.BooleanField(default=False)

user_timezone = models.CharField(
max_length=255, default="Asia/Kolkata", choices=USER_TIMEZONE_CHOICES
)

groups = models.ManyToManyField(
Group,
verbose_name=_("groups"),
blank=True,
help_text=_(
"The groups this user belongs to. A user will get all permissions "
"granted to each of their groups."
),
related_name="user_account_set",
related_query_name="user_account",
)
user_permissions = models.ManyToManyField(
Permission,
verbose_name=_("user permissions"),
blank=True,
help_text=_("Specific permissions for this user."),
related_name="user_account_set",
related_query_name="user_account",
)

USERNAME_FIELD = "email"

REQUIRED_FIELDS = ["username"]

objects = UserManager()

class Meta:
verbose_name = "User"
verbose_name_plural = "Users"
db_table = "users"
ordering = ("-created_at",)

def __str__(self):
return f"{self.username} <{self.email}>"

def save(self, *args, **kwargs):
self.email = self.email.lower().strip()

if self.is_superuser:
self.is_staff = True

super().save(*args, **kwargs)
6 changes: 3 additions & 3 deletions frontend/src/sections/EventSection/Main.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ const Main: React.FC = async () => {
{error && error.message && <ClientError error={error} />}
{filtered_events?.length ? (
<Carousel>
<CarouselContent>
<CarouselContent className='grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4'>
{filtered_events?.map(
({
cover_image,
Expand All @@ -50,10 +50,10 @@ const Main: React.FC = async () => {
slug,
}) => (
<CarouselItem
className='basis-1 sm:basis-1/2 md:basis-1/3'
className='w-full h-auto' // ensures full width on mobile
key={id}
>
<div className='mb-4 h-auto w-full md:mb-0 md:w-auto'>
<div className='mb-4 h-auto'>
<EventCard
eventId={id}
slug={slug}
Expand Down

0 comments on commit 2dcba7f

Please sign in to comment.