import { v } from 'convex/values'; import { mutation } from './_generated/server'; import { authComponent, updatePassword } from './auth'; /** * Alterar senha do usuário autenticado * Token é opcional - autenticação é feita via contexto do Convex */ export const alterarSenha = mutation({ args: { senhaAtual: v.string(), novaSenha: v.string(), token: v.optional(v.string()) // Token opcional - não é usado, mas mantido para compatibilidade }, returns: v.union( v.object({ sucesso: v.literal(true) }), v.object({ sucesso: v.literal(false), erro: v.string() }) ), handler: async (ctx, args) => { try { // Verificar se o usuário está autenticado const authUser = await authComponent.safeGetAuthUser(ctx); if (!authUser) { return { sucesso: false as const, erro: 'Usuário não autenticado' }; } // Validar que a nova senha não está vazia if (!args.novaSenha || args.novaSenha.trim().length === 0) { return { sucesso: false as const, erro: 'A nova senha não pode estar vazia' }; } // Chamar a função de atualização de senha await updatePassword(ctx, { currentPassword: args.senhaAtual, newPassword: args.novaSenha }); return { sucesso: true as const }; } catch (error: unknown) { // Capturar erros específicos do Better Auth let mensagemErro = 'Erro ao alterar senha'; if (error instanceof Error && 'message' in error) { mensagemErro = error.message; } // Mensagens de erro mais amigáveis if ( mensagemErro.toLowerCase().includes('password') || mensagemErro.toLowerCase().includes('senha') || mensagemErro.toLowerCase().includes('incorrect') || mensagemErro.toLowerCase().includes('incorreta') ) { mensagemErro = 'Senha atual incorreta'; } return { sucesso: false as const, erro: mensagemErro }; } } });