diff --git a/src/app/[locale]/register/page.tsx b/src/app/[locale]/register/page.tsx
index cfe50a9..15389e5 100644
--- a/src/app/[locale]/register/page.tsx
+++ b/src/app/[locale]/register/page.tsx
@@ -1,3 +1,4 @@
+
'use client';
import { useState } from 'react';
@@ -10,6 +11,7 @@ import { Label } from '@/components/ui/label';
import { UserPlus } from 'lucide-react';
import { useToast } from "@/hooks/use-toast";
import { useI18n, useCurrentLocale } from '@/locales/client';
+import { registerUser } from '@/app/actions/user';
export default function RegisterPage() {
const router = useRouter();
@@ -29,22 +31,33 @@ export default function RegisterPage() {
if (password !== confirmPassword) {
toast({
- title: "Registration Error", // Translate
- description: "Passwords do not match.", // Translate
+ title: t('register.error_title'),
+ description: t('register.password_mismatch'),
variant: "destructive",
});
setIsLoading(false);
return;
}
- await new Promise(resolve => setTimeout(resolve, 1000));
-
- localStorage.setItem('isToyShareAuthenticated', 'true');
- toast({
- title: "Registration Successful", // Translate
- description: "Your account has been created. Welcome!", // Translate
+ const result = await registerUser({ name, email });
+
+ if (result.success && result.user) {
+ // Mock login after successful registration
+ localStorage.setItem('isToyShareAuthenticated', 'true');
+ localStorage.setItem('userEmail', result.user.email);
+ toast({
+ title: t('register.success_title'),
+ description: t('register.success_description'),
});
- router.push(`/${locale}/dashboard`);
+ router.push(`/${locale}/dashboard`);
+ } else {
+ toast({
+ title: t('register.error_title'),
+ description: result.message,
+ variant: "destructive",
+ });
+ }
+
setIsLoading(false);
};
@@ -53,7 +66,7 @@ export default function RegisterPage() {
return (
<>
{parts[0]}
- {parts[1]}
+ {parts[1]}
{parts[2]}
>
);
diff --git a/src/app/actions/user.ts b/src/app/actions/user.ts
new file mode 100644
index 0000000..6e1ec67
--- /dev/null
+++ b/src/app/actions/user.ts
@@ -0,0 +1,49 @@
+
+'use server';
+
+import db from '@/lib/db';
+import type { User } from '@/types';
+import { randomUUID } from 'crypto';
+
+interface RegisterUserResult {
+ success: boolean;
+ message: string;
+ user?: User;
+}
+
+export async function registerUser(data: { name: string; email: string; password?: string }): Promise {
+ const { name, email } = data;
+
+ // Basic validation
+ if (!name || !email) {
+ return { success: false, message: 'Name and email are required.' };
+ }
+
+ try {
+ // Check if user already exists
+ const existingUser = db.prepare('SELECT * FROM users WHERE email = ?').get(email);
+ if (existingUser) {
+ return { success: false, message: 'An account with this email already exists.' };
+ }
+
+ const newUser: User = {
+ id: `user-${randomUUID()}`,
+ name,
+ email,
+ role: 'User',
+ avatarUrl: '',
+ bio: ''
+ };
+
+ const stmt = db.prepare(
+ 'INSERT INTO users (id, name, email, role, avatarUrl, bio) VALUES (@id, @name, @email, @role, @avatarUrl, @bio)'
+ );
+
+ stmt.run(newUser);
+
+ return { success: true, message: 'User registered successfully.', user: newUser };
+ } catch (error) {
+ console.error('Registration error:', error);
+ return { success: false, message: 'An unexpected error occurred during registration.' };
+ }
+}
diff --git a/src/locales/en.ts b/src/locales/en.ts
index f20bcc6..b34d227 100644
--- a/src/locales/en.ts
+++ b/src/locales/en.ts
@@ -36,6 +36,10 @@ export default {
'register.submit_button': 'Create Account',
'register.loading_button': 'Registering...',
'register.has_account': 'Already have an account? Log in',
+ 'register.error_title': 'Registration Error',
+ 'register.password_mismatch': 'Passwords do not match.',
+ 'register.success_title': 'Registration Successful',
+ 'register.success_description': 'Your account has been created. Welcome!',
'toy_details.back_to_toys': 'Back to All Toys',
'toy_details.toy_not_found_title': 'Toy Not Found',
'toy_details.toy_not_found_description': 'Sorry, the toy you are looking for does not exist or has been removed.',
@@ -272,5 +276,3 @@ export default {
'message_detail.message_from_you': 'You',
'message_detail.message_from_name': 'From {name}',
} as const;
-
-
\ No newline at end of file
diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts
index e95784a..98e2103 100644
--- a/src/locales/zh-TW.ts
+++ b/src/locales/zh-TW.ts
@@ -36,6 +36,10 @@ export default {
'register.submit_button': '建立帳戶',
'register.loading_button': '註冊中...',
'register.has_account': '已經有帳戶了? 登入',
+ 'register.error_title': '註冊錯誤',
+ 'register.password_mismatch': '密碼不相符。',
+ 'register.success_title': '註冊成功',
+ 'register.success_description': '您的帳戶已成功建立,歡迎!',
'toy_details.back_to_toys': '返回所有玩具',
'toy_details.toy_not_found_title': '找不到玩具',
'toy_details.toy_not_found_description': '抱歉,您尋找的玩具不存在或已被移除。',
@@ -272,5 +276,3 @@ export default {
'message_detail.message_from_you': '您',
'message_detail.message_from_name': '來自 {name}',
} as const;
-
-
\ No newline at end of file