Commit Graph

223 Commits

Author SHA1 Message Date
d9d12727e1 docs: add comprehensive OAuth configuration guide and update Dockerfile
- Add detailed OAuth setup instructions for Google and Facebook in README
- Include step-by-step guides with console URLs and configuration details
- Document required environment variables for OAuth
- Add deployment instructions with Docker build args
- Update Dockerfile to accept OAuth credentials as build arguments
- Support NEXT_PUBLIC_GOOGLE_CLIENT_ID and NEXT_PUBLIC_FACEBOOK_APP_ID

This enables OAuth authentication while keeping it optional for deployments.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 03:04:40 +01:00
f82985f84e fix: make Google and Facebook OAuth optional to prevent errors
- Make GoogleOAuthProvider conditional in layout.tsx (only render if clientId exists)
- Add hasGoogleAuth and hasFacebookAuth flags in login page
- Conditionally render OAuth buttons and section only when configured
- Add fallback message when OAuth is not configured
- Prevents "Missing required parameter client_id" error when NEXT_PUBLIC_GOOGLE_CLIENT_ID is not set

This allows the app to run without OAuth credentials configured, making deployment easier when OAuth is not yet set up.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 02:52:33 +01:00
7347d77ec6 fix: add padding to login card and create forgot-password page
- Add padding (p-8) and responsive px-4 to login page Card for better layout
- Create forgot-password page to fix 404 error when clicking "Mot de passe oublié?"
- Implement basic password reset form with email validation
- Add success state showing confirmation message after email submission

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 02:39:44 +01:00
6f236ed1ce fix: correct Google login handler function name
Rename handleGoogleLoginSuccess to handleGoogleLogin and update the onClick handler to use the correct function name. This fixes the client-side exception on the login page.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 02:30:01 +01:00
c0839dd081 fix: correct indentation in homepage prizes section
Fix missing indentation that was causing a 500 error on the homepage. The grid div wrapper was incorrectly indented.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 02:22:26 +01:00
f73a84501e feat: replace placeholder homepage with proper Thé Tip Top landing page
Replace Next.js default template page with a complete landing page featuring:
- Hero section with main CTA buttons
- "How to Play" section explaining the 3-step participation process
- Updated prizes showcase section
- Enhanced final CTA section with dual action buttons

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 02:20:24 +01:00
1e6a4a0f6e fix: prevent localStorage access during SSR in debug page
Add useEffect hook to check for auth token in localStorage only on client-side, preventing "localStorage is not defined" error during static page generation. Use state variable hasToken to display token presence in the UI.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 02:07:10 +01:00
636780870d fix: change headers type from HeadersInit to Record<string, string>
Replace HeadersInit type with Record<string, string> for headers object to allow index access with bracket notation. This resolves the TypeScript error "Property 'Authorization' does not exist on type 'HeadersInit'".

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 02:01:53 +01:00
b6a514b547 fix: export AuthContext to allow import in useAuth hook
Export AuthContext from AuthContext.tsx to make it available for import in hooks/useAuth.ts. This resolves the TypeScript error "Module declares 'AuthContext' locally, but it is not exported."

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:57:28 +01:00
8881014e36 fix: handle possibly undefined initialStock in PrizeManagement
Add null coalescing operators to handle cases where prize.initialStock is undefined when calculating stock remaining and className condition. Default to 0 if initialStock is undefined.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:47:38 +01:00
40cdd2777c fix: replace 'as const' with explicit type annotation for NAV_ITEMS
Remove 'as const' assertion from NAV_ITEMS and add explicit type annotation with Array<'CLIENT' | 'EMPLOYEE' | 'ADMIN'> for roles property. This allows TypeScript to properly type-check the includes() method in Navbar component without requiring type assertions.

Also revert the 'as any' workaround in Navbar.tsx since the proper typing is now in place.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:43:34 +01:00
a363e0ab7f fix: add type assertion for role includes check in Navbar
Add 'as any' type assertion to user.role in NAV_ITEMS filter to resolve TypeScript compilation error. The 'as const' assertion on NAV_ITEMS makes the roles arrays readonly with literal types, which TypeScript cannot match with the User role type without the assertion.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:39:19 +01:00
5708e8f514 fix: remove lowercase role values from NAV_ITEMS constant
Remove all lowercase role values ('client', 'employee', 'admin') from NAV_ITEMS array in utils/constants.ts to match the User type definition which only uses uppercase roles ('CLIENT', 'EMPLOYEE', 'ADMIN'). This fixes TypeScript compilation error in Navbar.tsx where item.roles.includes(user.role) was failing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:34:21 +01:00
63fbfc4f69 fix: use uppercase role values in Header component switch statement
Change role case values from lowercase to uppercase to match User type:
- 'admin' → 'ADMIN'
- 'employee' → 'EMPLOYEE'

The User type only defines uppercase role values.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:28:08 +01:00
a7c7b705df fix: change button variant from 'default' to 'primary' in test-tickets page
The Button component only accepts: 'primary' | 'secondary' | 'outline' |
'danger' | 'success'. Changed 'default' to 'primary' as the closest equivalent.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:21:50 +01:00
e121c705cf fix: use uppercase role values in profile page quick actions
Change role comparisons from lowercase to uppercase to match User type:
- "client" → "CLIENT"
- "employee" → "EMPLOYEE"
- "admin" → "ADMIN"

The User type only defines uppercase role values.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:13:23 +01:00
dd951d65e1 fix: handle undefined updatedAt in profile page
Add null check for user.updatedAt before passing to formatDate function.
The User type defines updatedAt as optional (string | undefined), so we
need to handle the undefined case to prevent TypeScript compilation errors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:09:13 +01:00
d3caf36203 fix: use correct User property isVerified instead of isEmailVerified
Change user.isEmailVerified to user.isVerified to match the User type
definition. The User type has isVerified property, not isEmailVerified.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:05:57 +01:00
3d7dd7212b fix: add type assertion for PRIZE_CONFIG access in historique page
Add type assertion to handle prize types that may not exist in PRIZE_CONFIG.
This is the same fix applied to app/client/page.tsx to prevent TypeScript
compilation errors when accessing PRIZE_CONFIG with dynamic prize types
(PHYSICAL, DISCOUNT, GRAND_PRIZE).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 01:02:34 +01:00
00f5d432dc fix: remove all snake_case property accesses in modal section
Remove invalid snake_case property accesses in the ticket details modal:
- selectedTicket.user_name → selectedTicket.user (with firstName/lastName)
- selectedTicket.user_email → selectedTicket.user?.email
- selectedTicket.user_phone → selectedTicket.user?.phone
- selectedTicket.prize_name → selectedTicket.prize?.name
- selectedTicket.prize_value → selectedTicket.prize?.value
- selectedTicket.played_at → selectedTicket.playedAt

All properties now match the Ticket type definition.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 00:58:56 +01:00
ecdfb826be fix: use correct Ticket type properties in verification page
Fix property access to match the Ticket type definition:
- ticket.user_name → ticket.user?.firstName + lastName
- ticket.user_email → ticket.user?.email
- ticket.prize_name → ticket.prize?.name
- ticket.played_at → ticket.playedAt

The Ticket type uses camelCase and nested objects (user, prize),
not snake_case flat properties.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 00:52:12 +01:00
7f04ae5eca fix: add type annotation to badges object in verification page
Add Record<string, React.ReactElement> type to badges object to allow
dynamic string indexing in app/employe/verification/page.tsx.

This matches the fix already applied to page-new.tsx and resolves the
TypeScript compilation error.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 00:47:45 +01:00
a40eb7b5d1 fix: add type annotation to badges object in getStatusBadge
Add Record<string, React.ReactElement> type to badges object to allow
dynamic string indexing. This fixes TypeScript error where status string
parameter cannot be used to index the badges object.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 00:42:31 +01:00
279556cb72 fix: use correct action values for validateTicket function
Change validateTicket action parameters from lowercase "validate"/"reject"
to uppercase "APPROVE"/"REJECT" to match the function signature.

The employeeService.validateTicket function expects action type of
'APPROVE' | 'REJECT', not 'validate' | 'reject'.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 00:38:53 +01:00
84d42132ad fix: remove invalid lowercase employee role comparisons
Remove invalid comparisons against lowercase 'employee' role that don't exist
in the User type. The role type only includes uppercase 'EMPLOYEE'.

Fixed in:
- app/employe/dashboard/page.tsx (lines 42, 117)
- app/employe/layout.tsx (lines 28, 48)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 00:34:50 +01:00
f168f24072 fix: add type assertion for PRIZE_CONFIG access in client page
Add type assertion to handle prize types that may not exist in PRIZE_CONFIG
(PHYSICAL, DISCOUNT, GRAND_PRIZE). This prevents TypeScript compilation errors
when accessing the PRIZE_CONFIG object with dynamic prize types.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 00:29:52 +01:00
e422f13bed fix: remove invalid role comparisons in admin page
Remove lowercase 'admin' role checks that don't exist in the User type.
The role type is 'CLIENT' | 'EMPLOYEE' | 'ADMIN', so comparing against
lowercase 'admin' causes TypeScript compilation errors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 00:25:05 +01:00
ce575653f7 fix: add type annotation to PieChart label in marketing-data page 2025-11-18 00:19:33 +01:00
389bfb1794 fix: remove second invalid role comparison in admin layout 2025-11-18 00:15:28 +01:00
278643c117 fix: remove invalid role comparison in admin layout 2025-11-18 00:11:59 +01:00
eee2e27ca5 fix: correct TypeScript error in page.tsx PieChart label 2025-11-18 00:08:02 +01:00
e867cbd402 fix: correct TypeScript error in PieChart label prop 2025-11-18 00:01:59 +01:00
870e8630a1 fix: correct syntax error in page.tsx and add privacy/terms pages for OAuth compliance 2025-11-17 23:56:34 +01:00
3ff0f8ccac Merge branches 'dev' and 'dev' of https://gitea.wk-archi-o24a-15m-g3.fr/wkadmin/the-tip-top-frontend into dev 2025-11-17 23:43:46 +01:00
2f7abde4ea dev 2025-11-17 23:38:02 +01:00
b547b01ffd test 1: change homepage title to verify project setup 2025-11-10 20:56:41 +01:00
d696dade89 test 1: change homepage title to verify project setup 2025-11-10 17:45:39 +01:00
ed75871a28 Fix Jenkinsfile syntax (clean comments) 2025-11-04 18:57:07 +01:00
63a97ba4e2 Fix Jenkinsfile syntax (clean comments) 2025-11-04 18:52:44 +01:00
a2e8df4850 Fix Jenkinsfile syntax (clean comments) 2025-11-04 18:50:01 +01:00
567de6d11e Fix Jenkinsfile syntax (clean comments) 2025-11-04 18:43:48 +01:00
50c0c85d13 Fix Jenkinsfile syntax (clean comments) 2025-11-04 18:41:00 +01:00
470619bf1d Fix Jenkinsfile syntax (clean comments) 2025-11-04 18:36:16 +01:00
f104643847 Fix Jenkinsfile: force recreate + health check 2025-10-31 01:08:16 +01:00
23e7fea8c2 Fix Jenkinsfile: force recreate + health check 2025-10-31 01:08:06 +01:00
4480d7416e Fix Jenkinsfile: force recreate + health check 2025-10-31 01:03:10 +01:00
28416fe27b Fix Jenkinsfile: force recreate + health check 2025-10-31 00:57:21 +01:00
58483dfbc5 Fix Jenkinsfile: force recreate + health check 2025-10-31 00:56:42 +01:00
9b11eb0419 Fix Jenkinsfile: force recreate + health check 2025-10-31 00:55:44 +01:00
cb3f1f62f2 Fix Jenkinsfile: force recreate + health check 2025-10-30 21:25:41 +01:00