From 89cc2cbaf691874c55fa8df7c2c46c590aada580 Mon Sep 17 00:00:00 2001 From: fede Date: Wed, 3 Dec 2025 17:11:12 -0300 Subject: [PATCH 1/6] checkeo si el username esta tomado --- src/lib/components/signup-form.svelte | 36 +++++++++++++++++++++++++-- src/lib/hooks/checkUsername.ts | 16 ++++++++++++ src/types.d.ts | 6 ++--- 3 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 src/lib/hooks/checkUsername.ts diff --git a/src/lib/components/signup-form.svelte b/src/lib/components/signup-form.svelte index f9e529c..2b102af 100644 --- a/src/lib/components/signup-form.svelte +++ b/src/lib/components/signup-form.svelte @@ -6,11 +6,25 @@ import type { RegisterDto } from '../../types'; import { register } from '@/hooks/register'; import Loader2Icon from '@lucide/svelte/icons/loader-2'; + import Check from '@lucide/svelte/icons/check'; + import Cross from '@lucide/svelte/icons/x'; + + import Spinner from './ui/spinner/spinner.svelte'; + import { checkUsername } from '@/hooks/checkUsername'; let { showAlert = $bindable() } = $props(); let cargando = $state(false); + let checkeandoUsuario: boolean | null = $state(null); + let esUsuarioValido = $state(false); + + async function checkUsuario() { + checkeandoUsuario = true; + esUsuarioValido = await checkUsername(dto.username); + checkeandoUsuario = false; + } + const setAlert = () => (showAlert = true); let dto: RegisterDto = $state({ password: '', username: '', email: '', displayName: '' }); @@ -31,8 +45,26 @@
- Nombre de Usuario - +
+ Nombre de Usuario + {#if checkeandoUsuario == null} + + {:else if checkeandoUsuario == true} + + {:else if esUsuarioValido} + + {:else} + + {/if} +
+
diff --git a/src/lib/hooks/checkUsername.ts b/src/lib/hooks/checkUsername.ts new file mode 100644 index 0000000..2d82818 --- /dev/null +++ b/src/lib/hooks/checkUsername.ts @@ -0,0 +1,16 @@ +import { apiBase } from "@/stores/url"; +import { get } from "svelte/store"; + +export async function checkUsername(username: string) { + try { + const req = await fetch(`${get(apiBase)}/api/users/check-username/${username}`, { + method: "GET" + }); + if (req.ok){ + return (await req.json()).available; + } + return false; + } catch { + return false; + } +} diff --git a/src/types.d.ts b/src/types.d.ts index a134d27..c7749ce 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -47,10 +47,10 @@ export interface LoginDto { } export interface RegisterDto { - username: string?; - email: string?; + username: string; + email: string; password: string?; - displayName: string?; + displayName: string; } export interface CreatePostDto { From 1b9b2d9805be1a158001a2b9704420464e2ff5da Mon Sep 17 00:00:00 2001 From: fede Date: Wed, 3 Dec 2025 20:33:38 -0300 Subject: [PATCH 2/6] =?UTF-8?q?a=C3=B1diddo=20color=20a=20los=20post=20con?= =?UTF-8?q?=20like?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/PostCard.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/PostCard.svelte b/src/lib/components/PostCard.svelte index aa5d750..1decfe9 100644 --- a/src/lib/components/PostCard.svelte +++ b/src/lib/components/PostCard.svelte @@ -137,7 +137,7 @@ - + From 43f9c9f5d888a06a2cce6f3c66b2ac2a658f3b75 Mon Sep 17 00:00:00 2001 From: fede Date: Wed, 3 Dec 2025 20:34:15 -0300 Subject: [PATCH 4/6] =?UTF-8?q?a=C3=B1adida=20validacion=20de=20email=20co?= =?UTF-8?q?ntra=20el=20back?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/signup-form.svelte | 30 +++++++++++++++++++++++++-- src/lib/hooks/checkEmail.ts | 16 ++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 src/lib/hooks/checkEmail.ts diff --git a/src/lib/components/signup-form.svelte b/src/lib/components/signup-form.svelte index 2b102af..e21e58c 100644 --- a/src/lib/components/signup-form.svelte +++ b/src/lib/components/signup-form.svelte @@ -11,25 +11,39 @@ import Spinner from './ui/spinner/spinner.svelte'; import { checkUsername } from '@/hooks/checkUsername'; + import { checkEmail } from '@/hooks/checkEmail'; let { showAlert = $bindable() } = $props(); let cargando = $state(false); + let repetirContraseña = $state(''); + let checkeandoUsuario: boolean | null = $state(null); let esUsuarioValido = $state(false); + let checkeandoEmail: boolean | null = $state(null); + let esEmailValido = $state(false); + async function checkUsuario() { checkeandoUsuario = true; esUsuarioValido = await checkUsername(dto.username); checkeandoUsuario = false; } + async function checkEmaill() { + checkeandoEmail = true; + esEmailValido = await checkEmail(dto.email); + checkeandoEmail = false; + } const setAlert = () => (showAlert = true); let dto: RegisterDto = $state({ password: '', username: '', email: '', displayName: '' }); const handleSubmit = async (e: SubmitEvent) => { + if (esUsuarioValido == false) return; + if (repetirContraseña !== dto.password) return; + cargando = true; await register(e, dto, setAlert); cargando = false; @@ -73,13 +87,25 @@ - Email +
+ Email + {#if checkeandoEmail == null} + + {:else if checkeandoEmail == true} + + {:else if esEmailValido} + + {:else} + + {/if} +
@@ -89,7 +115,7 @@ Confirmar Contraseña - + Confirma la contraseña diff --git a/src/lib/hooks/checkEmail.ts b/src/lib/hooks/checkEmail.ts new file mode 100644 index 0000000..2bbc8e8 --- /dev/null +++ b/src/lib/hooks/checkEmail.ts @@ -0,0 +1,16 @@ +import { apiBase } from "@/stores/url"; +import { get } from "svelte/store"; + +export async function checkEmail(email: string) { + try { + const req = await fetch(`${get(apiBase)}/api/users/check-email/${email}`, { + method: "GET" + }); + if (req.ok){ + return (await req.json()).available; + } + return false; + } catch { + return false; + } +} From 5af062754aaa27fa94030b70e357a1cf299998f2 Mon Sep 17 00:00:00 2001 From: fede Date: Wed, 3 Dec 2025 21:48:29 -0300 Subject: [PATCH 5/6] =?UTF-8?q?ahora=20requiere=20que=20repitas=20la=20con?= =?UTF-8?q?trase=C3=B1a=20para=20que=20te=20deje=20enviar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/signup-form.svelte | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/lib/components/signup-form.svelte b/src/lib/components/signup-form.svelte index e21e58c..7ce02b0 100644 --- a/src/lib/components/signup-form.svelte +++ b/src/lib/components/signup-form.svelte @@ -25,6 +25,10 @@ let checkeandoEmail: boolean | null = $state(null); let esEmailValido = $state(false); + let dto: RegisterDto = $state({ password: '', username: '', email: '', displayName: '' }); + + let coinsidenLasPass = $derived(repetirContraseña == dto.password); + async function checkUsuario() { checkeandoUsuario = true; esUsuarioValido = await checkUsername(dto.username); @@ -38,11 +42,9 @@ } const setAlert = () => (showAlert = true); - let dto: RegisterDto = $state({ password: '', username: '', email: '', displayName: '' }); - const handleSubmit = async (e: SubmitEvent) => { if (esUsuarioValido == false) return; - if (repetirContraseña !== dto.password) return; + if (!coinsidenLasPass) return; cargando = true; await register(e, dto, setAlert); @@ -115,12 +117,18 @@ Confirmar Contraseña - + Confirma la contraseña -