From 7f91e0b507cce7ff90d4ece816fea4e81faa48b9 Mon Sep 17 00:00:00 2001 From: Karl_Sue Date: Sat, 6 Dec 2025 06:43:13 +0000 Subject: [PATCH 1/9] refactor: keep admin register simple --- server/game_dev/admin.py | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/server/game_dev/admin.py b/server/game_dev/admin.py index 2cfeab2e..0e8d557c 100644 --- a/server/game_dev/admin.py +++ b/server/game_dev/admin.py @@ -2,23 +2,8 @@ from .models import Member, Art, ArtContributor -@admin.register(Member) -class MemberAdmin(admin.ModelAdmin): - list_display = ['name', 'active', 'pronouns'] - list_filter = ['active'] - search_fields = ['name'] +admin.site.register(Member) +admin.site.register(Art) -@admin.register(Art) -class ArtAdmin(admin.ModelAdmin): - list_display = ['name', 'active'] - list_filter = ['active'] - search_fields = ['name'] - - -@admin.register(ArtContributor) -class ArtContributorAdmin(admin.ModelAdmin): - list_display = ['art', 'member', 'role'] - list_filter = ['role'] - search_fields = ['member__name', 'art__name'] - autocomplete_fields = ['art', 'member'] \ No newline at end of file +admin.site.register(ArtContributor) \ No newline at end of file From aeedeec5920eb87632fb57488d1d89d5934340dc Mon Sep 17 00:00:00 2001 From: Karl_Sue Date: Sat, 6 Dec 2025 06:44:01 +0000 Subject: [PATCH 2/9] fix: space error --- server/game_dev/models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/game_dev/models.py b/server/game_dev/models.py index ea132d6b..0735d3f3 100644 --- a/server/game_dev/models.py +++ b/server/game_dev/models.py @@ -22,14 +22,16 @@ class Art(models.Model): def __str__(self): return str(self.name) + class ArtContributor(models.Model): art = models.ForeignKey('Art', on_delete=models.CASCADE, related_name='contributors') member = models.ForeignKey('Member', on_delete=models.CASCADE, related_name='art_contributions') role = models.CharField(max_length=100) + class Meta: unique_together = ('art', 'member') verbose_name = 'Art Contributor' verbose_name_plural = 'Art Contributors' - + def __str__(self): return f"{self.member.name} - {self.art.name} ({self.role})" From f4d442ad8b1bd130142964bc5b8996cdda077958 Mon Sep 17 00:00:00 2001 From: Karl_Sue Date: Sat, 13 Dec 2025 03:48:37 +0000 Subject: [PATCH 3/9] feature: improve responsive layout --- client/src/components/ui/goBack.tsx | 34 +++++++++++++++++++++++++ client/src/components/ui/imageFrame.tsx | 30 ++++++++++++++++++++++ client/src/pages/artwork/[id].tsx | 7 ++--- client/src/pages/artwork/index.tsx | 29 ++++++++++----------- 4 files changed, 81 insertions(+), 19 deletions(-) create mode 100644 client/src/components/ui/goBack.tsx create mode 100644 client/src/components/ui/imageFrame.tsx diff --git a/client/src/components/ui/goBack.tsx b/client/src/components/ui/goBack.tsx new file mode 100644 index 00000000..4273aad5 --- /dev/null +++ b/client/src/components/ui/goBack.tsx @@ -0,0 +1,34 @@ +import Link from "next/link"; + +const ButtonGallery = () => { + return ( + + + + ); +}; + +export default ButtonGallery; diff --git a/client/src/components/ui/imageFrame.tsx b/client/src/components/ui/imageFrame.tsx new file mode 100644 index 00000000..6d66335c --- /dev/null +++ b/client/src/components/ui/imageFrame.tsx @@ -0,0 +1,30 @@ +import Image from "next/image"; +import React from "react"; + +interface CardProps { + imageSrc?: string; + imageAlt?: string; + children?: React.ReactNode; +} + +const Card = ({ imageSrc, imageAlt = "Artwork", children }: CardProps) => { + return ( +
+
+ {imageSrc ? ( + {imageAlt} + ) : ( + children || No Image + )} +
+
+ ); +}; + +export default Card; diff --git a/client/src/pages/artwork/[id].tsx b/client/src/pages/artwork/[id].tsx index 732f645b..0afcd2a0 100644 --- a/client/src/pages/artwork/[id].tsx +++ b/client/src/pages/artwork/[id].tsx @@ -1,6 +1,7 @@ import { GetServerSideProps } from "next"; import Image from "next/image"; -import Link from "next/link"; + +import ButtonGallery from "@/components/ui/goBack"; type Contributor = { id: string; @@ -37,13 +38,13 @@ export default function ArtworkPage({ artwork }: ArtworkPageProps) {
- < Gallery +
-
- {PLACEHOLDER_ICON} -
+ + {!artwork.pathToMedia && PLACEHOLDER_ICON} + ); } @@ -80,17 +81,13 @@ export default function ArtworksPage({ artworks }: ArtworksPageProps) { data-layer="Auto Layout Horizontal" className="AutoLayoutHorizontal items-start justify-start gap-6" > -
-
- More about us → -
-
+ More about us → +
From 3b5607e4d186fccf1bb89f3ca52dff7f79470932 Mon Sep 17 00:00:00 2001 From: Karl_Sue Date: Sat, 13 Dec 2025 05:03:41 +0000 Subject: [PATCH 4/9] feat: add Art hook --- client/src/hooks/useArtworkData.ts | 18 ++++++++++++++++++ client/src/pages/artwork/index.tsx | 20 ++++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 client/src/hooks/useArtworkData.ts diff --git a/client/src/hooks/useArtworkData.ts b/client/src/hooks/useArtworkData.ts new file mode 100644 index 00000000..1008d07e --- /dev/null +++ b/client/src/hooks/useArtworkData.ts @@ -0,0 +1,18 @@ +import { Art } from "@/types/art"; + +export const generateMockArtworks = (count: number): Art[] => { + const artworks: Art[] = []; + for (let i = 1; i <= count; i++) { + artworks.push({ + id: i, + name: `Artwork ${i}`, + description: "Mock artwork description", + //source_game: "Mock Game", + path_to_media: "", + active: true, + contributors: [], + //created_at: new Date().toISOString(), + }); + } + return artworks; +}; diff --git a/client/src/pages/artwork/index.tsx b/client/src/pages/artwork/index.tsx index f5f7d8c9..e34fbddf 100644 --- a/client/src/pages/artwork/index.tsx +++ b/client/src/pages/artwork/index.tsx @@ -3,6 +3,7 @@ import Link from "next/link"; import { Button } from "@/components/ui/button"; import Card from "@/components/ui/imageFrame"; +import { generateMockArtworks } from "@/hooks/useArtworkData"; import api from "@/lib/api"; import { Art } from "@/types/art"; import { PageResult } from "@/types/page-response"; @@ -112,13 +113,24 @@ export const getServerSideProps: GetServerSideProps< const res = await api.get>("game-dev/arts"); return { props: { artworks: res.data } }; } catch { + // return { + // props: { + // artworks: { + // count: 0, + // next: null as unknown as string, + // previous: null as unknown as string, + // results: [] as Art[], + // }, + // }, + // }; ==> use when successfully populate db + const mockArtworks = generateMockArtworks(12); return { props: { artworks: { - count: 0, - next: null as unknown as string, - previous: null as unknown as string, - results: [] as Art[], + count: mockArtworks.length, + next: "", + previous: "", + results: mockArtworks, }, }, }; From 2e9ef677e925232df5d78aa1b114074db132e620 Mon Sep 17 00:00:00 2001 From: Karl_Sue Date: Sat, 13 Dec 2025 05:18:23 +0000 Subject: [PATCH 5/9] feat: add Artwork hook --- client/src/hooks/useArtworkData.ts | 31 ++++++++++++++++++++++++++++++ client/src/pages/artwork/[id].tsx | 13 ++++++++++--- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/client/src/hooks/useArtworkData.ts b/client/src/hooks/useArtworkData.ts index 1008d07e..eca1ceee 100644 --- a/client/src/hooks/useArtworkData.ts +++ b/client/src/hooks/useArtworkData.ts @@ -16,3 +16,34 @@ export const generateMockArtworks = (count: number): Art[] => { } return artworks; }; + +export const generateMockArtwork = (id: string): Art => { + return { + id: Number(id), + name: "Mock Artwork Title", + description: + "Lorem ipsum dolor sit amet. Non numquam dicta nam autem dicta 33 error molestias et repellat consequatur eum iste expedita est dolorem libero et quas provident!", + //source_game: "Mock Game", + path_to_media: "/placeholder1293x405.svg", + active: true, + //created_at: new Date().toISOString(), + contributors: [ + { + id: 1, + art_id: Number(id), + member_name: "Contributor 1", + role: "user1", + discord_url: "https://discord.com", + instagram_url: "", + }, + { + id: 2, + art_id: Number(id), + member_name: "Contributor 2", + role: "user2", + discord_url: "", + instagram_url: "https://instagram.com", + }, + ], + }; +}; diff --git a/client/src/pages/artwork/[id].tsx b/client/src/pages/artwork/[id].tsx index d37ad25e..15d1681a 100644 --- a/client/src/pages/artwork/[id].tsx +++ b/client/src/pages/artwork/[id].tsx @@ -3,6 +3,7 @@ import Image from "next/image"; import { JSX } from "react"; import ButtonGallery from "@/components/ui/goBack"; +import { generateMockArtwork } from "@/hooks/useArtworkData"; import api from "@/lib/api"; import { Art } from "@/types/art"; @@ -201,7 +202,13 @@ export const getServerSideProps: GetServerSideProps = async ( context, ) => { const { id } = context.params as { id: string }; - const artResponse = await api.get(`game-dev/arts/${id}`); - const artwork = artResponse.data; - return { props: { artwork } }; + try { + const artResponse = await api.get(`game-dev/arts/${id}`); + const artwork = artResponse.data; + return { props: { artwork } }; + } catch { + // Return mock data when API fails or DB is empty + const mockArtwork = generateMockArtwork(id); + return { props: { artwork: mockArtwork } }; + } }; From 3d3811954caf12ae5b08247ec8dcc6e1c764cad3 Mon Sep 17 00:00:00 2001 From: Karl_Sue Date: Sat, 13 Dec 2025 05:31:21 +0000 Subject: [PATCH 6/9] feat: add placeholder art --- client/src/hooks/useArtworkData.ts | 2 +- client/src/pages/artwork/[id].tsx | 37 ++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/client/src/hooks/useArtworkData.ts b/client/src/hooks/useArtworkData.ts index eca1ceee..44d0136c 100644 --- a/client/src/hooks/useArtworkData.ts +++ b/client/src/hooks/useArtworkData.ts @@ -24,7 +24,7 @@ export const generateMockArtwork = (id: string): Art => { description: "Lorem ipsum dolor sit amet. Non numquam dicta nam autem dicta 33 error molestias et repellat consequatur eum iste expedita est dolorem libero et quas provident!", //source_game: "Mock Game", - path_to_media: "/placeholder1293x405.svg", + path_to_media: "", active: true, //created_at: new Date().toISOString(), contributors: [ diff --git a/client/src/pages/artwork/[id].tsx b/client/src/pages/artwork/[id].tsx index 15d1681a..ac8ecc3a 100644 --- a/client/src/pages/artwork/[id].tsx +++ b/client/src/pages/artwork/[id].tsx @@ -117,13 +117,36 @@ export default function ArtworkPage({ artwork }: ArtworkPageProps) { className="Frame1099 bg-neutral-1 justify-start md:flex" >
- Artwork image + {artwork.path_to_media ? ( + Artwork image + ) : ( + // in case fail to load image or no image in db yet +
+
+ + + +
+
+ )}
Date: Sat, 13 Dec 2025 14:42:47 +0800 Subject: [PATCH 7/9] Fix flake8 --- server/api/settings.py | 2 +- server/api/urls.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/api/settings.py b/server/api/settings.py index 4664e69a..46902758 100644 --- a/server/api/settings.py +++ b/server/api/settings.py @@ -158,4 +158,4 @@ REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 100, -} \ No newline at end of file +} diff --git a/server/api/urls.py b/server/api/urls.py index c6a16187..073e0e7d 100644 --- a/server/api/urls.py +++ b/server/api/urls.py @@ -21,5 +21,5 @@ urlpatterns = [ path("admin/", admin.site.urls), path("api/healthcheck/", include("api.healthcheck.urls")), - path("api/game-dev/", include("game_dev.urls")), -] \ No newline at end of file + path("api/game-dev/", include("game_dev.urls")), +] From 45afd6d96391e76b11db3c46e1368afc04eee624 Mon Sep 17 00:00:00 2001 From: Karl_Sue Date: Sat, 13 Dec 2025 06:52:52 +0000 Subject: [PATCH 8/9] fix: match Prettier code style --- client/src/styles/globals.css | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/src/styles/globals.css b/client/src/styles/globals.css index 53eb51bc..43a74218 100644 --- a/client/src/styles/globals.css +++ b/client/src/styles/globals.css @@ -34,11 +34,11 @@ --radius: 0.5rem; - --dark-2: #090A19; - --neutral-1: #1B1F4C; - --light-1: #FFFFFF; - --light-2: #CED1FE; - --light-3: #9CA4FD; + --dark-2: #090a19; + --neutral-1: #1b1f4c; + --light-1: #ffffff; + --light-2: #ced1fe; + --light-3: #9ca4fd; } } @@ -68,4 +68,4 @@ } .border-light-2 { border-color: var(--light-2); -} \ No newline at end of file +} From b7273d5751968658f4d1df9179e0cb66a630ba28 Mon Sep 17 00:00:00 2001 From: Han Minh Tran Date: Sat, 13 Dec 2025 14:54:42 +0800 Subject: [PATCH 9/9] Fix flake8 --- server/game_dev/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/game_dev/admin.py b/server/game_dev/admin.py index 0e8d557c..b148cace 100644 --- a/server/game_dev/admin.py +++ b/server/game_dev/admin.py @@ -6,4 +6,4 @@ admin.site.register(Art) -admin.site.register(ArtContributor) \ No newline at end of file +admin.site.register(ArtContributor)