diff --git a/web/src/pages/AuthRegister.tsx b/web/src/pages/AuthRegister.tsx
index 9d2a5a8..129d264 100644
--- a/web/src/pages/AuthRegister.tsx
+++ b/web/src/pages/AuthRegister.tsx
@@ -1,14 +1,5 @@
-/**
- * @file AuthRegister.tsx
- * @description Página de Registo para a versão Web. Permite a criação de
- * novas contas segmentadas por perfil ('cliente' ou 'barbearia'). Interage
- * diretamente com o serviço de autenticação do Supabase.
- */
import { FormEvent, useEffect, useState } from 'react'
import { Link, useNavigate } from 'react-router-dom'
-import { Input } from '../components/ui/input'
-import { Button } from '../components/ui/button'
-import { Card } from '../components/ui/card'
import { UserPlus, User, Scissors } from 'lucide-react'
import { supabase } from '../lib/supabase'
@@ -16,58 +7,32 @@ export default function AuthRegister() {
const [name, setName] = useState('')
const [email, setEmail] = useState('')
const [password, setPassword] = useState('')
-
- // Estado local para definir as permissões associadas à conta nova
const [role, setRole] = useState<'cliente' | 'barbearia'>('cliente')
-
- // Condicional, só inserido no metadados se o tipo de utilizador for 'barbearia'
const [shopName, setShopName] = useState('')
const [error, setError] = useState('')
const [loading, setLoading] = useState(false)
-
const navigate = useNavigate()
- /**
- * Previne acesso à página de registo por utilizadores com Sessão ativa.
- * Utiliza um padrão `mounted` para não alterar state se o componente for desmontado.
- */
- // 🔐 Se já estiver logado, não pode ver o registo
useEffect(() => {
let mounted = true
; (async () => {
- // Efetua um fetch à sessão existente injetada pelo SDK da Supabase
const { data } = await supabase.auth.getSession()
if (!mounted) return
- if (data.session) {
- navigate('/explorar', { replace: true })
- }
+ if (data.session) navigate('/explorar', { replace: true })
})()
- return () => {
- mounted = false
- }
+ return () => { mounted = false }
}, [navigate])
- /**
- * Processa a criação e envio do novo perfil e das informações para a BD via Supabase Auth.
- * @param {FormEvent} e - Evento de submissão do formulário.
- */
async function onSubmit(e: FormEvent) {
e.preventDefault()
setError('')
-
- // Regras básicas de negócio à submissão (proteção pre-API)
if (!name.trim()) return setError('Preencha o nome completo')
if (!email.trim()) return setError('Preencha o email')
if (!password.trim()) return setError('Preencha a senha')
- if (role === 'barbearia' && !shopName.trim()) {
- return setError('Informe o nome da barbearia')
- }
+ if (role === 'barbearia' && !shopName.trim()) return setError('Informe o nome da barbearia')
try {
setLoading(true)
-
- // Registo propriamente dito perante serviço do Supabase
- // Encaminha, adicionalmente, opções nos metadados (Data) da auth do serviço para mapeamento da "profile" table na BD
const { data, error } = await supabase.auth.signUp({
email,
password,
@@ -75,31 +40,17 @@ export default function AuthRegister() {
data: {
name: name.trim(),
role,
- // Apenas vincula shopName no json object se a rule aplicável confirmar que a role o exige
- // Envia ambas as formatações (camelCase para web, snake_case para o trigger SQL)
shopName: role === 'barbearia' ? shopName.trim() : null,
shop_name: role === 'barbearia' ? shopName.trim() : null,
},
},
})
-
if (error) throw error
-
- // 🔔 Se confirmação de email estiver ON (verificação pendente via SMTP em Supabase Configs)
if (!data.session) {
- navigate('/login', {
- replace: true,
- state: {
- msg: 'Conta criada! Confirma o email antes de fazer login.',
- },
- })
+ navigate('/login', { replace: true, state: { msg: 'Conta criada! Confirme o email antes de fazer login.' } })
return
}
-
- // ✅ Login automático: Rotas divergentes de acordo com a função Role
- navigate(role === 'barbearia' ? '/painel' : '/explorar', {
- replace: true,
- })
+ navigate(role === 'barbearia' ? '/painel' : '/explorar', { replace: true })
} catch (err: any) {
setError(err?.message || 'Erro ao criar conta')
} finally {
@@ -107,115 +58,91 @@ export default function AuthRegister() {
}
}
+ const field = (label: string, node: React.ReactNode) => (
+