Initial clean commit

This commit is contained in:
jlimolina 2026-01-13 13:39:51 +01:00
commit 6784d81c2c
141 changed files with 25219 additions and 0 deletions

116
routers/noticia.py Normal file
View file

@ -0,0 +1,116 @@
from flask import Blueprint, render_template, request, redirect, flash, url_for
from db import get_read_conn
from psycopg2 import extras
noticia_bp = Blueprint("noticia", __name__)
@noticia_bp.route("/noticia")
def noticia():
tr_id = request.args.get("tr_id")
noticia_id = request.args.get("id")
if not tr_id and not noticia_id:
flash("No se ha indicado ninguna noticia.", "warning")
return redirect(url_for("home.home"))
with get_read_conn() as conn:
conn.autocommit = True
with conn.cursor(cursor_factory=extras.DictCursor) as cur:
dato = None
if tr_id:
cur.execute(
"""
SELECT
t.id AS traduccion_id,
t.lang_from,
t.lang_to,
t.titulo_trad,
t.resumen_trad,
n.id AS noticia_id,
n.titulo AS titulo_orig,
n.resumen AS resumen_orig,
n.url,
n.fecha,
n.imagen_url,
n.fuente_nombre,
c.nombre AS categoria,
p.nombre AS pais
FROM traducciones t
JOIN noticias n ON n.id = t.noticia_id
LEFT JOIN categorias c ON c.id = n.categoria_id
LEFT JOIN paises p ON p.id = n.pais_id
WHERE t.id = %s
""",
(int(tr_id),),
)
dato = cur.fetchone()
else:
cur.execute(
"""
SELECT
NULL AS traduccion_id,
NULL AS lang_from,
NULL AS lang_to,
NULL AS titulo_trad,
NULL AS resumen_trad,
n.id AS noticia_id,
n.titulo AS titulo_orig,
n.resumen AS resumen_orig,
n.url,
n.fecha,
n.imagen_url,
n.fuente_nombre,
c.nombre AS categoria,
p.nombre AS pais
FROM noticias n
LEFT JOIN categorias c ON c.id = n.categoria_id
LEFT JOIN paises p ON p.id = n.pais_id
WHERE n.id = %s
""",
(noticia_id,),
)
dato = cur.fetchone()
tags = []
relacionadas = []
if dato and dato["traduccion_id"]:
cur.execute(
"""
SELECT tg.valor, tg.tipo
FROM tags_noticia tn
JOIN tags tg ON tg.id = tn.tag_id
WHERE tn.traduccion_id = %s
ORDER BY tg.tipo, tg.valor;
""",
(dato["traduccion_id"],),
)
tags = cur.fetchall()
cur.execute(
"""
SELECT
n2.url,
n2.titulo,
n2.fecha,
n2.imagen_url,
n2.fuente_nombre,
rn.score,
t2.titulo_trad,
t2.id AS related_tr_id
FROM related_noticias rn
JOIN traducciones t2 ON t2.id = rn.related_traduccion_id
JOIN noticias n2 ON n2.id = t2.noticia_id
WHERE rn.traduccion_id = %s
ORDER BY rn.score DESC
LIMIT 8;
""",
(dato["traduccion_id"],),
)
relacionadas = cur.fetchall()
return render_template("noticia.html", dato=dato, tags=tags, relacionadas=relacionadas)