feat: reformulado el generador de links para que no sean secuenciales

This commit is contained in:
2026-03-18 16:24:44 -03:00
parent fba107e266
commit e4e400c3be
4 changed files with 37 additions and 26 deletions

View File

@@ -1,18 +1,6 @@
<script> <script>
import { url } from "./assets/hooks/getUrl"; import { url } from "./assets/hooks/getUrl";
import AcortadorForm from "./assets/lib/AcortadorForm.svelte"; import AcortadorForm from "./assets/lib/AcortadorForm.svelte";
$effect(
(async () => {
if (window.location.pathname.match(/^\/short\/url\/\d+$/)) {
const numero = window.location.pathname.split("/").pop();
// console.log(numero);
const res = await fetch(`${$url}/url/${numero}`, {
method: "GET",
});
console.log(res);
}
})(),
);
</script> </script>
<section id="center"> <section id="center">

View File

@@ -8,6 +8,6 @@ export const url = readable(
export const redirect = readable( export const redirect = readable(
typeof window !== "undefined" && window.location.hostname === "localhost" typeof window !== "undefined" && window.location.hostname === "localhost"
? "http://localhost:5173/short" ? "http://localhost:8080/"
: "https://fedesrv.ddns.net/s", : "https://fedesrv.ddns.net/s",
); );

View File

@@ -13,16 +13,16 @@
onsubmit={async (e) => { onsubmit={async (e) => {
e.preventDefault(); e.preventDefault();
// console.log(e.target[0].value); // console.log(e.target[0].value);
// console.log(input); console.log($url);
const req = { longUrl: input.value }; const req = { longUrl: input.value };
try { try {
const res = await fetch($url + "/url", { const res = await fetch(`${$url}/url/`, {
method: "POST", method: "POST",
body: JSON.stringify({ ...req }), body: JSON.stringify({ ...req }),
}); });
if (res.ok) { if (res.ok) {
const data = await res.json(); const data = await res.json();
// console.log(data.shortUrl); console.log(data.shortUrl);
popup = data.shortUrl; popup = data.shortUrl;
} }
} catch { } catch {
@@ -36,6 +36,16 @@
{#if popup} {#if popup}
<div transition:fade class="popup-dialog"> <div transition:fade class="popup-dialog">
{#if popup == "Error"}
<p>Fallo al crear la url</p>
<button
onclick={() => {
popup = "";
}}
>
Cerrar</button
>
{:else}
<p>Short URL creada</p> <p>Short URL creada</p>
<button <button
onclick={() => { onclick={() => {
@@ -43,8 +53,9 @@
popup = ""; popup = "";
}} }}
> >
Copy</button Copiar</button
> >
{/if}
</div> </div>
{/if} {/if}

View File

@@ -2,6 +2,7 @@ package repository
import ( import (
"fmt" "fmt"
"math/rand/v2"
"url-short/models" "url-short/models"
"gorm.io/gorm" "gorm.io/gorm"
@@ -38,7 +39,18 @@ func CrearUrl(longURL string, db *gorm.DB) (string, error) {
// } // }
var url models.Url var url models.Url
result = db.Create(&models.Url{Longurl: longURL}).Scan(&url) for {
url.Shorturl = rand.Int64()
result = db.Model(&models.Url{}).Where("shorturl = ?", url.Shorturl).Count(&counturl)
if result.Error != nil {
return "", result.Error
}
if counturl == 0 {
break
}
}
result = db.Create(&models.Url{Longurl: longURL, Shorturl: url.Shorturl}).Scan(&url)
shortURL := fmt.Sprintf("%d", url.Shorturl) shortURL := fmt.Sprintf("%d", url.Shorturl)
if result.Error != nil { if result.Error != nil {