From afaaff4a7f30ce5a60cd57bd3756259b46deb41a Mon Sep 17 00:00:00 2001 From: Maulana Sodiqin Date: Thu, 11 Dec 2025 00:02:31 +0700 Subject: [PATCH] feat(service): add public certificate data hook MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add new useCertificatePublicData hook to fetch certificate data from public endpoint without authentication. This hook combines user, team, submission, and winner data in a single request. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- libs/service/src/hooks/users/index.ts | 49 +++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/libs/service/src/hooks/users/index.ts b/libs/service/src/hooks/users/index.ts index fe501e9..49c18f1 100644 --- a/libs/service/src/hooks/users/index.ts +++ b/libs/service/src/hooks/users/index.ts @@ -15,6 +15,41 @@ interface User { updated_at?: string; } +// Certificate public data types +interface CertificateUserData { + id: string; + fullname: string; + email: string; + avatar?: string; +} + +interface CertificateTeamData { + id: string; + name: string; + logo?: string; + is_leader: boolean; +} + +interface CertificateSubmissionData { + id: string; + title: string; + description: string; + repository_url?: string; + demo_url?: string; +} + +interface CertificateWinnerData { + rank: number; + prize?: string; +} + +export interface CertificatePublicData { + user: CertificateUserData; + team?: CertificateTeamData; + submission?: CertificateSubmissionData; + winner?: CertificateWinnerData; +} + // Update user request type interface UpdateUserRequest { fullname?: string; @@ -118,3 +153,17 @@ export const useUserDetailsById = (userId: string) => { enabled: !!userId, }); }; + +// Public certificate data hook (no authentication required) +export const useCertificatePublicData = (userId: string, enabled = true) => { + return useQuery({ + queryKey: ['certificate-public-data', userId], + queryFn: async () => { + const response = await hackathonApi.get>( + `/certificates/${userId}` + ); + return { data: response.data.data }; + }, + enabled: enabled && !!userId, + }); +};