diff --git a/src/app/auth/register/page.tsx b/src/app/auth/register/page.tsx new file mode 100644 index 0000000..70adca3 --- /dev/null +++ b/src/app/auth/register/page.tsx @@ -0,0 +1,267 @@ +"use client"; + +import { useState } from "react"; +import { useRouter } from "next/navigation"; +import Link from "next/link"; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered'; +import FooterBase from '@/components/sections/footer/FooterBase'; +import { Mail, Lock, User, Eye, EyeOff, Check } from 'lucide-react'; + +export default function RegisterPage() { + const router = useRouter(); + const [formData, setFormData] = useState({ + name: "", email: "", password: "", confirmPassword: ""}); + const [showPassword, setShowPassword] = useState(false); + const [showConfirm, setShowConfirm] = useState(false); + const [error, setError] = useState(""); + const [loading, setLoading] = useState(false); + const [agreedToTerms, setAgreedToTerms] = useState(false); + + const handleChange = (e: React.ChangeEvent) => { + const { name, value } = e.target; + setFormData((prev) => ({ ...prev, [name]: value })); + }; + + const handleRegister = async (e: React.FormEvent) => { + e.preventDefault(); + setError(""); + + if (!agreedToTerms) { + setError("Você deve concordar com os Termos e Condições"); + return; + } + + if (formData.password !== formData.confirmPassword) { + setError("As senhas não conferem"); + return; + } + + if (formData.password.length < 8) { + setError("A senha deve ter pelo menos 8 caracteres"); + return; + } + + setLoading(true); + + try { + const response = await fetch("/api/auth/register", { + method: "POST", headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + name: formData.name, + email: formData.email, + password: formData.password, + }), + }); + + if (!response.ok) { + const data = await response.json(); + setError(data.message || "Falha ao registrar"); + return; + } + + const data = await response.json(); + localStorage.setItem("authToken", data.token); + localStorage.setItem("user", JSON.stringify(data.user)); + router.push("/dashboard"); + } catch (err) { + setError("Erro ao conectar ao servidor"); + console.error(err); + } finally { + setLoading(false); + } + }; + + return ( + + + +
+
+
+

Registre-se

+

Comece sua transformação com FitFlow Pro

+ + {error && ( +
+ {error} +
+ )} + +
+
+ +
+ + +
+
+ +
+ +
+ + +
+
+ +
+ +
+ + + +
+
+ +
+ +
+ + + +
+
+ +
+ setAgreedToTerms(e.target.checked)} + className="mt-1 w-5 h-5 rounded cursor-pointer" + /> + +
+ + +
+ +

+ Já tem uma conta?{" "} + + Faça login aqui + +

+
+
+
+ + +
+ ); +} \ No newline at end of file