Skip to content

Commit 479704b

Browse files
committed
camelcased coverImage and workshopLink, minor css frontend tweaks
1 parent a83ac73 commit 479704b

9 files changed

Lines changed: 63 additions & 46 deletions

File tree

client/src/components/ui/EventDateDisplay.tsx

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,31 @@ export function getEventDateParts(dateString: string): EventDateParts | null {
3232
}
3333
}
3434

35+
const getOrdinal = (d: number) => {
36+
if (d > 3 && d < 21) return `${d}th`;
37+
switch (d % 10) {
38+
case 1:
39+
return `${d}st`;
40+
case 2:
41+
return `${d}nd`;
42+
case 3:
43+
return `${d}rd`;
44+
default:
45+
return `${d}th`;
46+
}
47+
};
48+
3549
type EventDateDisplayProps = { date: string };
3650

3751
/** Renders event date as: weekday・ day month・ time. */
3852
export function EventDateDisplay({ date }: EventDateDisplayProps) {
3953
const parts = getEventDateParts(date);
4054
if (!parts) return null;
4155
return (
42-
<div className="flex flex-wrap items-baseline gap-x-1">
43-
<span className="whitespace-nowrap text-primary">
44-
{parts.weekday}
45-
{"・"}
46-
</span>
47-
<span className="whitespace-nowrap text-primary">
48-
{parts.day} {parts.month}
56+
<div className="flex flex-wrap items-baseline gap-x-1 font-firaCode">
57+
<span className="whitespace-nowrap text-primary">{parts.weekday},</span>
58+
<span className="whitespace-nowrap font-medium text-primary">
59+
{getOrdinal(parseInt(parts.day))} {parts.month}
4960
{"・"}
5061
</span>
5162
<span className="text-secondary">{parts.time}</span>

client/src/hooks/useEvent.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,12 @@ type ApiEvent = {
1111
date: string;
1212
startTime: string | null;
1313
location: string;
14-
cover_image: string | null;
15-
workshop_link: string;
14+
coverImage: string | null;
15+
workshopLink: string;
1616
};
1717

18-
type UiEvent = Omit<ApiEvent, "cover_image" | "workshop_link"> & {
18+
type UiEvent = Omit<ApiEvent, "coverImage"> & {
1919
coverImage: string;
20-
workshopLink: string;
2120
};
2221

2322
/**
@@ -34,8 +33,7 @@ function normalizeEventId(
3433
function transformApiEventToUiEvent(data: ApiEvent): UiEvent {
3534
return {
3635
...data,
37-
coverImage: data.cover_image ?? "/game_dev_club_logo.svg",
38-
workshopLink: data.workshop_link,
36+
coverImage: data.coverImage ?? "/game_dev_club_logo.svg",
3937
};
4038
}
4139

client/src/hooks/useEvents.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,19 @@ type ApiEvent = {
1010
publicationDate: string;
1111
date: string;
1212
location: string;
13-
cover_image: string | null;
14-
workshop_link: string;
13+
coverImage: string | null;
14+
workshopLink: string;
1515
};
1616

17-
export type UiEvent = Omit<ApiEvent, "cover_image" | "workshop_link"> & {
17+
export type UiEvent = Omit<ApiEvent, "coverImage"> & {
1818
coverImage: string;
1919
workshopLink: string;
2020
};
2121

2222
function transformApiEventToUiEvent(data: ApiEvent): UiEvent {
2323
return {
2424
...data,
25-
coverImage: data.cover_image ?? "/game_dev_club_logo.svg",
26-
workshopLink: data.workshop_link,
25+
coverImage: data.coverImage ?? "/game_dev_club_logo.svg",
2726
};
2827
}
2928

client/src/pages/events/[id].tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,15 @@ export default function EventPage() {
5858
<p className="mt-6 text-lg">
5959
<EventDateDisplay date={event.date} />
6060
</p>
61-
<div className="text-primary">{event.location} </div>
61+
<div className="font-firaCode text-sm text-primary">
62+
{event.location}{" "}
63+
</div>
6264
<p className="mt-4 max-w-lg text-base leading-relaxed">
6365
{event.description}
6466
</p>
6567
{event.workshopLink && (
66-
<p className="mt-4 text-base">
67-
Workshop link:
68+
<p className="mt-4 font-firaCode">
69+
<span className="font-medium text-primary">Workshop link:</span>{" "}
6870
<a
6971
href={event.workshopLink}
7072
target="_blank"

server/game_dev/migrations/0015_event_workshop_link.py

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Generated by Django 5.1.15 on 2026-03-01 05:30
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('game_dev', '0028_alter_game_hosturl'),
10+
]
11+
12+
operations = [
13+
migrations.RenameField(
14+
model_name='event',
15+
old_name='cover_image',
16+
new_name='coverImage',
17+
),
18+
migrations.AddField(
19+
model_name='event',
20+
name='workshopLink',
21+
field=models.URLField(blank=True, max_length=2083),
22+
),
23+
]

server/game_dev/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ class Event(models.Model):
1717
date = models.DateTimeField()
1818
description = models.CharField(max_length=256, blank=True)
1919
publicationDate = models.DateField()
20-
cover_image = models.ImageField(upload_to="events/", null=True)
20+
coverImage = models.ImageField(upload_to="events/", null=True)
2121
location = models.CharField(max_length=256)
22-
workshop_link = models.URLField(max_length=2083, blank=True)
22+
workshopLink = models.URLField(max_length=2083, blank=True)
2323

2424
def __str__(self):
2525
return self.name

server/game_dev/serializers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ class Meta:
1111
"date",
1212
"description",
1313
"publicationDate",
14-
"cover_image",
14+
"coverImage",
1515
"location",
16-
"workshop_link",
16+
"workshopLink",
1717
]
1818

1919

server/game_dev/tests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ def setUp(self):
4444
date=self.event_datetime,
4545
description="Yayayyayayay!",
4646
publicationDate=self.pub_date,
47-
cover_image=image_file,
47+
coverImage=image_file,
4848
location="Ezone",
49-
workshop_link="https://example.com/workshop",
49+
workshopLink="https://example.com/workshop",
5050
)
5151

5252
def test_publication_date_is_date(self):
@@ -58,10 +58,10 @@ def test_publication_date_matches(self):
5858
self.assertEqual(event.publicationDate, self.pub_date)
5959

6060
def test_cover_image_not_empty(self):
61-
self.assertIsNotNone(self.event.cover_image)
61+
self.assertIsNotNone(self.event.coverImage)
6262

6363
def test_cover_image_is_saved_in_correct_folder(self):
64-
self.assertTrue(self.event.cover_image.name.startswith("events/"))
64+
self.assertTrue(self.event.coverImage.name.startswith("events/"))
6565

6666
def test_publication_date_not_empty(self):
6767
self.assertTrue(bool(self.event.publicationDate))
@@ -76,7 +76,7 @@ def test_event_datetime_matches(self):
7676

7777
def test_workshop_link_matches(self):
7878
event = Event.objects.get(pk=self.event.pk)
79-
self.assertEqual(event.workshop_link, "https://example.com/workshop")
79+
self.assertEqual(event.workshopLink, "https://example.com/workshop")
8080

8181

8282
class CommitteeModelTest(TestCase):

0 commit comments

Comments
 (0)