Skip to content

Repository files navigation

ComeTandil: Guía Gastronómica de Tandil

ComeTandil es una aplicación web moderna diseñada para explorar y reseñar los mejores lugares gastronómicos de la ciudad de Tandil.


Pasos para ejecutar

Una vez dentro de la carpeta donde está el proyecto:

Ejecutar el script:

./full_test.sh

Ingresar en el navegador a: http://localhost:8080

Una vez dentro de la app aparecerá un buscador con tags debajo, donde se puede encontrar un lugar. Luego en "Ver detalle" si se está logeado se podrán ver las reseñas que tiene el lugar y además crear y borrar reseñas. También si se está logueado, en el Header, aparecerá un título "Personas" donde se pueden buscar usuarios y ver las reseñas que tienen hechas junto con su foto de perfil. Por último, cada uno puede ver su propio perfil, cargar su foto/avatar y ver las reseñas hechas que también podrán eliminarse.


1. full_test.sh

  • ¿Qué hace?
    1. Levanta los contenedores con docker compose.
    2. Espera a que los servicios estén listos mediante la flag --wait (basado en los healthchecks definidos en el YAML)."
    3. Llama a otros scripts para insertar en la base de datos.
  • ¿A quién llama?
    • init_db.sh
    • scripts/hurl/insertar_resenas.sh

2. init_db.sh

Sirve para preparar la carga de datos iniciales fijos (usuarios base, categorías, lugares predefinidos) mediante SQL directo.

  • ¿Qué hace?
    1. Prepara el entorno para la ejecución de SQL.
    2. Invoca al script ejecutor apuntando al archivo de datos (inserts.sql).
  • ¿A quién llama?
    • scripts/ejecutar_sql.sh.

3. scripts/ejecutar_sql.sh

  • ¿Qué hace?
    1. Toma el archivo inserts.sql local.
    2. Usa docker exec para inyectar ese archivo en el comando psql dentro del contenedor activo.
  • ¿A quién llama?
    • Al comando docker exec (interactúa directamente con el contenedor cometandil-db-1).

4. scripts/hurl/insertar_resenas.sh

Es el tester funcional. A diferencia de los anteriores que inyectan datos "por atrás" (SQL), este inserta datos "por el frente" (HTTP), simulando ser usuarios reales usando la App.

  • ¿Qué hace?
    1. Se ubica en su propio directorio para encontrar assets (imágenes).
    2. Ejecuta flujos de prueba definidos en archivos .hurl (Login, Crear Usuario, Subir Reseña).
    3. Valida que el servidor responda con éxito (200 OK).
  • ¿A quién llama?
    • Al binario hurl.
    • Utiliza archivos auxiliares como avatar.jpg y create_users.hurl.

Arquitectura

La aplicación sigue un diseño modular para separar la lógica de negocio, la persistencia de datos y la presentación.

1. Backend y Persistencia

  • Go (Golang): Actúa como el motor del servidor, gestionando el routing y la lógica de negocio en los handlers.
  • sqlc: Usado para escribir consultas SQL y generar automáticamente el código Go seguro y fuertemente tipado para interactuar con PostgreSQL.
  • MinIO: Se integra a través de su SDK de Go para manejar operaciones de almacenamiento de objetos (Upload y Delete) en el bucket de avatares.

2. Capa Frontend

  • Templ: Genera las vistas HTML del lado del servidor.
  • HTMX: Permite que las interacciones del frontend (como el envío de formularios de reseñas o el borrado de elementos) se realicen mediante peticiones AJAX que devuelven solo HTML, que es insertado directamente en el DOM. Esto elimina la necesidad de API REST complejas y JavaScript.

3. Servicios de Autenticación

  • SuperTokens: Se ejecuta como un servicio independiente (a través de Docker) y proporciona los endpoints necesarios para el ciclo de autenticación. La aplicación Go lo integra mediante un middleware para proteger las rutas.

Estructura del Proyecto

├── docker-compose.yml
├── Dockerfile.dev
├── full_test.sh
├── go.mod
├── go.sum
├── init_db.sh
├── internal
│   ├── auth
│   │   ├── middleware.go
│   │   └── supertokens.go
│   ├── db
│   │   ├── authSchema.sql
│   │   ├── minio.go
│   │   ├── pgerrcodes.go
│   │   └── sqlc
│   │       ├── generated  
│   │       ├── queries
│   │       │   └── queries.sql
│   │       ├── schema
│   │       │   └── create.sql
│   │       └── sql.yaml
│   ├── handlers
│   │   ├── auth.go
│   │   ├── buscar_usuarios.go
│   │   ├── home.go
│   │   ├── images.go
│   │   ├── lugares.go
│   │   ├── perfil.go
│   │   └── resenias.go
│   ├── logic
│   │   ├── horario_lugar.go
│   │   ├── lugar.go
│   │   ├── lugar_tag.go
│   │   ├── resenia.go
│   │   ├── sigue.go
│   │   ├── tag.go
│   │   └── usuario.go
│   ├── tools
│   │   ├── extractIDFromURL.go
│   │   ├── float64toNumeric.go
│   │   ├── hash.go
│   │   ├── obtenerCoords.go
│   │   ├── readImages.go
│   │   └── timeConverter.go
│   └── views
│       ├── buscar_usuarios.templ
│       ├── buscar_usuarios_templ.go
│       ├── form_resenia_htmx.templ
│       ├── form_resenia_htmx_templ.go
│       ├── home.templ
│       ├── home_templ.go
│       ├── layout.templ
│       ├── layout_templ.go
│       ├── login.templ
│       ├── login_templ.go
│       ├── lugar_detalle.templ
│       ├── lugar_detalle_templ.go
│       ├── lugares_list.templ
│       ├── lugares_list_templ.go
│       ├── perfil.templ
│       ├── perfil_templ.go
│       ├── register.templ
│       ├── register_templ.go
│       ├── resenias_list.templ
│       └── resenias_list_templ.go
├── README.md
├── scripts
│   ├── borrar_bbdd.sh
│   ├── ejecutar_sql.sh
│   ├── hurl
│   │   ├── avatar.jpg
│   │   ├── create_users.hurl
│   │   ├── hurl
│   │   └── insertar_resenas.sh
│   ├── inserts.sql
│   └── instalar_herramientas.sh
├── server
│   └── main.go
├── static
│   ├── img
│   │   └── logo.png
│   └── styles.css

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages