Compare commits

...

5 Commits

Author SHA1 Message Date
ae64072be4 Update vite.config.js
All checks were successful
Build Urlshort / publish (push) Successful in 1m45s
2026-03-21 17:53:28 -03:00
0785d5820a feat: ahora puede generar numeros negativos
All checks were successful
Build Urlshort / publish (push) Successful in 1m34s
2026-03-21 17:50:14 -03:00
d392412c52 feat(ui): cambio de nombre en el title del acortador 2026-03-21 17:50:14 -03:00
248d6c6d19 fix: un par de logs quedaron sin comentar 2026-03-21 17:50:14 -03:00
e9566dcc62 dev (#1)
All checks were successful
Build Urlshort / publish (push) Successful in 1m29s
Reviewed-on: #1
Co-authored-by: fede <federico.nicolas.polidoro@gmail.com>
Co-committed-by: fede <federico.nicolas.polidoro@gmail.com>
2026-03-18 16:33:48 -03:00
7 changed files with 45 additions and 26 deletions

2
.gitignore vendored
View File

@@ -1,2 +1,4 @@
front/node_modules
shorturls.db
front/dist
url-short

View File

@@ -10,7 +10,7 @@
href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&display=swap"
rel="stylesheet"
/>
<title>front</title>
<title>Acortador de Urls</title>
</head>
<body>
<div id="app"></div>

View File

@@ -1,18 +1,6 @@
<script>
import { url } from "./assets/hooks/getUrl";
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>
<section id="center">

View File

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

View File

@@ -13,10 +13,10 @@
onsubmit={async (e) => {
e.preventDefault();
// console.log(e.target[0].value);
// console.log(input);
// console.log($url);
const req = { longUrl: input.value };
try {
const res = await fetch($url + "/url", {
const res = await fetch(`${$url}/url/`, {
method: "POST",
body: JSON.stringify({ ...req }),
});
@@ -30,21 +30,33 @@
}
}}
>
<button type="reset"></button>
<input type="text" id="acortadorinput" />
<button type="submit"></button>
</form>
{#if popup}
<div transition:fade class="popup-dialog">
<p>Short URL creada</p>
<button
onclick={() => {
navigator.clipboard.writeText(`${$redirect}/url/${popup}`);
popup = "";
}}
>
Copy</button
>
{#if popup == "Error"}
<p>Fallo al crear la url</p>
<button
onclick={() => {
popup = "";
}}
>
Cerrar</button
>
{:else}
<p>Short URL creada</p>
<button
onclick={() => {
navigator.clipboard.writeText(`${$redirect}/url/${popup}`);
popup = "";
}}
>
Copiar</button
>
{/if}
</div>
{/if}
@@ -82,4 +94,8 @@
.popup-dialog button:hover {
background-color: #0056b3;
}
button,
input {
padding: 0.25rem;
}
</style>

View File

@@ -3,6 +3,7 @@ import { svelte } from "@sveltejs/vite-plugin-svelte";
// https://vite.dev/config/
export default defineConfig({
base: "./",
plugins: [svelte()],
server: {
proxy: {

View File

@@ -2,6 +2,7 @@ package repository
import (
"fmt"
"math/rand/v2"
"url-short/models"
"gorm.io/gorm"
@@ -38,7 +39,18 @@ func CrearUrl(longURL string, db *gorm.DB) (string, error) {
// }
var url models.Url
result = db.Create(&models.Url{Longurl: longURL}).Scan(&url)
for {
url.Shorturl = int64(rand.Uint64())
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)
if result.Error != nil {