From 6cfa7a126829967d109abd3b7d1a9cc7d45c8f1f Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Tue, 30 Dec 2025 17:45:18 +0800 Subject: [PATCH 01/15] Create Committee Model Created a basic committee model, implementation of the enum may be different to what is desired so can easily be redone. Migrations haven't been made yet because if the issue I mentioned on discord. --- server/game_dev/models.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server/game_dev/models.py b/server/game_dev/models.py index 6398070..5063994 100644 --- a/server/game_dev/models.py +++ b/server/game_dev/models.py @@ -22,3 +22,16 @@ class Event(models.Model): def __str__(self): return self.name + +class Committee(models.Model): + id = models.OneToOneField(Member, on_delete=models.DO_NOTHING, primary_key=True) + role = { + "P": "President", + "VP": "Vice-President", + "SEC": "Secretary", + "TRE": "Treasurer", + "MARK": "Marketing", + "EV": "Events OCM", + "PRO": "Projects OCM", + "FRE": "Fresher Rep" + } \ No newline at end of file From 67b37acfc0446c3a12724ae508b241e3c301713f Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 7 Jan 2026 16:22:28 +0800 Subject: [PATCH 02/15] feat: enhance About Us section styling and layout - Increase title size to text-5xl/6xl for better prominence - Change underline color from gray to white to match design - Apply pixelated font (jersey10) to paragraph text - Replace text placeholder with ImageIcon component - Add second paragraph content to match design spec - Improve responsive sizing and spacing --- client/src/pages/about.tsx | 36 ++++++++++++++++++++++++++++++++++++ server/api/settings.py | 3 +-- 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 client/src/pages/about.tsx diff --git a/client/src/pages/about.tsx b/client/src/pages/about.tsx new file mode 100644 index 0000000..8b0bf9a --- /dev/null +++ b/client/src/pages/about.tsx @@ -0,0 +1,36 @@ +import Image from "next/image"; +import { ImageIcon } from "lucide-react"; + +export default function AboutPage() { + return ( +
+
+
+

+ About Us +

+ +
+
+ +
+
+
+
+ ); +} + diff --git a/server/api/settings.py b/server/api/settings.py index 424f34e..cd2affe 100644 --- a/server/api/settings.py +++ b/server/api/settings.py @@ -69,8 +69,7 @@ CORS_ALLOWED_ORIGINS = [ "http://localhost:3000", "http://127.0.0.1:3000", - FRONTEND_URL -] +] + ([FRONTEND_URL] if FRONTEND_URL else []) ROOT_URLCONF = "api.urls" From 511006d33d0b8213bbdd1e872058c2d061137a22 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 7 Jan 2026 18:54:47 +0800 Subject: [PATCH 03/15] feat: implement About page with Committee section - Add "About Us" section with styled title, underline, and content - Implement "Our Committee" section with full-width layout - Add committee member cards with portrait frames - Update color scheme to match design: * About Us title: #9B9BDE (light purple) * Underline: #5E5ECC (blue/purple) * Image placeholder: #C5C5E8 (light purple) * Main background: #090A19 (dark navy) * Committee section: #1B1F4C (purple-navy) - Make committee section full-width with flat edges - Increase portrait frame size to 180x185px - Add proper spacing between title and portraits - Style committee member names and roles with badges --- client/public/frame.png | Bin 0 -> 115762 bytes client/public/game_dev_club_logo.svg | 9 -- client/public/next.svg | 1 - client/public/vercel.svg | 1 - client/src/pages/about.tsx | 120 +++++++++++++++++++++------ 5 files changed, 95 insertions(+), 36 deletions(-) create mode 100644 client/public/frame.png delete mode 100644 client/public/game_dev_club_logo.svg delete mode 100644 client/public/next.svg delete mode 100644 client/public/vercel.svg diff --git a/client/public/frame.png b/client/public/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..4a427a5247240c37a2f74495da0ec12f21ee7d8a GIT binary patch literal 115762 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�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 literal 0 HcmV?d00001 diff --git a/client/public/game_dev_club_logo.svg b/client/public/game_dev_club_logo.svg deleted file mode 100644 index 072fb6d..0000000 --- a/client/public/game_dev_club_logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/client/public/next.svg b/client/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/client/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/client/public/vercel.svg b/client/public/vercel.svg deleted file mode 100644 index d2f8422..0000000 --- a/client/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/client/src/pages/about.tsx b/client/src/pages/about.tsx index 8b0bf9a..956240e 100644 --- a/client/src/pages/about.tsx +++ b/client/src/pages/about.tsx @@ -2,35 +2,105 @@ import Image from "next/image"; import { ImageIcon } from "lucide-react"; export default function AboutPage() { + const topRow = [ + { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, + { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, + { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, + { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, + ]; + + const bottomRow = [ + { name: "FirstName LastName", role: "Marketing Officer" }, + { name: "FirstName LastName", role: "OCM" }, + { name: "FirstName LastName", role: "OCM" }, + ]; + return ( -
-
-
-

- About Us -

-
); -} - +} \ No newline at end of file From 2583e4763af91b64241259e6422c9b4b615f6488 Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Fri, 9 Jan 2026 18:13:39 +0800 Subject: [PATCH 04/15] Implemented Committee Model in the backend - Revised the Committee model's role attribute to actually work now, turning it into a CharField with the roles as choices. - Added a __str__ method for the Committee model, where a committee object is represented by the name of its connected member object - Made all migrations for the Committee Model - Registered the model on the admin.py file, it seems fully functional on the admin dashboard --- server/game_dev/admin.py | 6 +++++- server/game_dev/migrations/0005_committee.py | 20 +++++++++++++++++++ .../migrations/0006_committee_role.py | 18 +++++++++++++++++ server/game_dev/models.py | 7 +++++-- 4 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 server/game_dev/migrations/0005_committee.py create mode 100644 server/game_dev/migrations/0006_committee_role.py diff --git a/server/game_dev/admin.py b/server/game_dev/admin.py index 46d358c..3739957 100644 --- a/server/game_dev/admin.py +++ b/server/game_dev/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Member, Event +from .models import Member, Event, Committee class MemberAdmin(admin.ModelAdmin): @@ -8,7 +8,11 @@ class MemberAdmin(admin.ModelAdmin): class EventAdmin(admin.ModelAdmin): list_display = ("name", "date", "location", "publicationDate") + +class CommitteeAdmin(admin.ModelAdmin): + pass admin.site.register(Member, MemberAdmin) admin.site.register(Event, EventAdmin) +admin.site.register(Committee, CommitteeAdmin) diff --git a/server/game_dev/migrations/0005_committee.py b/server/game_dev/migrations/0005_committee.py new file mode 100644 index 0000000..271dee1 --- /dev/null +++ b/server/game_dev/migrations/0005_committee.py @@ -0,0 +1,20 @@ +# Generated by Django 5.1.15 on 2026-01-09 09:46 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('game_dev', '0004_alter_event_date'), + ] + + operations = [ + migrations.CreateModel( + name='Committee', + fields=[ + ('id', models.OneToOneField(on_delete=django.db.models.deletion.DO_NOTHING, primary_key=True, serialize=False, to='game_dev.member')), + ], + ), + ] diff --git a/server/game_dev/migrations/0006_committee_role.py b/server/game_dev/migrations/0006_committee_role.py new file mode 100644 index 0000000..85fee39 --- /dev/null +++ b/server/game_dev/migrations/0006_committee_role.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.15 on 2026-01-09 09:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('game_dev', '0005_committee'), + ] + + operations = [ + migrations.AddField( + model_name='committee', + name='role', + field=models.CharField(choices=[('P', 'President'), ('VP', 'Vice-President'), ('SEC', 'Secretary'), ('TRE', 'Treasurer'), ('MARK', 'Marketing'), ('EV', 'Events OCM'), ('PRO', 'Projects OCM'), ('FRE', 'Fresher Rep')], default='FRE', max_length=9), + ), + ] diff --git a/server/game_dev/models.py b/server/game_dev/models.py index 5063994..a224302 100644 --- a/server/game_dev/models.py +++ b/server/game_dev/models.py @@ -25,7 +25,7 @@ def __str__(self): class Committee(models.Model): id = models.OneToOneField(Member, on_delete=models.DO_NOTHING, primary_key=True) - role = { + roles = { "P": "President", "VP": "Vice-President", "SEC": "Secretary", @@ -34,4 +34,7 @@ class Committee(models.Model): "EV": "Events OCM", "PRO": "Projects OCM", "FRE": "Fresher Rep" - } \ No newline at end of file + } + role = models.CharField(max_length=9, choices=roles, default="FRE") + def __str__(self): + return self.id.name \ No newline at end of file From b1ddbc731c12faf2bff6f63e0b8644170161b333 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 11 Jan 2026 19:52:11 +0800 Subject: [PATCH 05/15] Fix committee member name styling and alignment - Fixed name display format and text alignment (left-aligned) - Fixed background colors (#1B1F4C) with proper text wrapping - Fixed alignment between portraits and text labels --- client/src/pages/about.tsx | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/client/src/pages/about.tsx b/client/src/pages/about.tsx index 956240e..b39dd4e 100644 --- a/client/src/pages/about.tsx +++ b/client/src/pages/about.tsx @@ -10,9 +10,9 @@ export default function AboutPage() { ]; const bottomRow = [ - { name: "FirstName LastName", role: "Marketing Officer" }, - { name: "FirstName LastName", role: "OCM" }, - { name: "FirstName LastName", role: "OCM" }, + { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, + { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, + { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, ]; return ( @@ -59,7 +59,7 @@ export default function AboutPage() { {/* Top row - 4 Presidents */}
{topRow.map((member, idx) => ( -
+
-
-

{member.name} {member.pronouns}

-

{member.role}

+
+

{member.name} {member.pronouns}

+

{member.role}

))} @@ -81,7 +81,7 @@ export default function AboutPage() { {/* Bottom row - 3 other roles */}
{bottomRow.map((member, idx) => ( -
+
-
-

{member.name}

-

{member.role}

+
+

{member.name} {member.pronouns}

+

{member.role}

))} From 964b84a85a56dece9c928d1733a372129eb167d3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 11 Jan 2026 20:13:58 +0800 Subject: [PATCH 06/15] Fix navbar to stay fixed at top when scrolling - Changed navbar positioning from sticky to fixed - Added left-0 right-0 to anchor navbar to viewport edges - Added z-50 to ensure navbar stays above other content - Added pt-24 padding to content wrapper to prevent content from going behind fixed navbar - Removed unnecessary fragment wrapper in navbar component --- client/src/components/main/Navbar.tsx | 6 ++---- client/src/pages/_app.tsx | 4 +++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/src/components/main/Navbar.tsx b/client/src/components/main/Navbar.tsx index b25a62b..3eca4bc 100644 --- a/client/src/components/main/Navbar.tsx +++ b/client/src/components/main/Navbar.tsx @@ -17,8 +17,7 @@ export default function Navbar() { ]; return ( - <> -
+
- - + ); } diff --git a/client/src/pages/_app.tsx b/client/src/pages/_app.tsx index eb47676..28dd777 100644 --- a/client/src/pages/_app.tsx +++ b/client/src/pages/_app.tsx @@ -35,7 +35,9 @@ export default function App({ Component, pageProps }: AppProps) { className={`font-sans ` + fonts.map((font) => font.variable).join(" ")} > - +
+ +
); From 4d1d3672866c0947fa157abb5ad331a951aae051 Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Sun, 18 Jan 2026 23:46:25 +0800 Subject: [PATCH 07/15] Added CommitteeAPIView, useCommittee hook and implemented it in frontend - Added a get_member() function to the Committee model which returns the object's corresponding member object - Added CommitteeAPIView which retrieves the list of members that are on the committee, in a specific order - Added this view to the committee page URL at 'about/' - Created useCommittee hook which fetches the response from the CommitteeAPIView and has appropriate error handling - Modified the about page to use this hook and dynamically use the response to display the committee members, with appropriate error handling --- client/src/hooks/useCommittee.ts | 28 +++++++++ client/src/pages/about.tsx | 104 ++++++++++++++++++++++--------- server/game_dev/models.py | 4 ++ server/game_dev/urls.py | 3 +- server/game_dev/views.py | 18 +++++- 5 files changed, 123 insertions(+), 34 deletions(-) create mode 100644 client/src/hooks/useCommittee.ts diff --git a/client/src/hooks/useCommittee.ts b/client/src/hooks/useCommittee.ts new file mode 100644 index 0000000..bb28268 --- /dev/null +++ b/client/src/hooks/useCommittee.ts @@ -0,0 +1,28 @@ +import { useQuery } from "@tanstack/react-query"; +import { AxiosError } from "axios"; + +import api from "@/lib/api"; + +type ApiMember = { + name: string; + profile_picture: string; + pronouns: string; + about: string; +}; + +export function useCommittee() { + return useQuery({ + queryKey: ["role"], + queryFn: async () => { + const response = await api.get("/about/"); + console.log(response.data); + return response.data; + }, + retry: (failureCount, error) => { + if (error?.response?.status === 404) { + return false; + } + return failureCount < 3; + }, + }); +} diff --git a/client/src/pages/about.tsx b/client/src/pages/about.tsx index b39dd4e..d89600f 100644 --- a/client/src/pages/about.tsx +++ b/client/src/pages/about.tsx @@ -1,41 +1,71 @@ import Image from "next/image"; import { ImageIcon } from "lucide-react"; +import { useCommittee } from "@/hooks/useCommittee"; +import { useRouter } from "next/router"; export default function AboutPage() { - const topRow = [ - { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, - { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, - { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, - { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, - ]; + //const router = useRouter(); + //const { id } = router.query; + // don't know if necessary - const bottomRow = [ - { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, - { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, - { name: "FirstName LastName", pronouns: "(he/him)", role: "President" }, - ]; + const { data: committee, isPending, error, isError } = useCommittee(); + + const topRow: any[] = []; + const bottomRow: any[] = []; + //lists that will be populated with member objects in the committee + const roleOrder = ["President", "Vice President", "Secretary", "Treasurer", "Marketing", "Events OCM", "Projects OCM", "Fresher Rep"] + + + if (isPending) { + for (let i = 0; i < 8; i++) { + if (i < 4) { + topRow.push({ name: "Loading...", pronouns: "", role: "" }); + } else { + bottomRow.push({ name: "Loading...", pronouns: "", role: "" }); + } + } + } else if (isError) { + const errorMessage = + error?.response?.status === 404 + ? "Committee Page not found." + : "Failed to load Committee Page."; + + return ( +
+

+ {errorMessage} +

+
+ ); + } else { + for (let i = 0; i < 8; i++) { + if (i < 4) { + topRow.push(committee[i]); + } else { + bottomRow.push(committee[i]); + } + } + } return (
-
+
-

+

About Us

{/* Portraits Section - DARK - Full Width */} -
+
{/* Top row - 4 Presidents */}
{topRow.map((member, idx) => ( -
+
-
-

{member.name} {member.pronouns}

-

{member.role}

+
+

+ {member.name} {member.pronouns} +

+

+ {roleOrder[idx]} +

))} @@ -81,7 +118,10 @@ export default function AboutPage() { {/* Bottom row - 3 other roles */}
{bottomRow.map((member, idx) => ( -
+
-
-

{member.name} {member.pronouns}

-

{member.role}

+
+

+ {member.name} {member.pronouns} +

+

+ {roleOrder[4+idx]} +

))} @@ -103,4 +147,4 @@ export default function AboutPage() {
); -} \ No newline at end of file +} diff --git a/server/game_dev/models.py b/server/game_dev/models.py index a224302..90c4175 100644 --- a/server/game_dev/models.py +++ b/server/game_dev/models.py @@ -36,5 +36,9 @@ class Committee(models.Model): "FRE": "Fresher Rep" } role = models.CharField(max_length=9, choices=roles, default="FRE") + + def get_member(self): + return self.id + def __str__(self): return self.id.name \ No newline at end of file diff --git a/server/game_dev/urls.py b/server/game_dev/urls.py index e387e58..be146e1 100644 --- a/server/game_dev/urls.py +++ b/server/game_dev/urls.py @@ -1,6 +1,7 @@ from django.urls import path -from .views import EventDetailAPIView +from .views import EventDetailAPIView, CommitteeAPIView urlpatterns = [ path("events//", EventDetailAPIView.as_view()), + path("about/", CommitteeAPIView.as_view()) ] diff --git a/server/game_dev/views.py b/server/game_dev/views.py index 71a747c..9d8ca38 100644 --- a/server/game_dev/views.py +++ b/server/game_dev/views.py @@ -2,9 +2,8 @@ # Create your views here. from rest_framework import generics -from .models import Event -from .serializers import EventSerializer - +from .models import Event, Committee +from .serializers import EventSerializer, MemberSerializer class EventDetailAPIView(generics.RetrieveAPIView): """ @@ -15,3 +14,16 @@ class EventDetailAPIView(generics.RetrieveAPIView): def get_queryset(self): return Event.objects.filter(id=self.kwargs["id"]) + +class CommitteeAPIView(generics.ListAPIView): + serializer_class = MemberSerializer + + def get_queryset(self): + outputList = [] + roleOrder =("P", "VP", "SEC", "TRE", "MARK", "EVE", "PRO", "FRE") + for i in roleOrder: + try: + outputList.append(Committee.objects.get(role=i).id) + except: + outputList.append({"name":"Position not filled", "profile_picture":"", "about": "", "pronouns":""}) + return outputList From ec86c09a528c695e1e485a9cc8a55e29bbf0f6b0 Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Sun, 18 Jan 2026 23:54:35 +0800 Subject: [PATCH 08/15] Revert "Fix navbar to stay fixed at top when scrolling" This reverts commit 964b84a85a56dece9c928d1733a372129eb167d3. --- client/src/components/main/Navbar.tsx | 6 ++++-- client/src/pages/_app.tsx | 4 +--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/src/components/main/Navbar.tsx b/client/src/components/main/Navbar.tsx index 3eca4bc..b25a62b 100644 --- a/client/src/components/main/Navbar.tsx +++ b/client/src/components/main/Navbar.tsx @@ -17,7 +17,8 @@ export default function Navbar() { ]; return ( -
+ <> +
- + + ); } diff --git a/client/src/pages/_app.tsx b/client/src/pages/_app.tsx index 28dd777..eb47676 100644 --- a/client/src/pages/_app.tsx +++ b/client/src/pages/_app.tsx @@ -35,9 +35,7 @@ export default function App({ Component, pageProps }: AppProps) { className={`font-sans ` + fonts.map((font) => font.variable).join(" ")} > -
- -
+ ); From 83c6e99a8447987484e95f5e151b5c422f3b7abe Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Mon, 19 Jan 2026 00:01:26 +0800 Subject: [PATCH 09/15] Previous commit furthered - Gave the Navbar a z-index of 100 so it is now fully up to date with main --- client/src/components/main/Navbar.tsx | 2 +- client/src/pages/about.tsx | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/client/src/components/main/Navbar.tsx b/client/src/components/main/Navbar.tsx index b25a62b..8567f93 100644 --- a/client/src/components/main/Navbar.tsx +++ b/client/src/components/main/Navbar.tsx @@ -18,7 +18,7 @@ export default function Navbar() { return ( <> -
+

- {roleOrder[4+idx]} + {roleOrder[4 + idx]}

From 799950e5d14bb15e8c902e1b15f4ee77ea685e85 Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Wed, 21 Jan 2026 17:07:07 +0800 Subject: [PATCH 10/15] Altered Committee id field and added tests for Committee Model - Made two migrations to the Committee Model, setting on_delete to CASCADE for the id field and setting unique to True for the role field. - Made a series of tests for the Committee model --- .../migrations/0007_alter_committee_id.py | 19 +++++++ .../migrations/0008_alter_committee_role.py | 18 +++++++ server/game_dev/models.py | 4 +- server/game_dev/tests.py | 49 ++++++++++++++++++- 4 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 server/game_dev/migrations/0007_alter_committee_id.py create mode 100644 server/game_dev/migrations/0008_alter_committee_role.py diff --git a/server/game_dev/migrations/0007_alter_committee_id.py b/server/game_dev/migrations/0007_alter_committee_id.py new file mode 100644 index 0000000..fa9a484 --- /dev/null +++ b/server/game_dev/migrations/0007_alter_committee_id.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.15 on 2026-01-21 07:59 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('game_dev', '0006_committee_role'), + ] + + operations = [ + migrations.AlterField( + model_name='committee', + name='id', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='game_dev.member'), + ), + ] diff --git a/server/game_dev/migrations/0008_alter_committee_role.py b/server/game_dev/migrations/0008_alter_committee_role.py new file mode 100644 index 0000000..7552fd0 --- /dev/null +++ b/server/game_dev/migrations/0008_alter_committee_role.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.15 on 2026-01-21 08:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('game_dev', '0007_alter_committee_id'), + ] + + operations = [ + migrations.AlterField( + model_name='committee', + name='role', + field=models.CharField(choices=[('P', 'President'), ('VP', 'Vice-President'), ('SEC', 'Secretary'), ('TRE', 'Treasurer'), ('MARK', 'Marketing'), ('EV', 'Events OCM'), ('PRO', 'Projects OCM'), ('FRE', 'Fresher Rep')], default='FRE', max_length=9, unique=True), + ), + ] diff --git a/server/game_dev/models.py b/server/game_dev/models.py index 90c4175..4f0db33 100644 --- a/server/game_dev/models.py +++ b/server/game_dev/models.py @@ -24,7 +24,7 @@ def __str__(self): return self.name class Committee(models.Model): - id = models.OneToOneField(Member, on_delete=models.DO_NOTHING, primary_key=True) + id = models.OneToOneField(Member, on_delete=models.CASCADE, primary_key=True) roles = { "P": "President", "VP": "Vice-President", @@ -35,7 +35,7 @@ class Committee(models.Model): "PRO": "Projects OCM", "FRE": "Fresher Rep" } - role = models.CharField(max_length=9, choices=roles, default="FRE") + role = models.CharField(max_length=9, choices=roles, default="FRE", unique=True) def get_member(self): return self.id diff --git a/server/game_dev/tests.py b/server/game_dev/tests.py index 411a639..979d1cd 100644 --- a/server/game_dev/tests.py +++ b/server/game_dev/tests.py @@ -1,5 +1,5 @@ from django.test import TestCase -from .models import Member, Event +from .models import Member, Event, Committee import datetime from django.core.files.uploadedfile import SimpleUploadedFile from django.utils import timezone @@ -70,3 +70,50 @@ def test_event_date_is_datetime(self): def test_event_datetime_matches(self): event = Event.objects.get(pk=self.event.pk) self.assertEqual(event.date, self.event_datetime) + + +class CommitteeModelTest(TestCase): + def setUp(self): + self.member = Member.objects.create( + name = "Linus Torvalds", + about = "Linux creator", + pronouns = "He/Him" + ) + try: + Member.objects.get(name="Linus Torvalds") + except Member.DoesNotExist: + self.fail("Member was not properly created before testing Committee model; check Member model") + self.committee = Committee.objects.create(id = self.member) + + def test_committee_creation(self): + try: + Committee.objects.get(id=self.member) + except Member.DoesNotExist: + self.fail("Committee Member was not properly created") + + def test_role_is_unique(self): + Member.objects.create( + name = "Jane Doe", + about = "Placeholder", + pronouns = "She/Her" + ) + try: + Committee.objects.create(id = Member.objects.get(name="Jane Doe"), role="P") + self.fail("Committee Member with a duplicate role was created") + except: + pass + + def test_cascade_from_committee(self): + self.committee.delete() + try: + Member.objects.get(name = self.member.name) + except: + self.fail("Deleting Committee object deleted it's corresponding Member object (undesired behaviour)") + + def test_cascade_from_member(self): + self.member.delete() + try: + Committee.objects.get(id = self.member) + self.fail("Deleting Member Object did not delete a possible corresponding Committee object (undesired behaviour)") + except: + pass \ No newline at end of file From 974835920a66f42b56096218f78bdd2b6b168698 Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Wed, 21 Jan 2026 17:52:32 +0800 Subject: [PATCH 11/15] Undid some changes to sync up with main - Undid the removal of game_dev_club_logo.svg, next.svg and vercel.svg from client/public - Undid a change to CORS_ALLOWED_ORIGINS in the settings.py file --- client/public/game_dev_club_logo.svg | 9 +++++++++ client/public/next.svg | 1 + client/public/vercel.svg | 1 + server/api/settings.py | 3 ++- 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 client/public/game_dev_club_logo.svg create mode 100644 client/public/next.svg create mode 100644 client/public/vercel.svg diff --git a/client/public/game_dev_club_logo.svg b/client/public/game_dev_club_logo.svg new file mode 100644 index 0000000..072fb6d --- /dev/null +++ b/client/public/game_dev_club_logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/client/public/next.svg b/client/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/client/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/public/vercel.svg b/client/public/vercel.svg new file mode 100644 index 0000000..d2f8422 --- /dev/null +++ b/client/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/api/settings.py b/server/api/settings.py index 7871503..12e500e 100644 --- a/server/api/settings.py +++ b/server/api/settings.py @@ -68,7 +68,8 @@ CORS_ALLOWED_ORIGINS = [ "http://localhost:3000", "http://127.0.0.1:3000", -] + ([FRONTEND_URL] if FRONTEND_URL else []) + FRONTEND_URL +] ROOT_URLCONF = "api.urls" From fcbcf59b83f910900c4ffcc010e49a54864a4498 Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Wed, 21 Jan 2026 21:10:30 +0800 Subject: [PATCH 12/15] Implemented Committee's profile pictures into the frontend -Replaced the placeholder ImageIcon used for the committee portraits with Images sourced by their profile_picture attribute --- client/src/pages/about.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/client/src/pages/about.tsx b/client/src/pages/about.tsx index 88cc4f0..3f46091 100644 --- a/client/src/pages/about.tsx +++ b/client/src/pages/about.tsx @@ -109,7 +109,13 @@ export default function AboutPage() { backgroundImage: "url('/frame.png')", }} > - +

@@ -138,7 +144,13 @@ export default function AboutPage() { backgroundImage: "url('/frame.png')", }} > - +

From c6cea363480b0538505888780e002a643c4a81d5 Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Wed, 21 Jan 2026 22:11:00 +0800 Subject: [PATCH 13/15] Formatting + replaced type of topRow and bottomRow - Replaced the topRow and bottomRow types with arrays of type ApiMember, imported from the useCommittee hook, rather than an unsafe any[] type. - Did formatting for prettier and flake8 (not fully done for flake8) --- client/src/hooks/useCommittee.ts | 2 +- client/src/pages/about.tsx | 24 +++++++++++++++++------- server/api/settings.py | 2 +- server/game_dev/admin.py | 5 +++-- server/game_dev/models.py | 9 +++++---- server/game_dev/tests.py | 10 +++++----- server/game_dev/views.py | 7 ++++--- 7 files changed, 36 insertions(+), 23 deletions(-) diff --git a/client/src/hooks/useCommittee.ts b/client/src/hooks/useCommittee.ts index bb28268..69c6fb8 100644 --- a/client/src/hooks/useCommittee.ts +++ b/client/src/hooks/useCommittee.ts @@ -3,7 +3,7 @@ import { AxiosError } from "axios"; import api from "@/lib/api"; -type ApiMember = { +export type ApiMember = { name: string; profile_picture: string; pronouns: string; diff --git a/client/src/pages/about.tsx b/client/src/pages/about.tsx index 3f46091..8c3f962 100644 --- a/client/src/pages/about.tsx +++ b/client/src/pages/about.tsx @@ -1,6 +1,6 @@ import Image from "next/image"; import { ImageIcon } from "lucide-react"; -import { useCommittee } from "@/hooks/useCommittee"; +import { useCommittee, ApiMember } from "@/hooks/useCommittee"; import { useRouter } from "next/router"; export default function AboutPage() { @@ -10,8 +10,8 @@ export default function AboutPage() { const { data: committee, isPending, error, isError } = useCommittee(); - const topRow: any[] = []; - const bottomRow: any[] = []; + const topRow: ApiMember[] = []; + const bottomRow: ApiMember[] = []; //lists that will be populated with member objects in the committee const roleOrder = [ "President", @@ -27,9 +27,19 @@ export default function AboutPage() { if (isPending) { for (let i = 0; i < 8; i++) { if (i < 4) { - topRow.push({ name: "Loading...", pronouns: "", role: "" }); + topRow.push({ + name: "Loading...", + pronouns: "", + profile_picture: "", + about: "", + }); } else { - bottomRow.push({ name: "Loading...", pronouns: "", role: "" }); + bottomRow.push({ + name: "Loading...", + pronouns: "", + profile_picture: "", + about: "", + }); } } } else if (isError) { @@ -114,7 +124,7 @@ export default function AboutPage() { alt="" width={108} height={1} - className="w-[106px] h-[106px] mb-3" + className="mb-3 h-[106px] w-[106px]" />

@@ -149,7 +159,7 @@ export default function AboutPage() { alt="" width={108} height={1} - className="w-[106px] h-[106px] mb-3" + className="mb-3 h-[106px] w-[106px]" />
diff --git a/server/api/settings.py b/server/api/settings.py index 12e500e..1f4df89 100644 --- a/server/api/settings.py +++ b/server/api/settings.py @@ -69,7 +69,7 @@ "http://localhost:3000", "http://127.0.0.1:3000", FRONTEND_URL -] +] ROOT_URLCONF = "api.urls" diff --git a/server/game_dev/admin.py b/server/game_dev/admin.py index 3739957..219a661 100644 --- a/server/game_dev/admin.py +++ b/server/game_dev/admin.py @@ -8,11 +8,12 @@ class MemberAdmin(admin.ModelAdmin): class EventAdmin(admin.ModelAdmin): list_display = ("name", "date", "location", "publicationDate") - + + class CommitteeAdmin(admin.ModelAdmin): pass admin.site.register(Member, MemberAdmin) admin.site.register(Event, EventAdmin) -admin.site.register(Committee, CommitteeAdmin) +admin.site.register(Committee, CommitteeAdmin) \ No newline at end of file diff --git a/server/game_dev/models.py b/server/game_dev/models.py index 4f0db33..40f33cb 100644 --- a/server/game_dev/models.py +++ b/server/game_dev/models.py @@ -23,6 +23,7 @@ class Event(models.Model): def __str__(self): return self.name + class Committee(models.Model): id = models.OneToOneField(Member, on_delete=models.CASCADE, primary_key=True) roles = { @@ -33,12 +34,12 @@ class Committee(models.Model): "MARK": "Marketing", "EV": "Events OCM", "PRO": "Projects OCM", - "FRE": "Fresher Rep" + "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 \ No newline at end of file + return self.id.name diff --git a/server/game_dev/tests.py b/server/game_dev/tests.py index e6781ca..ab8fae5 100644 --- a/server/game_dev/tests.py +++ b/server/game_dev/tests.py @@ -71,7 +71,7 @@ def test_event_date_is_datetime(self): def test_event_datetime_matches(self): event = Event.objects.get(pk=self.event.pk) self.assertEqual(event.date, self.event_datetime) - + class CommitteeModelTest(TestCase): def setUp(self): @@ -85,13 +85,13 @@ def setUp(self): except Member.DoesNotExist: self.fail("Member was not properly created before testing Committee model; check Member model") self.committee = Committee.objects.create(id = self.member) - + def test_committee_creation(self): try: Committee.objects.get(id=self.member) except Member.DoesNotExist: self.fail("Committee Member was not properly created") - + def test_role_is_unique(self): Member.objects.create( name = "Jane Doe", @@ -102,7 +102,7 @@ def test_role_is_unique(self): Committee.objects.create(id = Member.objects.get(name="Jane Doe"), role="P") self.fail("Committee Member with a duplicate role was created") except: - pass + return True def test_cascade_from_committee(self): self.committee.delete() @@ -117,7 +117,7 @@ def test_cascade_from_member(self): Committee.objects.get(id = self.member) self.fail("Deleting Member Object did not delete a possible corresponding Committee object (undesired behaviour)") except: - pass + return True class EventListAPITest(TestCase): diff --git a/server/game_dev/views.py b/server/game_dev/views.py index a6694e9..e7ca68a 100644 --- a/server/game_dev/views.py +++ b/server/game_dev/views.py @@ -51,16 +51,17 @@ class EventDetailAPIView(generics.RetrieveAPIView): def get_queryset(self): return Event.objects.filter(id=self.kwargs["id"]) - + + class CommitteeAPIView(generics.ListAPIView): serializer_class = MemberSerializer def get_queryset(self): outputList = [] - roleOrder =("P", "VP", "SEC", "TRE", "MARK", "EVE", "PRO", "FRE") + roleOrder = ("P", "VP", "SEC", "TRE", "MARK", "EVE", "PRO", "FRE") for i in roleOrder: try: outputList.append(Committee.objects.get(role=i).id) except: - outputList.append({"name":"Position not filled", "profile_picture":"", "about": "", "pronouns":""}) + outputList.append({"name": "Position not filled", "profile_picture": "", "about": "", "pronouns": ""}) return outputList From 2f6dee1f98d77c9bff379201176c848bad7a9393 Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Thu, 22 Jan 2026 17:05:26 +0800 Subject: [PATCH 14/15] Appeased ESLint and flake8 --- client/src/pages/about.tsx | 10 +++--- server/game_dev/admin.py | 2 +- .../migrations/0006_committee_role.py | 4 ++- .../migrations/0008_alter_committee_role.py | 4 ++- server/game_dev/tests.py | 31 ++++++++++--------- server/game_dev/views.py | 4 +-- 6 files changed, 31 insertions(+), 24 deletions(-) diff --git a/client/src/pages/about.tsx b/client/src/pages/about.tsx index 8c3f962..83c2d9a 100644 --- a/client/src/pages/about.tsx +++ b/client/src/pages/about.tsx @@ -1,7 +1,7 @@ -import Image from "next/image"; import { ImageIcon } from "lucide-react"; -import { useCommittee, ApiMember } from "@/hooks/useCommittee"; -import { useRouter } from "next/router"; +import Image from "next/image"; + +import { ApiMember, useCommittee } from "@/hooks/useCommittee"; export default function AboutPage() { //const router = useRouter(); @@ -83,7 +83,9 @@ export default function AboutPage() { etc. Second paragraph here, a second paragraph would be pretty cool. The more info the better yippee!!

-

Lorem ipsum dolor such and such I can't remember the rest.

+

+ Lorem ipsum dolor such and such I can't remember the rest. +

diff --git a/server/game_dev/admin.py b/server/game_dev/admin.py index 219a661..1974bc4 100644 --- a/server/game_dev/admin.py +++ b/server/game_dev/admin.py @@ -16,4 +16,4 @@ class CommitteeAdmin(admin.ModelAdmin): admin.site.register(Member, MemberAdmin) admin.site.register(Event, EventAdmin) -admin.site.register(Committee, CommitteeAdmin) \ No newline at end of file +admin.site.register(Committee, CommitteeAdmin) diff --git a/server/game_dev/migrations/0006_committee_role.py b/server/game_dev/migrations/0006_committee_role.py index 85fee39..457afa8 100644 --- a/server/game_dev/migrations/0006_committee_role.py +++ b/server/game_dev/migrations/0006_committee_role.py @@ -13,6 +13,8 @@ class Migration(migrations.Migration): migrations.AddField( model_name='committee', name='role', - field=models.CharField(choices=[('P', 'President'), ('VP', 'Vice-President'), ('SEC', 'Secretary'), ('TRE', 'Treasurer'), ('MARK', 'Marketing'), ('EV', 'Events OCM'), ('PRO', 'Projects OCM'), ('FRE', 'Fresher Rep')], default='FRE', max_length=9), + field=models.CharField(choices=[('P', 'President'), ('VP', 'Vice-President'), ('SEC', 'Secretary'), + ('TRE', 'Treasurer'), ('MARK', 'Marketing'), ('EV', 'Events OCM'), + ('PRO', 'Projects OCM'), ('FRE', 'Fresher Rep')], default='FRE', max_length=9), ), ] diff --git a/server/game_dev/migrations/0008_alter_committee_role.py b/server/game_dev/migrations/0008_alter_committee_role.py index 7552fd0..ecd84c0 100644 --- a/server/game_dev/migrations/0008_alter_committee_role.py +++ b/server/game_dev/migrations/0008_alter_committee_role.py @@ -13,6 +13,8 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='committee', name='role', - field=models.CharField(choices=[('P', 'President'), ('VP', 'Vice-President'), ('SEC', 'Secretary'), ('TRE', 'Treasurer'), ('MARK', 'Marketing'), ('EV', 'Events OCM'), ('PRO', 'Projects OCM'), ('FRE', 'Fresher Rep')], default='FRE', max_length=9, unique=True), + field=models.CharField(choices=[('P', 'President'), ('VP', 'Vice-President'), ('SEC', 'Secretary'), + ('TRE', 'Treasurer'), ('MARK', 'Marketing'), ('EV', 'Events OCM'), + ('PRO', 'Projects OCM'), ('FRE', 'Fresher Rep')], default='FRE', max_length=9, unique=True), ), ] diff --git a/server/game_dev/tests.py b/server/game_dev/tests.py index ab8fae5..f365d4c 100644 --- a/server/game_dev/tests.py +++ b/server/game_dev/tests.py @@ -4,6 +4,7 @@ from django.core.files.uploadedfile import SimpleUploadedFile from django.utils import timezone from django.urls import reverse +from django.db.utils import IntegrityError class MemberModelTest(TestCase): @@ -76,15 +77,15 @@ def test_event_datetime_matches(self): class CommitteeModelTest(TestCase): def setUp(self): self.member = Member.objects.create( - name = "Linus Torvalds", - about = "Linux creator", - pronouns = "He/Him" + name="Linus Torvalds", + about="Linux creator", + pronouns="He/Him" ) try: Member.objects.get(name="Linus Torvalds") except Member.DoesNotExist: self.fail("Member was not properly created before testing Committee model; check Member model") - self.committee = Committee.objects.create(id = self.member) + self.committee = Committee.objects.create(id=self.member, role="P") def test_committee_creation(self): try: @@ -94,29 +95,29 @@ def test_committee_creation(self): def test_role_is_unique(self): Member.objects.create( - name = "Jane Doe", - about = "Placeholder", - pronouns = "She/Her" + name="Jane Doe", + about="Placeholder", + pronouns="She/Her" ) try: - Committee.objects.create(id = Member.objects.get(name="Jane Doe"), role="P") + Committee.objects.create(id=Member.objects.get(name="Jane Doe"), role="P") self.fail("Committee Member with a duplicate role was created") - except: + except IntegrityError: return True - + def test_cascade_from_committee(self): self.committee.delete() try: - Member.objects.get(name = self.member.name) - except: + Member.objects.get(name=self.member.name) + except Member.DoesNotExist: self.fail("Deleting Committee object deleted it's corresponding Member object (undesired behaviour)") - + def test_cascade_from_member(self): self.member.delete() try: - Committee.objects.get(id = self.member) + Committee.objects.get(id=self.member) self.fail("Deleting Member Object did not delete a possible corresponding Committee object (undesired behaviour)") - except: + except Committee.DoesNotExist: return True diff --git a/server/game_dev/views.py b/server/game_dev/views.py index e7ca68a..3cef3d1 100644 --- a/server/game_dev/views.py +++ b/server/game_dev/views.py @@ -55,13 +55,13 @@ def get_queryset(self): class CommitteeAPIView(generics.ListAPIView): serializer_class = MemberSerializer - + def get_queryset(self): outputList = [] roleOrder = ("P", "VP", "SEC", "TRE", "MARK", "EVE", "PRO", "FRE") for i in roleOrder: try: outputList.append(Committee.objects.get(role=i).id) - except: + except Committee.DoesNotExist: outputList.append({"name": "Position not filled", "profile_picture": "", "about": "", "pronouns": ""}) return outputList From 7ba9d24c513935f786adde9c33b0317d619b3889 Mon Sep 17 00:00:00 2001 From: Games4Doritos Date: Thu, 22 Jan 2026 17:19:57 +0800 Subject: [PATCH 15/15] Reworked one test --- server/game_dev/tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/game_dev/tests.py b/server/game_dev/tests.py index f365d4c..96bdc43 100644 --- a/server/game_dev/tests.py +++ b/server/game_dev/tests.py @@ -113,9 +113,10 @@ def test_cascade_from_committee(self): self.fail("Deleting Committee object deleted it's corresponding Member object (undesired behaviour)") def test_cascade_from_member(self): + tempRole = Committee.objects.get(id=self.member).role self.member.delete() try: - Committee.objects.get(id=self.member) + Committee.objects.get(role=tempRole) self.fail("Deleting Member Object did not delete a possible corresponding Committee object (undesired behaviour)") except Committee.DoesNotExist: return True