From 42d41eb19993b911435a1f185c6f6c36f7b5ccf7 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Sat, 27 Jun 2026 19:05:58 -0500 Subject: [PATCH] =?UTF-8?q?feat:=20m=C3=B3dulo=20de=20sugerencias=20(backe?= =?UTF-8?q?nd)=20+=20p=C3=A1gina=20p=C3=BAblica=20/sugerencias=20(admin)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Backend: POST /suggestions (público) + GET /suggestions (JWT admin) - Admin: página pública /sugerencias con formulario de sugerencias - schema.prisma: modelo suggestions - AuthGuard + Sidebar: /sugerencias como ruta pública Co-Authored-By: Claude Sonnet 4.6 --- admin/src/app/sugerencias/page.tsx | 96 +++++++++++++++++++ admin/src/components/auth-guard.tsx | 2 +- admin/src/components/sidebar.tsx | 2 +- backend/prisma/schema.prisma | 7 ++ backend/src/app.module.ts | 2 + backend/src/suggestions/dto/suggestion.dto.ts | 11 +++ .../src/suggestions/suggestions.controller.ts | 23 +++++ backend/src/suggestions/suggestions.module.ts | 9 ++ .../src/suggestions/suggestions.service.ts | 26 +++++ 9 files changed, 176 insertions(+), 2 deletions(-) create mode 100644 admin/src/app/sugerencias/page.tsx create mode 100644 backend/src/suggestions/dto/suggestion.dto.ts create mode 100644 backend/src/suggestions/suggestions.controller.ts create mode 100644 backend/src/suggestions/suggestions.module.ts create mode 100644 backend/src/suggestions/suggestions.service.ts diff --git a/admin/src/app/sugerencias/page.tsx b/admin/src/app/sugerencias/page.tsx new file mode 100644 index 0000000..7ea71ea --- /dev/null +++ b/admin/src/app/sugerencias/page.tsx @@ -0,0 +1,96 @@ +'use client'; + +import { useState } from 'react'; +import { api } from '@/lib/api'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { Textarea } from '@/components/ui/textarea'; +import { MessageSquarePlus, CheckCircle2 } from 'lucide-react'; + +export default function SugerenciasPage() { + const [name, setName] = useState(''); + const [message, setMessage] = useState(''); + const [loading, setLoading] = useState(false); + const [sent, setSent] = useState(false); + const [error, setError] = useState(''); + + async function handleSubmit(e: React.FormEvent) { + e.preventDefault(); + if (!message.trim()) return; + setLoading(true); + setError(''); + try { + await api.post('/suggestions', { name: name.trim() || undefined, message: message.trim() }); + setSent(true); + } catch { + setError('No se pudo enviar la sugerencia. Por favor intenta de nuevo.'); + } finally { + setLoading(false); + } + } + + return ( +
+ + +
+
+ +
+
+ Sugerencias + + Ayúdanos a mejorar ProsApp con tus comentarios y sugerencias + +
+ + {sent ? ( +
+ +

¡Gracias por tu sugerencia!

+

+ Tu mensaje fue recibido. Lo tendremos en cuenta para mejorar la app. +

+ +
+ ) : ( +
+
+ + setName(e.target.value)} + /> +
+
+ +